OSDN Git Service

Remove GEQO and Rtree FAQ items.
authorBruce Momjian <bruce@momjian.us>
Sun, 30 Jan 2005 04:16:11 +0000 (04:16 +0000)
committerBruce Momjian <bruce@momjian.us>
Sun, 30 Jan 2005 04:16:11 +0000 (04:16 +0000)
doc/FAQ
doc/src/FAQ/FAQ.html

diff --git a/doc/FAQ b/doc/FAQ
index b1e9545..a4a3200 100644 (file)
--- a/doc/FAQ
+++ b/doc/FAQ
@@ -1,7 +1,7 @@
 
                 Frequently Asked Questions (FAQ) for PostgreSQL
                                        
-   Last updated: Sat Jan 29 23:06:02 EST 2005
+   Last updated: Sat Jan 29 23:15:42 EST 2005
    
    Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us)
    
    typical text file?
    4.6) Why are my queries slow? Why don't they use my indexes?
    4.7) How do I see how the query optimizer is evaluating my query?
-   4.8) What is an R-tree index?
-   4.9) What is the Genetic Query Optimizer?
-   4.10) How do I perform regular expression searches and
-   case-insensitive regular expression searches? How do I use an index
-   for case-insensitive searches?
-   4.11) In a query, how do I detect if a field is NULL?
-   4.12) What is the difference between the various character types?
-   4.13.0) How do I create a serial/auto-incrementing field?
-   4.13.1) How do I get the value of a SERIAL insert?
-   4.13.2) Doesn't currval() lead to a race condition with other users?
-   4.13.3) Why aren't my sequence numbers reused on transaction abort?
+   4.8) How do I perform regular expression searches and case-insensitive
+   regular expression searches? How do I use an index for
+   case-insensitive searches?
+   4.9) In a query, how do I detect if a field is NULL?
+   4.10) What is the difference between the various character types?
+   4.11.0) How do I create a serial/auto-incrementing field?
+   4.11.1) How do I get the value of a SERIAL insert?
+   4.11.2) Doesn't currval() lead to a race condition with other users?
+   4.11.3) Why aren't my sequence numbers reused on transaction abort?
    Why are there gaps in the numbering of my sequence/SERIAL column?
-   4.14) What is an OID? What is a TID?
-   4.15) What is the meaning of some of the terms used in PostgreSQL?
-   4.16) Why do I get the error "ERROR: Memory exhausted in
+   4.12) What is an OID? What is a TID?
+   4.13) What is the meaning of some of the terms used in PostgreSQL?
+   4.14) Why do I get the error "ERROR: Memory exhausted in
    AllocSetAlloc()"?
-   4.17) How do I tell what PostgreSQL version I am running?
-   4.18) Why does my large-object operations get "invalid large obj
+   4.15) How do I tell what PostgreSQL version I am running?
+   4.16) Why does my large-object operations get "invalid large obj
    descriptor"?
-   4.19) How do I create a column that will default to the current time?
-   4.20) Why are my subqueries using IN so slow?
-   4.21) How do I perform an outer join?
-   4.22) How do I perform queries using multiple databases?
-   4.23) How do I return multiple rows or columns from a function?
-   4.24) Why can't I reliably create/drop temporary tables in PL/PgSQL
+   4.17) How do I create a column that will default to the current time?
+   4.18) Why are my subqueries using IN so slow?
+   4.19) How do I perform an outer join?
+   4.20) How do I perform queries using multiple databases?
+   4.21) How do I return multiple rows or columns from a function?
+   4.22) Why can't I reliably create/drop temporary tables in PL/PgSQL
    functions?
-   4.25) What encryption options are available?
+   4.23) What encryption options are available?
    
                             Extending PostgreSQL
                                       
@@ -742,36 +740,7 @@ LIKE
     
    See the EXPLAIN manual page.
    
