From 6de93c0529cd0b15824eb4ebbd273d69af926357 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Mon, 8 Sep 2003 23:02:28 +0000
Subject: [PATCH] Update preface.

Use question marks rather than brackets to delimit optional elements in
Tcl synopses.

Fix stylesheet misfeature leading to excessively long cross-reference text
when linking to a different "part".

Remove <body> attributes -- CSS stylesheets should handle that.

Improve bibliography formatting.

Add fast-forward links for more convenient navigation.
---
 doc/src/sgml/history.sgml   | 306 +++++++++++++++---------------------
 doc/src/sgml/info.sgml      | 141 ++---------------
 doc/src/sgml/intro.sgml     | 255 +++++++++++++++++-------------
 doc/src/sgml/libpgtcl.sgml  |  10 +-
 doc/src/sgml/notation.sgml  |  83 ++++------
 doc/src/sgml/pltcl.sgml     |   6 +-
 doc/src/sgml/postgres.sgml  |  12 +-
 doc/src/sgml/stylesheet.dsl |  42 ++++-
 8 files changed, 366 insertions(+), 489 deletions(-)

diff --git a/doc/src/sgml/history.sgml b/doc/src/sgml/history.sgml
index 6e64f7e6026..07b96ce6f46 100644
--- a/doc/src/sgml/history.sgml
+++ b/doc/src/sgml/history.sgml
@@ -1,182 +1,181 @@
 <!--
-$Header: /cvsroot/pgsql/doc/src/sgml/history.sgml,v 1.20 2003/01/19 00:13:28 momjian Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/history.sgml,v 1.21 2003/09/08 23:02:28 petere Exp $
 -->
 
 <sect1 id="history">
  <title>A Brief History of <productname>PostgreSQL</productname></title>
 
+ <indexterm zone="history">
+  <primary>history</primary>
+  <secondary>of PostgreSQL</secondary>
+ </indexterm>
+
  <para>
-  The object-relational database management system now known as 
-  <productname>PostgreSQL</productname> (and briefly called
-  <productname>Postgres95</productname>) is derived from the
-  <productname>POSTGRES</productname> package written at the University of
-  California at Berkeley.  With over a decade of
-  development behind it, <productname>PostgreSQL</productname> 
-  is the most advanced open-source database available anywhere,
-  offering multiversion concurrency control, supporting almost
-  all SQL constructs (including subselects, transactions, and
-  user-defined types and functions), and having a wide range of
-  language bindings available (including C, C++, Java, Perl, Tcl, and Python).
+  The object-relational database management system now known as
+  <productname>PostgreSQL</productname> is derived from the
+  <productname>POSTGRES</productname> package written at the
+  University of California at Berkeley.  With over a decade of
+  development behind it, <productname>PostgreSQL</productname> is now
+  the most advanced open-source database available anywhere.
  </para>
 
- <sect2>
+ <sect2 id="history-berkeley">
   <title>The Berkeley <productname>POSTGRES</productname> Project</title>
 
+  <indexterm zone="history-berkeley">
+   <primary>POSTGRES</primary>
+  </indexterm>
+
   <para>
-   Implementation of the <productname>POSTGRES</productname> 
-   <acronym>DBMS</acronym> began in 1986.  The
-   initial  concepts  for  the  system  were  presented in
-   <xref linkend="STON86">
-   and the definition of the initial  data  model
-   appeared in 
-   <xref linkend="ROWE87">.
-   The design of the rule system at
-   that time was described in  
-   <xref linkend="STON87a">.
-   The  rationale
-   and  architecture  of the storage manager were detailed in 
-   <xref linkend="STON87b">.
+   The <productname>POSTGRES</productname> project, led by Professor
+   Michael Stonebraker, was sponsored by the Defense Advanced Research
+   Projects Agency (<acronym>DARPA</acronym>), the Army Research
+   Office (<acronym>ARO</acronym>), the National Science Foundation
+   (<acronym>NSF</acronym>), and ESL, Inc.  The implementation of
+   <productname>POSTGRES</productname> began in 1986.  The initial
+   concepts for the system were presented in <xref linkend="STON86">
+   and the definition of the initial data model appeared in <xref
+   linkend="ROWE87">.  The design of the rule system at that time was
+   described in <xref linkend="STON87a">.  The rationale and
+   architecture of the storage manager were detailed in <xref
+   linkend="STON87b">.
   </para>
 
   <para>
-   <productname>Postgres</productname> has undergone  several  major  releases  since
-   then.   The  first <quote>demoware</quote> system became operational
-   in 1987 and was shown at the  1988  <acronym>ACM-SIGMOD</acronym>  
-   Conference.   Version 1, described in 
-   <xref linkend="STON90a">, was released
-   to a few external users in June 1989.  In response to a
-   critique  of  the  first rule system 
-   (<xref linkend="STON89">), 
-   the rule
-   system was  redesigned 
-   (<xref linkend="STON90b">)
-   and  Version  2  was
-   released  in  June 1990 with the new rule system.  
-   Version 3 appeared in 1991 and added support for  multiple
-   storage  managers,  an  improved  query executor, and a
-   rewritten rule  system.   For  the  most  part, subsequent
-   releases  until <productname>Postgres95</productname> (see below)
-   focused on portability and reliability.
+   <productname>POSTGRES</productname> has undergone several major
+   releases since then.  The first <quote>demoware</quote> system
+   became operational in 1987 and was shown at the 1988
+   <acronym>ACM-SIGMOD</acronym> Conference.  Version 1, described in
+   <xref linkend="STON90a">, was released to a few external users in
+   June 1989.  In response to a critique of the first rule system
+   (<xref linkend="STON89">), the rule system was redesigned (<xref
+   linkend="STON90b">) and Version 2 was released in June 1990 with
+   the new rule system.  Version 3 appeared in 1991 and added support
+   for multiple storage managers, an improved query executor, and a
+   rewritten rule system.  For the most part, subsequent releases
+   until <productname>Postgres95</productname> (see below) focused on
+   portability and reliability.
   </para>
 
   <para>