-    4.8) What is an R-tree index?
-    
-   An R-tree index is used for indexing spatial data. A hash index can't
-   handle range searches. A B-tree index only handles range searches in a
-   single dimension. R-trees can handle multi-dimensional data. For
-   example, if an R-tree index can be built on an attribute of type
-   point, the system can more efficiently answer queries such as "select
-   all points within a bounding rectangle."
-   
-   The canonical paper that describes the original R-tree design is:
-   
-   Guttman, A. "R-trees: A Dynamic Index Structure for Spatial
-   Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt of
-   Data, 45-57.
-   
-   You can also find this paper in Stonebraker's "Readings in Database
-   Systems".
-   
-   Built-in R-trees can handle polygons and boxes. In theory, R-trees can
-   be extended to handle higher number of dimensions. In practice,
-   extending R-trees requires a bit of work and we don't currently have
-   any documentation on how to do it.
-   
-    4.9) What is the Genetic Query Optimizer?
-    
-   The GEQO module speeds query optimization when joining many tables by
-   means of a Genetic Algorithm (GA). It allows the handling of large
-   join queries through nonexhaustive search.
-   
-    4.10) How do I perform regular expression searches and case-insensitive
+    4.8) How do I perform regular expression searches and case-insensitive
     regular expression searches? How do I use an index for case-insensitive
     searches?
     
@@ -788,11 +757,11 @@ LIKE
    functional index, it will be used:
     CREATE INDEX tabindex ON tab (lower(col));
 
-    4.11) In a query, how do I detect if a field is NULL?
+    4.9) In a query, how do I detect if a field is NULL?
     
    You test the column with IS NULL and IS NOT NULL.
    
-    4.12) What is the difference between the various character types?
+    4.10) What is the difference between the various character types?
     
 Type            Internal Name   Notes
 --------------------------------------------------
@@ -820,7 +789,7 @@ BYTEA           bytea           variable-length byte array (null-byte safe)
    particularly values that include NULL bytes. All the types described
    here have similar performance characteristics.
    
-    4.13.1) How do I create a serial/auto-incrementing field?
+    4.11.1) How do I create a serial/auto-incrementing field?
     
    PostgreSQL supports a SERIAL data type. It auto-creates a sequence.
    For example, this:
@@ -841,11 +810,11 @@ BYTEA           bytea           variable-length byte array (null-byte safe)
    However, if you need to dump and reload the database, you need to use
    pg_dump's -o option or COPY WITH OIDS option to preserve the OIDs.
    
-    4.13.2) How do I get the value of a SERIAL insert?
+    4.11.2) How do I get the value of a SERIAL insert?
     
    One approach is to retrieve the next SERIAL value from the sequence
    object with the nextval() function before inserting and then insert it
-   explicitly. Using the example table in 4.13.1, an example in a
+   explicitly. Using the example table in 4.11.1, an example in a
    pseudo-language would look like this:
     new_id = execute("SELECT nextval('person_id_seq')");
     execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
@@ -867,19 +836,19 @@ BYTEA           bytea           variable-length byte array (null-byte safe)
    billion. In Perl, using DBI with the DBD::Pg module, the oid value is
    made available via $sth->{pg_oid_status} after $sth->execute().
    
-    4.13.3) Doesn't currval() lead to a race condition with other users?
+    4.11.3) Doesn't currval() lead to a race condition with other users?
     
    No. currval() returns the current value assigned by your backend, not
    by all users.
    
-    4.13.4) Why aren't my sequence numbers reused on transaction abort? Why are
+    4.11.4) Why aren't my sequence numbers reused on transaction abort? Why are
     there gaps in the numbering of my sequence/SERIAL column?
     
    To improve concurrency, sequence values are given out to running
    transactions as needed and are not locked until the transaction
    completes. This causes gaps in numbering from aborted transactions.
    
-    4.14) What is an OID? What is a TID?
+    4.12) What is an OID? What is a TID?
     
    Every row that is created in PostgreSQL gets a unique OID unless
    created WITHOUT OIDS. OIDs are autotomatically assigned unique 4-byte