-   <productname>POSTGRES</productname> has been  used
-   to  implement  many  different
-   research and production applications.  These include: a
-   financial data analysis system, a  jet  engine  
-   performance   monitoring   package,   an   asteroid  tracking
-   database, a medical information database,  and  several
-   geographic information systems.  
-   <productname>POSTGRES</productname> has also been
-   used as an educational tool  at  several  universities.
-   Finally,  
-   Illustra  Information  Technologies (later merged into
-   <ulink url="http://www.informix.com/"><productname>Informix</productname></ulink>,
-   which is now owned by <ulink url="http://www.ibm.com/">IBM</ulink>.)
-   picked up
-   the code and commercialized it.
-   <productname>POSTGRES</productname>  became  the  primary  data manager
-   for  the
-   <ulink url="http://meteora.ucsd.edu/s2k/s2k_home.html">Sequoia 2000</ulink>
-   scientific computing project in late 1992.
+   <productname>POSTGRES</productname> has been used to implement many
+   different research and production applications.  These include: a
+   financial data analysis system, a jet engine performance monitoring
+   package, an asteroid tracking database, a medical information
+   database, and several geographic information systems.
+   <productname>POSTGRES</productname> has also been used as an
+   educational tool at several universities.  Finally, Illustra
+   Information Technologies (later merged into <ulink
+   url="http://www.informix.com/"><productname>Informix</productname></ulink>,
+   which is now owned by <ulink
+   url="http://www.ibm.com/">IBM</ulink>.)  picked up the code and
+   commercialized it.  In late 1992,
+   <productname>POSTGRES</productname> became the primary data manager
+   for the <ulink
+   url="http://meteora.ucsd.edu/s2k/s2k_home.html">Sequoia
+   2000</ulink> scientific computing project.
   </para>
 
   <para>
-   The size of the  external  user  community
-   nearly  doubled  during  1993.   It became increasingly
-   obvious that maintenance of the prototype code and 
-   support  was  taking  up large amounts of time that should
-   have been devoted to database research.  In  an  effort
-   to  reduce  this support burden, the Berkeley
-   <productname>POSTGRES</productname> project officially
-   ended with Version 4.2.
+   The size of the external user community nearly doubled during 1993.
+   It became increasingly obvious that maintenance of the prototype
+   code and support was taking up large amounts of time that should
+   have been devoted to database research.  In an effort to reduce
+   this support burden, the Berkeley
+   <productname>POSTGRES</productname> project officially ended with
+   Version 4.2.
   </para>
  </sect2>
 
- <sect2>
+ <sect2 id="history-postgres95">
   <title><productname>Postgres95</productname></title>
 
+  <indexterm zone="history-postgres95">
+   <primary>Postgres95</primary>
+  </indexterm>
+
   <para>
-   In 1994, Andrew Yu and Jolly Chen
-   added a SQL language interpreter to <productname>POSTGRES</productname>.
+   In 1994, Andrew Yu and Jolly Chen added a SQL language interpreter
+   to <productname>POSTGRES</productname>.  Under a new name,
    <productname>Postgres95</productname> was subsequently released to
-   the Web to find its own way in the world as an
-   open-source descendant of the original <productname>POSTGRES</productname>
+   the web to find its own way in the world as an open-source
+   descendant of the original <productname>POSTGRES</productname>
    Berkeley code.
   </para>
 
   <para>
-   <productname>Postgres95</productname> code was completely
-   ANSI C and trimmed in size by 25%. Many
-   internal changes improved performance and maintainability. 
-   <productname>Postgres95</productname> release 1.0.x ran about  30-50%
-   faster  on  the  Wisconsin  Benchmark compared to 
-   <productname>POSTGRES</productname>, Version 4.2.
-   Apart from bug fixes, the following were the major enhancements:
+   <productname>Postgres95</productname> code was completely ANSI C
+   and trimmed in size by 25%. Many internal changes improved
+   performance and
+   maintainability. <productname>Postgres95</productname> release
+   1.0.x ran about 30-50% faster on the Wisconsin Benchmark compared
+   to <productname>POSTGRES</productname>, Version 4.2.  Apart from
+   bug fixes, the following were the major enhancements:
 
    <itemizedlist>
     <listitem>
      <para>
       The query language PostQUEL was replaced with
-      <acronym>SQL</acronym> (implemented in the server).
-      Subqueries were not supported until
-      <productname>PostgreSQL</productname> (see below), but they
-      could be imitated in <productname>Postgres95</productname> with user-defined
-      <acronym>SQL</acronym> functions. Aggregates were
-      re-implemented.  Support for the GROUP BY query clause was also added.
-      The <filename>libpq</filename> interface remained
-      available  for  <acronym>C</acronym>  
-      programs.
+      <acronym>SQL</acronym> (implemented in the server).  Subqueries
+      were not supported until <productname>PostgreSQL</productname>
+      (see below), but they could be imitated in
+      <productname>Postgres95</productname> with user-defined
+      <acronym>SQL</acronym> functions. Aggregate functions were
+      re-implemented.  Support for the <literal>GROUP BY</literal>
+      query clause was also added.
      </para>
     </listitem>
 
     <listitem>
      <para>
       In addition to the monitor program, a new program
-      (<application>psql</application>) was provided for interactive SQL queries
-      using <acronym>GNU</acronym> <application>Readline</application>.
+      (<application>psql</application>) was provided for interactive
+      SQL queries, which used <acronym>GNU</acronym>
+      <application>Readline</application>.
      </para>
     </listitem>
 
     <listitem>
      <para>