@@ -896,7 +865,7 @@ BYTEA           bytea           variable-length byte array (null-byte safe)
    values. TIDs change after rows are modified or reloaded. They are used
    by index entries to point to physical rows.
    
-    4.15) What is the meaning of some of the terms used in PostgreSQL?
+    4.13) What is the meaning of some of the terms used in PostgreSQL?
     
    Some of the source code and older documentation use terms that have
    more common usage. Here are some:
@@ -914,7 +883,7 @@ BYTEA           bytea           variable-length byte array (null-byte safe)
    http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary
    /glossary.html
    
-    4.16) Why do I get the error "ERROR: Memory exhausted in AllocSetAlloc()"?
+    4.14) Why do I get the error "ERROR: Memory exhausted in AllocSetAlloc()"?
     
    You probably have run out of virtual memory on your system, or your
    kernel has a low limit for certain resources. Try this before starting
@@ -929,11 +898,11 @@ BYTEA           bytea           variable-length byte array (null-byte safe)
    problem with the SQL client because the backend is returning too much
    data, try it before starting the client.
    
-    4.17) How do I tell what PostgreSQL version I am running?
+    4.15) How do I tell what PostgreSQL version I am running?
     
    From psql, type SELECT version();
    
-    4.18) Why does my large-object operations get "invalid large obj
+    4.16) Why does my large-object operations get "invalid large obj
     descriptor"?
     
    You need to put BEGIN WORK and COMMIT around any use of a large object
@@ -948,12 +917,12 @@ BYTEA           bytea           variable-length byte array (null-byte safe)
    If you are using a client interface like ODBC you may need to set
    auto-commit off.
    
-    4.19) How do I create a column that will default to the current time?
+    4.17) How do I create a column that will default to the current time?
     
    Use CURRENT_TIMESTAMP:
 CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
 
-    4.20) Why are my subqueries using IN so slow?
+    4.18) Why are my subqueries using IN so slow?
     
    In versions prior to 7.4, subqueries were joined to outer queries by
    sequentially scanning the result of the subquery for each row of the
@@ -974,7 +943,7 @@ CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
    In version 7.4 and later, IN actually uses the same sophisticated join
    techniques as normal queries, and is prefered to using EXISTS.
    
-    4.21) How do I perform an outer join?
+    4.19) How do I perform an outer join?
     
    PostgreSQL supports outer joins using the SQL standard syntax. Here
    are two examples:
@@ -1004,7 +973,7 @@ CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
     WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
     ORDER BY col1
 
-    4.22) How do I perform queries using multiple databases?
+    4.20) How do I perform queries using multiple databases?
     
    There is no way to query a database other than the current one.
    Because PostgreSQL loads database-specific system catalogs, it is
@@ -1014,12 +983,12 @@ CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
    course, a client can make simultaneous connections to different
    databases and merge the results on the client side.
    
-    4.23) How do I return multiple rows or columns from a function?
+    4.21) How do I return multiple rows or columns from a function?
     
    In 7.3, you can easily return multiple rows or columns from a
    function, http://techdocs.postgresql.org/guides/SetReturningFunctions.
    
-    4.24) Why can't I reliably create/drop temporary tables in PL/PgSQL
+    4.22) Why can't I reliably create/drop temporary tables in PL/PgSQL
     functions?
     
    PL/PgSQL caches function contents, and an unfortunate side effect is
@@ -1030,7 +999,7 @@ CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
    table access in PL/PgSQL. This will cause the query to be reparsed
    every time.
    
-    4.25) What encryption options are available?
+    4.23) What encryption options are available?
     
      * contrib/pgcrypto contains many encryption functions for use in SQL
        queries.
index b64ddcb..0b8401e 100644 (file)
@@ -10,7 +10,7 @@
   alink="#0000ff">
     <H1>Frequently Asked Questions (FAQ) for PostgreSQL</H1>
 
-    <P>Last updated: Sat Jan 29 23:06:02 EST 2005</P>
+    <P>Last updated: Sat Jan 29 23:15:42 EST 2005</P>
 
     <P>Current maintainer: Bruce Momjian (<A href=
     "mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR>
     use my indexes?<BR>
      <A href="#4.7">4.7</A>) How do I see how the query optimizer is
     evaluating my query?<BR>
-     <A href="#4.8">4.8</A>) What is an R-tree index?<BR>
-     <A href="#4.9">4.9</A>) What is the Genetic Query Optimizer?<BR>
-     <A href="#4.10">4.10</A>) How do I perform regular expression
+     <A href="#4.8">4.8</A>) How do I perform regular expression
     searches and case-insensitive regular expression searches? How do I
     use an index for case-insensitive searches?<BR>
-     <A href="#4.11">4.11</A>) In a query, how do I detect if a field
+     <A href="#4.9">4.9</A>) In a query, how do I detect if a field
     is <SMALL>NULL</SMALL>?<BR>
-     <A href="#4.12">4.12</A>) What is the difference between the
+     <A href="#4.10">4.10</A>) What is the difference between the
     various character types?<BR>
-     <A href="#4.13.0">4.13.0</A>) How do I create a
+     <A href="#4.11.0">4.11.0</A>) How do I create a
     serial/auto-incrementing field?<BR>
-     <A href="#4.13.1">4.13.1</A>) How do I get the value of a
+     <A href="#4.11.1">4.11.1</A>) How do I get the value of a
     <SMALL>SERIAL</SMALL> insert?<BR>
-     <A href="#4.13.2">4.13.2</A>) Doesn't <I>currval()</I>
+     <A href="#4.11.2">4.11.2</A>) Doesn't <I>currval()</I>
     lead to a race condition with other users?<BR>
-     <A href="#4.13.3">4.13.3</A>) Why aren't my sequence numbers
+     <A href="#4.11.3">4.11.3</A>) Why aren't my sequence numbers
     reused on transaction abort? Why are there gaps in the numbering of
     my sequence/SERIAL column?<BR>
-     <A href="#4.14">4.14</A>) What is an <SMALL>OID</SMALL>? What is a
+     <A href="#4.12">4.12</A>) What is an <SMALL>OID</SMALL>? What is a
     <SMALL>TID</SMALL>?<BR>
-     <A href="#4.15">4.15</A>) What is the meaning of some of the terms
+     <A href="#4.13">4.13</A>) What is the meaning of some of the terms
     used in PostgreSQL?<BR>
-     <A href="#4.16">4.16</A>) Why do I get the error <I>"ERROR: Memory
+     <A href="#4.14">4.14</A>) Why do I get the error <I>"ERROR: Memory
     exhausted in AllocSetAlloc()"</I>?<BR>
-     <A href="#4.17">4.17</A>) How do I tell what PostgreSQL version I
+     <A href="#4.15">4.15</A>) How do I tell what PostgreSQL version I
     am running?<BR>
-     <A href="#4.18">4.18</A>) Why does my large-object operations get
+     <A href="#4.16">4.16</A>) Why does my large-object operations get
     <I>"invalid large obj descriptor"</I>?<BR>
-     <A href="#4.19">4.19</A>) How do I create a column that will
+     <A href="#4.17">4.17</A>) How do I create a column that will
     default to the current time?<BR>
-     <A href="#4.20">4.20</A>) Why are my subqueries using
+     <A href="#4.18">4.18</A>) Why are my subqueries using
     <CODE><SMALL>IN</SMALL></CODE> so slow?<BR>
-     <A href="#4.21">4.21</A>) How do I perform an outer join?<BR>
-     <A href="#4.22">4.22</A>) How do I perform queries using multiple
+     <A href="#4.19">4.19</A>) How do I perform an outer join?<BR>
+     <A href="#4.20">4.20</A>) How do I perform queries using multiple
     databases?<BR>