-      A new  front-end  library,  <filename>libpgtcl</filename>,
-      supported  <acronym>Tcl</acronym>-based  clients.   A sample shell, 
-      <command>pgtclsh</command>, provided new Tcl  commands  to  interface
-      <application>Tcl</application>
-      programs with the <productname>Postgres95</productname> backend.
+      A new front-end library, <filename>libpgtcl</filename>,
+      supported <acronym>Tcl</acronym>-based clients.  A sample shell,
+      <command>pgtclsh</command>, provided new Tcl commands to
+      interface <application>Tcl</application> programs with the
+      <productname>Postgres95</productname> server.
      </para>
     </listitem>
 
     <listitem>
      <para>
-      The  large-object interface was overhauled. The Inversion large objects were
-      the  only  mechanism for  storing  large objects.
-      (The Inversion file system was removed.)
+      The large-object interface was overhauled. The inversion large
+      objects were the only mechanism for storing large objects.  (The
+      inversion file system was removed.)
      </para>
     </listitem>
 
     <listitem>
      <para>
-      The  instance-level  rule  system  was removed.
-      Rules were still available as rewrite rules.
+      The instance-level rule system was removed.  Rules were still
+      available as rewrite rules.
      </para>
     </listitem>
 
     <listitem>
      <para>
-      A short tutorial introducing regular <acronym>SQL</acronym> features as
-      well as those of <productname>Postgres95</productname> was
-      distributed with the source code
+      A short tutorial introducing regular <acronym>SQL</acronym>
+      features as well as those of
+      <productname>Postgres95</productname> was distributed with the
+      source code
      </para>
     </listitem>
 
     <listitem>
      <para>
-      <acronym>GNU</acronym> make (instead of  <acronym>BSD</acronym>  make)  was  used
-      for  the build.  Also,  <productname>Postgres95</productname>  could  be
-      compiled with an unpatched <productname>GCC</productname>
-      (data alignment of  doubles  was fixed).
+      <acronym>GNU</acronym> make (instead of <acronym>BSD</acronym>
+      make) was used for the build.  Also,
+      <productname>Postgres95</productname> could be compiled with an
+      unpatched <productname>GCC</productname> (data alignment of
+      doubles was fixed).
      </para>
     </listitem>
    </itemizedlist>
@@ -187,83 +186,28 @@ $Header: /cvsroot/pgsql/doc/src/sgml/history.sgml,v 1.20 2003/01/19 00:13:28 mom
   <title><productname>PostgreSQL</productname></title>
 
   <para>
-   By 1996, it became clear that the name <quote>Postgres95</quote> would
-   not stand the test of time. We chose a new name,
+   By 1996, it became clear that the name <quote>Postgres95</quote>
+   would not stand the test of time. We chose a new name,
    <productname>PostgreSQL</productname>, to reflect the relationship
-   between the original <productname>POSTGRES</productname> and the more
-   recent versions with <acronym>SQL</acronym> capability.  At the same
-   time, we set the version numbering to start at 6.0, putting the
-   numbers back into the sequence originally begun by the Berkeley
-   <productname>POSTGRES</productname> project.
+   between the original <productname>POSTGRES</productname> and the
+   more recent versions with <acronym>SQL</acronym> capability.  At
+   the same time, we set the version numbering to start at 6.0,
+   putting the numbers back into the sequence originally begun by the
+   Berkeley <productname>POSTGRES</productname> project.
   </para>
 
   <para>
-   The emphasis during development of <productname>Postgres95</productname>
-   was on identifying and understanding existing problems in the backend code.
-   With <productname>PostgreSQL</productname>, 
-   the emphasis has shifted to augmenting features and capabilities, although
-   work continues in all areas.
+   The emphasis during development of
+   <productname>Postgres95</productname> was on identifying and
+   understanding existing problems in the server code.  With
+   <productname>PostgreSQL</productname>, the emphasis has shifted to
+   augmenting features and capabilities, although work continues in
+   all areas.
   </para>
 
   <para>
-   Major enhancements in <productname>PostgreSQL</productname> include:
+   Details about what has happened in PostgreSQL since then can be
+   found in <xref linkend="release">.
   </para>
-
-  <itemizedlist>
-   <listitem>
-    <para>
-     Table-level locking has been replaced by multiversion concurrency control,
-     which allows readers to continue reading consistent data during writer activity
-     and enables hot backups from <application>pg_dump</> while the database stays available for
-     queries.
-    </para>
-   </listitem>
-
-   <listitem>
-    <para>
-     Important backend features, including subselects, defaults, 
-     constraints, and triggers, have been implemented.
-    </para>
-   </listitem>
-
-   <listitem>
-    <para>
-     Additional <acronym>SQL92</acronym>-compliant language features have been added,
-     including primary keys, quoted identifiers, literal string type coercion,
-     type casting, and binary and hexadecimal integer input.
-    </para>
-   </listitem>
-
-   <listitem>
-    <para>
-     Built-in types have been improved, including new wide-range date/time types 
-     and additional geometric type support.
-    </para>
-   </listitem>
-
-   <listitem>
-    <para>
-     Overall backend code speed has been increased by approximately 20-40%, 
-     and backend start-up time has decreased by 80% since version 6.0 was released.
-    </para>
-   </listitem>
-  </itemizedlist>
  </sect2>
 </sect1>
-
-<!-- Keep this comment at the end of the file
-Local variables:
-mode:sgml
-sgml-omittag:nil
-sgml-shorttag:t
-sgml-minimize-attributes:nil
-sgml-always-quote-attributes:t
-sgml-indent-step:1
-sgml-indent-data:t
-sgml-parent-document:nil
-sgml-default-dtd-file:"./reference.ced"
-sgml-exposed-tags:nil
-sgml-local-catalogs:("/usr/lib/sgml/catalog")
-sgml-local-ecat-files:nil
-End:
--->
diff --git a/doc/src/sgml/info.sgml b/doc/src/sgml/info.sgml
index 62d754d1337..73e1d854d8e 100644
--- a/doc/src/sgml/info.sgml
+++ b/doc/src/sgml/info.sgml
@@ -1,104 +1,21 @@
 <!--