-     <A href="#4.23">4.23</A>) How do I return multiple rows or columns
+     <A href="#4.21">4.21</A>) How do I return multiple rows or columns
     from a function?<BR>
-     <A href="#4.24">4.24</A>) Why can't I reliably create/drop
+     <A href="#4.22">4.22</A>) Why can't I reliably create/drop
     temporary tables in PL/PgSQL functions?<BR>
-     <A href="#4.25">4.25</A>) What encryption options are available?<BR>
+     <A href="#4.23">4.23</A>) What encryption options are available?<BR>
      
 
     <H2 align="center">Extending PostgreSQL</H2>
 
     <P>See the <SMALL>EXPLAIN</SMALL> manual page.</P>
 
-    <H4><A name="4.8">4.8</A>) What is an R-tree index?</H4>
-
-    <P>An R-tree index is used for indexing spatial data. A hash index
-    can't handle range searches. A B-tree index only handles range
-    searches in a single dimension. R-trees can handle
-    multi-dimensional data. For example, if an R-tree index can be
-    built on an attribute of type <I>point</I>, the system can more
-    efficiently answer queries such as "select all points within a
-    bounding rectangle."</P>
-
-    <P>The canonical paper that describes the original R-tree design
-    is:</P>
-
-    <P>Guttman, A. "R-trees: A Dynamic Index Structure for Spatial
-    Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt
-    of Data, 45-57.</P>
-
-    <P>You can also find this paper in Stonebraker's "Readings in
-    Database Systems".</P>
-
-    <P>Built-in R-trees can handle polygons and boxes. In theory,
-    R-trees can be extended to handle higher number of dimensions. In
-    practice, extending R-trees requires a bit of work and we don't
-    currently have any documentation on how to do it.</P>
-
-    <H4><A name="4.9">4.9</A>) What is the Genetic Query
-    Optimizer?</H4>
-
-    <P>The <SMALL>GEQO</SMALL> module speeds query optimization when
-    joining many tables by means of a Genetic Algorithm (GA). It allows
-    the handling of large join queries through nonexhaustive
-    search.</P>
-
-    <H4><A name="4.10">4.10</A>) How do I perform regular expression
+    <H4><A name="4.8">4.8</A>) How do I perform regular expression
     searches and case-insensitive regular expression searches? How do I
     use an index for case-insensitive searches?</H4>
 
     CREATE INDEX tabindex ON tab (lower(col));
 </PRE>
 
-    <H4><A name="4.11">4.11</A>) In a query, how do I detect if a field
+    <H4><A name="4.9">4.9</A>) In a query, how do I detect if a field
     is <SMALL>NULL</SMALL>?</H4>
 
     <P>You test the column with <SMALL>IS NULL</SMALL> and <SMALL>IS
     NOT NULL</SMALL>.</P>
 
-    <H4><A name="4.12">4.12</A>) What is the difference between the
+    <H4><A name="4.10">4.10</A>) What is the difference between the
     various character types?</H4>
 <PRE>
 Type            Internal Name   Notes
@@ -1009,7 +974,7 @@ BYTEA           bytea           variable-length byte array (null-byte safe)
     particularly values that include <SMALL>NULL</SMALL> bytes. All the
     types described here have similar performance characteristics.</P>
 
-    <H4><A name="4.13.1">4.13.1</A>) How do I create a
+    <H4><A name="4.11.1">4.11.1</A>) How do I create a
     serial/auto-incrementing field?</H4>
 
     <P>PostgreSQL supports a <SMALL>SERIAL</SMALL> data type. It
@@ -1037,13 +1002,13 @@ BYTEA           bytea           variable-length byte array (null-byte safe)
     you need to use <I>pg_dump</I>'s <I>-o</I> option or <SMALL>COPY
     WITH OIDS</SMALL> option to preserve the <SMALL>OID</SMALL>s. 
 
-    <H4><A name="4.13.2">4.13.2</A>) How do I get the value of a
+    <H4><A name="4.11.2">4.11.2</A>) How do I get the value of a
     <SMALL>SERIAL</SMALL> insert?</H4>
 
     <P>One approach is to retrieve the next <SMALL>SERIAL</SMALL> value
     from the sequence object with the <I>nextval()</I> function
     <I>before</I> inserting and then insert it explicitly. Using the
-    example table in <A href="#4.13.1">4.13.1</A>, an example in a
+    example table in <A href="#4.11.1">4.11.1</A>, an example in a
     pseudo-language would look like this:</P>
 <PRE>
     new_id = execute("SELECT nextval('person_id_seq')");
@@ -1066,7 +1031,7 @@ BYTEA           bytea           variable-length byte array (null-byte safe)
     new_id = execute("SELECT currval('person_id_seq')");
 </PRE>
     
-    <P>Finally, you could use the <A href="#4.14"><SMALL>OID</SMALL></A>
+    <P>Finally, you could use the <A href="#4.12"><SMALL>OID</SMALL></A>
     returned from the <SMALL>INSERT</SMALL> statement to look up the
     default value, though this is probably the least portable approach,
     and the oid value will wrap around when it reaches 4 billion.
@@ -1074,13 +1039,13 @@ BYTEA           bytea           variable-length byte array (null-byte safe)
     available via <I>$sth-&gt;{pg_oid_status}</I> after
     <I>$sth-&gt;execute()</I>.</P>
 
-    <H4><A name="4.13.3">4.13.3</A>) Doesn't <I>currval()</I>
+    <H4><A name="4.11.3">4.11.3</A>) Doesn't <I>currval()</I>
     lead to a race condition with other users?</H4>
 
     <P>No. <I>currval()</I> returns the current value assigned by your
     backend, not by all users.</P>
 
-    <H4><A name="4.13.4">4.13.4</A>) Why aren't my sequence numbers
+    <H4><A name="4.11.4">4.11.4</A>) Why aren't my sequence numbers
     reused on transaction abort? Why are there gaps in the numbering of
     my sequence/SERIAL column?</H4>
 
@@ -1089,7 +1054,7 @@ BYTEA           bytea           variable-length byte array (null-byte safe)
     completes. This causes gaps in numbering from aborted
     transactions.</P>
 
-    <H4><A name="4.14">4.14</A>) What is an <SMALL>OID</SMALL>? What is
+    <H4><A name="4.12">4.12</A>) What is an <SMALL>OID</SMALL>? What is
     a <SMALL>TID</SMALL>?</H4>
 
     <P>Every row that is created in PostgreSQL gets a unique
@@ -1112,7 +1077,7 @@ BYTEA           bytea           variable-length byte array (null-byte safe)
     are modified or reloaded. They are used by index entries to point
     to physical rows.</P>
 
-    <H4><A name="4.15">4.15</A>) What is the meaning of some of the
+    <H4><A name="4.13">4.13</A>) What is the meaning of some of the
     terms used in PostgreSQL?</H4>
 
     <P>Some of the source code and older documentation use terms that
@@ -1141,7 +1106,7 @@ BYTEA           bytea           variable-length byte array (null-byte safe)
     <P>A list of general database terms can be found at: <A href=
     "http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html">http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html</A></P>
 
-    <H4><A name="4.16">4.16</A>) Why do I get the error <I>"ERROR:
+    <H4><A name="4.14">4.14</A>) Why do I get the error <I>"ERROR:
     Memory exhausted in AllocSetAlloc()"</I>?</H4>
 
     <P>You probably have run out of virtual memory on your system,
@@ -1160,12 +1125,12 @@ BYTEA           bytea           variable-length byte array (null-byte safe)
     backend is returning too much data, try it before starting the
     client.
 
-    <H4><A name="4.17">4.17</A>) How do I tell what PostgreSQL version
+    <H4><A name="4.15">4.15</A>) How do I tell what PostgreSQL version
     I am running?</H4>
 
     <P>From <I>psql</I>, type <CODE>SELECT version();</CODE></P>
 