-$Header: /cvsroot/pgsql/doc/src/sgml/info.sgml,v 1.18 2003/01/19 00:13:28 momjian Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/info.sgml,v 1.19 2003/09/08 23:02:28 petere Exp $
 -->
 
 <sect1 id="resources">
- <title>Overview of Documentation Resources</title>
+ <title>Further Information</title>
 
  <para>
-  The <productname>PostgreSQL</> documentation is organized into
-  several books:
+  Besides the documentation, that is, this book, there are other
+  resources about <productname>PostgreSQL</productname>:
 
   <variablelist>
-   <varlistentry>
-    <term>&cite-tutorial;</term>
-    <listitem>
-     <para>
-      An informal introduction for new users.
-     </para>
-    </listitem>
-   </varlistentry>
-
-   <varlistentry>
-    <term>&cite-user;</term>
-    <listitem>
-     <para>
-      Documents the <acronym>SQL</acronym> query language environment,
-      including data types and functions, as well as user-level
-      performance tuning.  Every <productname>PostgreSQL</> user
-      should read this.
-     </para>
-    </listitem>
-   </varlistentry>
-
-   <varlistentry>
-    <term>&cite-admin;</term>
-    <listitem>
-     <para>
-      Installation and server management information.  Everyone who
-      runs a <productname>PostgreSQL</> server, either for personal
-      use or for other users, needs to read this.
-     </para>
-    </listitem>
-   </varlistentry>
-
-   <varlistentry>
-    <term>&cite-programmer;</term>
-    <listitem>
-     <para>
-      Advanced information for application programmers. Topics include
-      type and function extensibility, library interfaces, and
-      application design issues.
-     </para>
-    </listitem>
-   </varlistentry>
-
-   <varlistentry>
-    <term>&cite-reference;</term>
-    <listitem>
-     <para>
-      Reference pages for <acronym>SQL</acronym> command syntax, and
-      client and server programs.  This book is auxiliary to the
-      User's, Administrator's, and Programmer's Guides.
-     </para>
-    </listitem>
-   </varlistentry>
-
-   <varlistentry>
-    <term>&cite-developer;</term>
-    <listitem>
-     <para>
-      Information for <productname>PostgreSQL</productname>
-      developers.  This is intended for those who are contributing to
-      the <productname>PostgreSQL</productname> project; application
-      development information appears in the &cite-programmer;.
-     </para>
-    </listitem>
-   </varlistentry>
-  </variablelist>
- </para>
-
- <para>
-  In addition to this manual set, there are other resources to help you with
-  <productname>PostgreSQL</productname> installation and use:
-
-  <variablelist>
-   <varlistentry>
-    <term>man pages</term>
-    <listitem>
-     <para>
-      The &cite-reference;'s pages in the traditional Unix man
-      format. There is no difference in content.
-     </para>
-    </listitem>
-   </varlistentry>
-
    <varlistentry>
     <term>FAQs</term>
     <listitem>
      <para>
-      Frequently Asked Questions (FAQ) lists document both general issues
-      and some platform-specific issues.
+      The FAQ list <indexterm><primary>FAQ-Liste</></> contains
+      continuously updated answers to frequently asked questions.
      </para>
     </listitem>
    </varlistentry>
@@ -107,7 +24,8 @@ $Header: /cvsroot/pgsql/doc/src/sgml/info.sgml,v 1.18 2003/01/19 00:13:28 momjia
     <term>READMEs</term>
     <listitem>
      <para>
-      README files are available for some contributed packages.
+      <filename>README</filename> files are available for some
+      contributed packages.
      </para>
     </listitem>
    </varlistentry>
@@ -118,8 +36,8 @@ $Header: /cvsroot/pgsql/doc/src/sgml/info.sgml,v 1.18 2003/01/19 00:13:28 momjia
      <para>
       The <ulink
       url="http://www.postgresql.org"><productname>PostgreSQL</productname>
-      web site</ulink> carries details on the latest release, upcoming
-      features, and other information to make your work or play with
+      web site</ulink> carries details on the latest release and other
+      information to make your work or play with
       <productname>PostgreSQL</productname> more productive.
      </para>
     </listitem>
@@ -131,10 +49,8 @@ $Header: /cvsroot/pgsql/doc/src/sgml/info.sgml,v 1.18 2003/01/19 00:13:28 momjia
      <para>
       The mailing lists are a good place to have your questions
       answered, to share experiences with other users, and to contact
-      the developers.  Consult the <ulink
-      url="http://www.postgresql.org/users-lounge/">User's
-      Lounge</ulink> section of the <productname>PostgreSQL</>
-      web site for details.
+      the developers.  Consult the <productname>PostgreSQL</> web site
+      for details.
      </para>
     </listitem>
    </varlistentry>
@@ -143,41 +59,18 @@ $Header: /cvsroot/pgsql/doc/src/sgml/info.sgml,v 1.18 2003/01/19 00:13:28 momjia
     <term>Yourself!</term>
     <listitem>
      <para>
-      <productname>PostgreSQL</productname> is an open-source effort.
+      <productname>PostgreSQL</productname> is an open-source project.
       As such, it depends on the user community for ongoing support.
       As you begin to use <productname>PostgreSQL</productname>, you
       will rely on others for help, either through the documentation
       or through the mailing lists.  Consider contributing your
-      knowledge back. If you learn something which is not in the
-      documentation, write it up and contribute it.  If you add
-      features to the code, contribute them.
-     </para>
-
-     <para>
-      Even those without a lot of experience can provide corrections
-      and minor changes in the documentation, and that is a good way
-      to start.  The <email>pgsql-docs@postgresql.org</email> mailing
-      list is the place to get going.
+      knowledge back. Read the mailing lists and answer questions.  If
+      you learn something which is not in the documentation, write it
+      up and contribute it.  If you add features to the code,
+      contribute them.
      </para>
     </listitem>
    </varlistentry>
   </variablelist>
  </para>
 </sect1>
-
-<!-- Keep this comment at the end of the file
-Local variables:
-mode:sgml
-sgml-omittag:nil
-sgml-shorttag:t
-sgml-minimize-attributes:nil
-sgml-always-quote-attributes:t
-sgml-indent-step:1
-sgml-indent-data:t
-sgml-parent-document:nil
-sgml-default-dtd-file:"./reference.ced"
-sgml-exposed-tags:nil
-sgml-local-catalogs:("/usr/lib/sgml/catalog")
-sgml-local-ecat-files:nil
-End:
--->
diff --git a/doc/src/sgml/intro.sgml b/doc/src/sgml/intro.sgml
index ba5653f155c..c547c7a8808 100644
--- a/doc/src/sgml/intro.sgml
+++ b/doc/src/sgml/intro.sgml
@@ -1,110 +1,151 @@
 <!--
-$Header: /cvsroot/pgsql/doc/src/sgml/intro.sgml,v 1.20 2002/10/24 17:48:54 petere Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/intro.sgml,v 1.21 2003/09/08 23:02:28 petere Exp $
 -->
 
-  <sect1 id="intro-whatis">
-   <title> What is <productname>PostgreSQL</productname>?</title>
-
-   <para>
-    <productname>PostgreSQL</productname> is an object-relational
-    database management system (<acronym>ORDBMS</acronym>) based on
-    <ulink url="http://s2k-ftp.CS.Berkeley.EDU:8000/postgres/postgres.html">
-    <productname>POSTGRES, Version 4.2</productname></ulink>,
-    developed at the University of California at Berkeley Computer
-    Science Department.  The <productname>POSTGRES</productname>
-    project, led by Professor Michael Stonebraker, was sponsored by
-    the Defense Advanced Research Projects Agency
-    (<acronym>DARPA</acronym>), the Army Research Office
-    (<acronym>ARO</acronym>), the National Science Foundation
-    (<acronym>NSF</acronym>), and ESL, Inc.
-   </para>
-
-   <para>
-    <productname>PostgreSQL</productname> is an open-source descendant of
-    this original Berkeley code.  It provides SQL92/SQL99 language support
-    and other modern features.
-   </para>
-
-   <para>
-    <productname>POSTGRES</productname> pioneered many of the
-    object-relational concepts now becoming available in some commercial
-    databases.
-    Traditional   relational  database  management  systems
-    (<acronym>RDBMS</acronym>) support a data model consisting of a collection
-    of named relations, containing attributes of a specific
-    type.  In current commercial  systems,  possible  types
-    include  floating  point  numbers,  integers, character
-    strings, money, and dates.  It is  commonly  recognized
-    that  this model is inadequate for future data-processing applications.
-    The relational  model  successfully  replaced  previous
-    models  in  part  because  of its <quote>Spartan simplicity</quote>.
-    However, this simplicity makes  the
-    implementation  of  certain applications very difficult.
-    <productname>PostgreSQL</productname> offers  substantial additional
-    power  by  incorporating  the following additional
-    concepts in such a way that  users  can  easily
-    extend the system:
-
-    <itemizedlist spacing="compact">
-     <listitem>
-      <simpara>inheritance</>
-     </listitem>
-     <listitem>
-      <simpara>data types</>
-     </listitem>
-     <listitem>
-      <simpara>functions</simpara>
-     </listitem>
-    </itemizedlist>
-   </para>
-
-   <para>
-    Other features provide additional power and flexibility:
-
-    <itemizedlist spacing="compact">
-     <listitem>
-      <simpara>constraints</simpara>
-     </listitem>
-     <listitem>
-      <simpara>triggers</simpara>
-     </listitem>
-     <listitem>
-      <simpara>rules</simpara>
-     </listitem>
-     <listitem>
-      <simpara>transactional integrity</simpara>
-     </listitem>
-    </itemizedlist>
-   </para>
-
-   <para>
-    These features put <productname>PostgreSQL</productname> into the
-    category of databases referred to as
-    <firstterm>object-relational</firstterm>. Note that this is distinct
-    from those referred to as <firstterm>object-oriented</firstterm>,
-    which in general are not as well suited to supporting
-    traditional relational database languages.
-    So, although <productname>PostgreSQL</productname> has some
-    object-oriented features, it is firmly in the relational database
-    world. In fact, some commercial databases have recently
-    incorporated features pioneered by <productname>PostgreSQL</productname>.
-   </para>
-
-  </sect1>
-
-<!-- Keep this comment at the end of the file
-Local variables:
-mode:sgml
-sgml-omittag:nil
-sgml-shorttag:t
-sgml-minimize-attributes:nil
-sgml-always-quote-attributes:t
-sgml-indent-step:1
-sgml-indent-data:t
-sgml-parent-document:nil
-sgml-default-dtd-file:"./reference.ced"
-sgml-exposed-tags:nil
-sgml-local-catalogs:("/usr/lib/sgml/catalog")
-sgml-local-ecat-files:nil
-End:
--->
+<preface id="preface">
+ <title>Preface</title>
+
+ <para>
+  This book is the official documentation of PostgreSQL.  It is being
+  written by the PostgreSQL developers and other volunteers in
+  parallel to the development of the PostgreSQL software.  It
+  describes all the functionality that the current version of
+  PostgreSQL officially supports.
+ </para>
+
+ <para>
+  To make the large amount of information about PostgreSQL manageable,
+  this book has been organized in several parts.  Each part is
+  targeted at a different class of users, or at users in different
+  stages of their PostgreSQL experience:
+
+  <itemizedlist>
+   <listitem>
+    <para>
+     <xref linkend="tutorial"> is an informal introduction for new users.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     <xref linkend="sql"> documents the <acronym>SQL</acronym> query
+     language environment, including data types and functions, as well
+     as user-level performance tuning.  Every
+     <productname>PostgreSQL</> user should read this.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     <xref linkend="admin"> describes the installation and
+     administration of the server.  Everyone that runs a PostgreSQL
+     server, be it for private use or for others, should read this
+     part.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     <xref linkend="client-interfaces"> describes the programming
+     interfaces for PostgreSQL client programs.
+    </para>
+   </listitem>
+
+
+   <listitem>
+    <para>
+     <xref linkend="server-programming"> contains information for
+     advanced users about the extensibility capabilities of the
+     server.  Topics are, for instance, user-defined data types and
+     functions.
+    </para>
+   </listitem>
+
+   <listitem>
+    <para>
+     <xref linkend="reference"> contains information about the syntax
+     of SQL commands, client and server programs.  This part supports
+     the other parts with structured information sorted by command or
+     program.
+    </para>
+   </listitem>
+  </itemizedlist>
+ </para>
+
+ <sect1 id="intro-whatis">
+  <title> What is <productname>PostgreSQL</productname>?</title>
+
+  <para>
+   <productname>PostgreSQL</productname> is an object-relational
+   database management system (<acronym>ORDBMS</acronym>) based on
+   <ulink url="http://s2k-ftp.CS.Berkeley.EDU:8000/postgres/postgres.html">
+   <productname>POSTGRES, Version 4.2</productname></ulink>, developed
+   at the University of California at Berkeley Computer Science
+   Department.  POSTGRES pioneered many concepts that only became
+   available in some commercial database systems much later.
+  </para>
+
+  <para>
+   <productname>PostgreSQL</productname> is an open-source descendant
+   of this original Berkeley code.  It supports SQL92 and SQL99 and
+   offers many modern features:
+
+   <itemizedlist spacing="compact">
+    <listitem>
+     <simpara>complex queries</simpara>
+    </listitem>
+    <listitem>
+     <simpara>foreign keys</simpara>
+    </listitem>
+    <listitem>
+     <simpara>triggers</simpara>
+    </listitem>
+    <listitem>
+     <simpara>views</simpara>
+    </listitem>
+    <listitem>
+     <simpara>transactional integrity</simpara>
+    </listitem>
+    <listitem>
+     <simpara>multiversion concurrency control</simpara>
+    </listitem>
+   </itemizedlist>
+
+   Also, PostgreSQL can be extended by the user in many ways, for
+   example by adding new
+
+   <itemizedlist spacing="compact">
+    <listitem>
+     <simpara>data types</simpara>
+    </listitem>
+    <listitem>
+     <simpara>functions</simpara>
+    </listitem>
+    <listitem>
+     <simpara>operators</simpara>
+    </listitem>
+    <listitem>
+     <simpara>aggregate functions</simpara>
+    </listitem>
+    <listitem>
+     <simpara>index methods</simpara>
+    </listitem>
+    <listitem>
+     <simpara>procedural languages</simpara>
+    </listitem>
+   </itemizedlist>
+  </para>
+
+  <para>
+   And because of the liberal license, PostgreSQL can be used,
+   modified, and distributed by everyone free of charge for any
+   purpose, be it private, commercial, or academic.
+  </para>
+ </sect1>
+
+ &history;
+ &notation;
+ &info;
+ &problems;
+
+</preface>
diff --git a/doc/src/sgml/libpgtcl.sgml b/doc/src/sgml/libpgtcl.sgml
index afcc7061ede..70bf66806ed 100644
--- a/doc/src/sgml/libpgtcl.sgml
+++ b/doc/src/sgml/libpgtcl.sgml
@@ -201,7 +201,7 @@ load libpgtcl[info sharedlibextension]
  <refsynopsisdiv>
 <synopsis>
 pg_connect -conninfo <parameter>connectOptions</parameter>