-    <H4><A name="4.18">4.18</A>) Why does my large-object operations
+    <H4><A name="4.16">4.16</A>) Why does my large-object operations
     get <I>"invalid large obj descriptor"</I>?</H4>
 
     <P>You need to put <CODE>BEGIN WORK</CODE> and <CODE>COMMIT</CODE>
@@ -1181,7 +1146,7 @@ BYTEA           bytea           variable-length byte array (null-byte safe)
     <P>If you are using a client interface like <SMALL>ODBC</SMALL> you
     may need to set <CODE>auto-commit off.</CODE></P>
 
-    <H4><A name="4.19">4.19</A>) How do I create a column that will
+    <H4><A name="4.17">4.17</A>) How do I create a column that will
     default to the current time?</H4>
 
     <P>Use <I>CURRENT_TIMESTAMP</I>:</P>
@@ -1190,7 +1155,7 @@ BYTEA           bytea           variable-length byte array (null-byte safe)
 </CODE>
 </PRE>
 
-    <H4><A name="4.20">4.20</A>) Why are my subqueries using
+    <H4><A name="4.18">4.18</A>) Why are my subqueries using
     <CODE><SMALL>IN</SMALL></CODE> so slow?</H4>
 
     <P>In versions prior to 7.4, subqueries were joined to outer queries
@@ -1214,7 +1179,7 @@ BYTEA           bytea           variable-length byte array (null-byte safe)
     sophisticated join techniques as normal queries, and is prefered
     to using <CODE>EXISTS</CODE>.
 
-    <H4><A name="4.21">4.21</A>) How do I perform an outer join?</H4>
+    <H4><A name="4.19">4.19</A>) How do I perform an outer join?</H4>
 
     <P>PostgreSQL supports outer joins using the SQL standard syntax.
     Here are two examples:</P>
@@ -1254,7 +1219,7 @@ BYTEA           bytea           variable-length byte array (null-byte safe)
     ORDER BY col1
 </PRE>
 
-    <H4><A name="4.22">4.22</A>) How do I perform queries using
+    <H4><A name="4.20">4.20</A>) How do I perform queries using
     multiple databases?</H4>
 
     <P>There is no way to query a database other than the current one.
@@ -1266,7 +1231,7 @@ BYTEA           bytea           variable-length byte array (null-byte safe)
     connections to different databases and merge the results on the
     client side.</P>
 
-    <H4><A name="4.23">4.23</A>) How do I return multiple rows or
+    <H4><A name="4.21">4.21</A>) How do I return multiple rows or
     columns from a function?</H4>
 
     <P>In 7.3, you can easily return multiple rows or columns from a
@@ -1274,7 +1239,7 @@ BYTEA           bytea           variable-length byte array (null-byte safe)
     <a href="http://techdocs.postgresql.org/guides/SetReturningFunctions">
     http://techdocs.postgresql.org/guides/SetReturningFunctions</a>.
 
-    <H4><A name="4.24">4.24</A>) Why can't I reliably create/drop
+    <H4><A name="4.22">4.22</A>) Why can't I reliably create/drop
     temporary tables in PL/PgSQL functions?</H4>
     <P>PL/PgSQL caches function contents, and an unfortunate side effect
     is that if a PL/PgSQL function accesses a temporary table, and that
@@ -1284,7 +1249,7 @@ BYTEA           bytea           variable-length byte array (null-byte safe)
     <SMALL>EXECUTE</SMALL> for temporary table access in PL/PgSQL. This
     will cause the query to be reparsed every time.</P>
 
-    <H4><A name="4.25">4.25</A>) What encryption options are available?
+    <H4><A name="4.23">4.23</A>) What encryption options are available?
     </H4>
     <UL>
     <LI><I>contrib/pgcrypto</I> contains many encryption functions for