-pg_connect <parameter>dbName</parameter> <optional>-host <parameter>hostName</parameter></optional> <optional>-port <parameter>portNumber</parameter></optional> <optional>-tty <parameter>tty</parameter</optional> <optional>-options <parameter>serverOptions</parameter></optional>
+pg_connect <parameter>dbName</parameter> <optional role="tcl">-host <parameter>hostName</parameter></optional> <optional role="tcl">-port <parameter>portNumber</parameter></optional> <optional role="tcl">-tty <parameter>tty</parameter</optional> <optional role="tcl">-options <parameter>serverOptions</parameter></optional>
 </synopsis>
  </refsynopsisdiv>
 
@@ -612,7 +612,7 @@ pg_result <parameter>resultHandle</parameter> <parameter>resultOption</parameter
        </varlistentry>
 
        <varlistentry>
-        <term><option>-assignbyidx <parameter>arrayName</> <optional><parameter>appendstr</></optional></option></term>
+        <term><option>-assignbyidx <parameter>arrayName</> <optional role="tcl"><parameter>appendstr</></optional></option></term>
         <listitem>
          <para>
           Assign the results to an array using the values of the
@@ -839,7 +839,7 @@ pg_select $pgconn "SELECT * FROM table1;" array {
 
  <refsynopsisdiv>
 <synopsis>
-pg_execute <optional>-array <parameter>arrayVar</parameter></optional> <optional>-oid <parameter>oidVar</parameter></optional> <parameter>conn</parameter> <parameter>commandString</parameter> <optional><parameter>procedure</parameter></optional>
+pg_execute <optional role="tcl">-array <parameter>arrayVar</parameter></optional> <optional role="tcl">-oid <parameter>oidVar</parameter></optional> <parameter>conn</parameter> <parameter>commandString</parameter> <optional role="tcl"><parameter>procedure</parameter></optional>
 </synopsis>
  </refsynopsisdiv>
 
@@ -1020,7 +1020,7 @@ pg_execute $pgconn "SELECT max(value) AS max, min(value) AS min FROM mytable;"
 
  <refsynopsisdiv>
 <synopsis>
-pg_listen <parameter>conn</parameter> <parameter>notifyName</parameter> <optional><parameter>callbackCommand</parameter></optional>
+pg_listen <parameter>conn</parameter> <parameter>notifyName</parameter> <optional role="tcl"><parameter>callbackCommand</parameter></optional>
 </synopsis>
  </refsynopsisdiv>
 
@@ -1120,7 +1120,7 @@ pg_listen <parameter>conn</parameter> <parameter>notifyName</parameter> <optiona
 
  <refsynopsisdiv>
 <synopsis>
-pg_on_connection_loss <parameter>conn</parameter> <optional><parameter>callbackCommand</parameter></optional>
+pg_on_connection_loss <parameter>conn</parameter> <optional role="tcl"><parameter>callbackCommand</parameter></optional>
 </synopsis>
  </refsynopsisdiv>
 
diff --git a/doc/src/sgml/notation.sgml b/doc/src/sgml/notation.sgml
index 263a2c27d4c..0f9c27862b8 100644
--- a/doc/src/sgml/notation.sgml
+++ b/doc/src/sgml/notation.sgml
@@ -1,70 +1,47 @@
 <!--
-$Header: /cvsroot/pgsql/doc/src/sgml/notation.sgml,v 1.22 2003/03/25 16:15:37 petere Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/notation.sgml,v 1.23 2003/09/08 23:02:28 petere Exp $
 -->
 
 <sect1 id="notation">
- <title>Terminology and Notation</title>
+ <title>Conventions</title>
 
  <para>
-  An <firstterm>administrator</firstterm> is generally a person who is
-  in charge of installing and running the server.  A <firstterm>user</firstterm>
-  could be anyone who is using, or wants to use, any part of the
-  <productname>PostgreSQL</productname> system.  These terms should not
-  be interpreted too narrowly; this documentation set does not have fixed
-  presumptions about system administration procedures.
+  This book uses the following typographical conventions to mark
+  certain portions of test: new terms, foreign phrases, and other
+  important passages are emphasized in <emphasis>italics</>.
+  Everything that represents input or output of the computer, in
+  particular commands, program code, and screen output, is shown in a
+  monospaced front (<literal>example</literal>).  Within such
+  passages, italics (<replaceable>example</replaceable>) indicate,
+  that you must insert an actual value instead of the placeholder.  On
+  occasion, parts of program code are emphasized in bold face
+  (<emphasis role="bold"><literal>example</></>), if they have been
+  added or changed since the preceding example.
  </para>
 
  <para>
-  We use <filename>/usr/local/pgsql/</filename> as the root
-  directory of the installation and <filename>/usr/local/pgsql/data</filename>
-  as the directory with the database files.  These directories may vary
-  on your site, details can be derived in <xref linkend="installation">.
+  The following conventions are used in the synopsis of a command:
+  brackets (<literal>[</literal> and <literal>]</literal>) indicate
+  optional parts.  (In the synopsis of a Tcl command, question marks
+  (<literal>?</>) are used instead, as is usual in Tcl.)  Braces
+  (<literal>{</literal> and <literal>}</literal>) and vertical lines
+  (<literal>|</literal>) indicate that you must choose one
+  alternative.  Dots (<literal>...</>) mean that the preceding element
+  can be repeated.
  </para>
 
  <para>
-  In a command synopsis, brackets
-  (<literal>[</literal> and <literal>]</literal>) indicate an optional phrase or keyword.
-  Anything in braces
-  (<literal>{</literal> and <literal>}</literal>) and containing vertical bars
-  (<literal>|</literal>)
-  indicates that you must choose one alternative.
+  Where it enhances the clarity, SQL commands are preceded by the
+  prompt <literal>=&gt;</>, and shell commands are preceded by the
+  prompt <literal>$</>.  Normally, prompts are not shown, though.
  </para>
 
  <para>
-  Examples will show commands executed from various accounts and programs.
-  Commands executed from a Unix shell may be preceded with a dollar sign
-  (<quote><literal>$</literal></quote>).  Commands executed from particular user
-  accounts such as <systemitem>root</> or <systemitem>postgres</> are specially flagged and explained.
-  <acronym>SQL</acronym> commands may be preceded with
-  <quote><literal>=&gt;</literal></quote>
-  or will have no leading prompt, depending on the context.
+  An <firstterm>administrator</firstterm> is generally a person who is
+  in charge of installing and running the server.  A <firstterm>user</firstterm>
+  could be anyone who is using, or wants to use, any part of the
+  <productname>PostgreSQL</productname> system.  These terms should not
+  be interpreted too narrowly; this documentation set does not have fixed
+  presumptions about system administration procedures.
  </para>
-
- <note>
-  <para>
-   The notation for
-   flagging commands is not universally consistent throughout the
-   documentation set.
-   Please report problems to the documentation mailing list
-   <email>pgsql-docs@postgresql.org</email>.
-  </para>
- </note>
-
 </sect1>
-
-<!-- Keep this comment at the end of the file
-Local variables:
-mode:sgml
-sgml-omittag:nil
-sgml-shorttag:t
-sgml-minimize-attributes:nil
-sgml-always-quote-attributes:t
-sgml-indent-step:1
-sgml-indent-data:t
-sgml-parent-document:nil
-sgml-default-dtd-file:"./reference.ced"
-sgml-exposed-tags:nil
-sgml-local-catalogs:("/usr/lib/sgml/catalog")
-sgml-local-ecat-files:nil
-End:
--->
diff --git a/doc/src/sgml/pltcl.sgml b/doc/src/sgml/pltcl.sgml
index 76b4e962085..c8b55ac4e75 100644
--- a/doc/src/sgml/pltcl.sgml
+++ b/doc/src/sgml/pltcl.sgml
@@ -1,5 +1,5 @@
 <!--
-$Header: /cvsroot/pgsql/doc/src/sgml/pltcl.sgml,v 2.25 2003/08/31 17:32:19 petere Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/pltcl.sgml,v 2.26 2003/09/08 23:02:28 petere Exp $
 -->
 
  <chapter id="pltcl">
@@ -235,7 +235,7 @@ CREATE FUNCTION overpaid(employee) RETURNS boolean AS '
     <variablelist>
 
      <varlistentry>
-      <term><function>spi_exec</function> <literal>?-count <replaceable>n</replaceable>? ?-array <replaceable>name</replaceable>? <replaceable>command</replaceable> ?<replaceable>loop-body</replaceable>?</literal></term>
+      <term><literal><function>spi_exec</function> <optional role="tcl">-count <replaceable>n</replaceable></optional> <optional role="tcl">-array <replaceable>name</replaceable></optional> <replaceable>command</replaceable> <optional role="tcl"><replaceable>loop-body</replaceable></optional></literal></term>
       <listitem>
        <para>
 	Executes an SQL command given as a string.  An error in the command
@@ -329,7 +329,7 @@ spi_exec -array C "SELECT * FROM pg_class" {
      </varlistentry>
 
      <varlistentry>
-      <term><function>spi_execp</> <literal>?-count <replaceable>n</replaceable>? ?-array <replaceable>name</replaceable>? ?-nulls <replaceable>string</replaceable>? <replaceable>queryid</replaceable> ?<replaceable>value-list</replaceable>? ?<replaceable>loop-body</replaceable>?</literal></term>
+      <term><literal><function>spi_execp</> <optional role="tcl">-count <replaceable>n</replaceable></optional> <optional role="tcl">-array <replaceable>name</replaceable></optional> <optional role="tcl">-nulls <replaceable>string</replaceable></optional> <replaceable>queryid</replaceable> <optional role="tcl"><replaceable>value-list</replaceable></optional> <optional role="tcl"><replaceable>loop-body</replaceable></optional></literal></term>
       <listitem>
        <para>
 	Executes a query previously prepared with <function>spi_prepare</>.
diff --git a/doc/src/sgml/postgres.sgml b/doc/src/sgml/postgres.sgml
index 4c1188c5009..9f9fa36ecde 100644
--- a/doc/src/sgml/postgres.sgml
+++ b/doc/src/sgml/postgres.sgml
@@ -1,5 +1,5 @@
 <!--
-$Header: /cvsroot/pgsql/doc/src/sgml/postgres.sgml,v 1.54 2003/09/01 23:01:49 petere Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/postgres.sgml,v 1.55 2003/09/08 23:02:28 petere Exp $
 -->
 
 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [
@@ -21,15 +21,7 @@ $Header: /cvsroot/pgsql/doc/src/sgml/postgres.sgml,v 1.54 2003/09/01 23:01:49 pe
   &legal;
  </bookinfo>
 
- <preface id="preface">
-  <title>Preface</title>
-
-  &intro;
-  &history;
-  &notation;
-  &problems;
-
- </preface>
+ &intro;
 
  <part id="tutorial">
   <title>Tutorial</title>
diff --git a/doc/src/sgml/stylesheet.dsl b/doc/src/sgml/stylesheet.dsl
index 52e43edc781..b364075dcb7 100644
--- a/doc/src/sgml/stylesheet.dsl
+++ b/doc/src/sgml/stylesheet.dsl
@@ -1,4 +1,4 @@
-<!-- $Header: /cvsroot/pgsql/doc/src/sgml/stylesheet.dsl,v 1.23 2003/03/25 16:15:38 petere Exp $ -->
+<!-- $Header: /cvsroot/pgsql/doc/src/sgml/stylesheet.dsl,v 1.24 2003/09/08 23:02:28 petere Exp $ -->
 <!DOCTYPE style-sheet PUBLIC "-//James Clark//DTD DSSSL Style Sheet//EN" [
 
 <!-- must turn on one of these with -i on the jade command line -->
@@ -62,6 +62,38 @@
 (element type ($mono-seq$))
 (element (programlisting emphasis) ($bold-seq$)) ;; to highlight sections of code
 
+;; Special support for Tcl synopses
+(element optional
+  (if (equal? (attribute-string (normalize "role")) "tcl")
+      (make sequence
+        (literal "?")
+        ($charseq$)
+        (literal "?"))
+      (make sequence
+        (literal %arg-choice-opt-open-str%)
+        ($charseq$)
+        (literal %arg-choice-opt-close-str%))))
+
+;; Avoid excessive cross-reference labels
+(define (auto-xref-indirect? target ancestor)
+  (cond
+;   ;; Always add indirect references to another book
+;   ((member (gi ancestor) (book-element-list))
+;    #t)
+   ;; Add indirect references to the section or component a block
+   ;; is in iff chapters aren't autolabelled.  (Otherwise "Figure 1-3"
+   ;; is sufficient)
+   ((and (member (gi target) (block-element-list))
+         (not %chapter-autolabel%))
+    #t)
+   ;; Add indirect references to the component a section is in if
+   ;; the sections are not autolabelled
+   ((and (member (gi target) (section-element-list))
+         (member (gi ancestor) (component-element-list))
+         (not %section-autolabel%))
+    #t)
+   (else #f)))
+
 
 ;; Bibliography things
 
@@ -110,11 +142,6 @@
   (element issn
     (make sequence
       (literal "ISSN ")
-      (process-children)))
-
-  (element pagenums
-    (make sequence
-      (literal "p. ")
       (process-children))))
 
 
@@ -137,6 +164,7 @@
 <![ %output-html; [
 
 (define %section-autolabel%     #t)
+(define %label-preface-sections% #f)
 (define %generate-legalnotice-link% #t)
 (define %html-ext%              ".html")
 (define %root-filename%         "index")
@@ -144,6 +172,8 @@
 (define %use-id-as-filename%    #t)
 (define %stylesheet%            "stylesheet.css")
 (define %graphic-default-extension% "gif")
+(define %gentext-nav-use-ff%    #t)
+(define %body-attr%             '())
 
 ;; Returns the depth of auto TOC that should be made at the nd-level
 (define (toc-depth nd)
-- 
GitLab