]> granicus.if.org Git - postgresql/commitdiff
Fix procedure for updating nextval() defaults so that it actually works.
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 3 Oct 2005 16:04:13 +0000 (16:04 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 3 Oct 2005 16:04:13 +0000 (16:04 +0000)
Update release dates for pending back-branch releases.

doc/src/sgml/release.sgml

index 328ba1565c4309693af78986349ff8a344c70488..f0f6d015a6c7a70173a98e8b495ee5206ce60347 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-$PostgreSQL: pgsql/doc/src/sgml/release.sgml,v 1.386 2005/10/03 13:52:28 momjian Exp $
+$PostgreSQL: pgsql/doc/src/sgml/release.sgml,v 1.387 2005/10/03 16:04:13 tgl Exp $
 
 Typical markup:
 
@@ -393,61 +393,62 @@ pg_[A-Za-z0-9_]                 <application>
 
      <listitem>
       <para>
-       Add proper sequence function dependencies for <command>
-       DEFAULT</> clauses (Tom)
+       Add proper dependencies for arguments of sequence functions (Tom)
       </para>
       <para>
-       In previous releases, <function>nextval()</>,
-       <function>currval</>, and <function>setval()</> recorded sequence
-       names as simple text strings, meaning that renaming or dropping a
-       sequence used in a <command>DEFAULT</> clause made the clause
+       In previous releases, sequence names passed to <function>nextval()</>,
+       <function>currval()</>, and <function>setval()</> were stored as
+       simple text strings, meaning that renaming or dropping a
+       sequence used in a <literal>DEFAULT</> clause made the clause
        invalid. This release stores all newly-created sequence function
-       arguments as internal OIDs, allowing them to handle sequence
+       arguments as internal OIDs, allowing them to track sequence
        renaming, and adding dependency information that prevents
-       improper sequence removal. It also makes <command>DEFAULT</>
-       clauses immune to schema search path changes, and allows schema
-       renaming.
+       improper sequence removal. It also makes such <literal>DEFAULT</>
+       clauses immune to schema renaming and search path changes.
       </para>
       <para>
-       Some applications might rely on the old text-based behavior of
+       Some applications might rely on the old behavior of
        run-time lookup for sequence names. This can still be done by
-       casting the argument to <type>text</>, for example
+       explicitly casting the argument to <type>text</>, for example
        <literal>nextval('myseq'::text)</>.
       </para>
       <para>
-       Pre-8.1 schemas loaded into 8.1 will use the previous, text-based
+       Pre-8.1 database dumps loaded into 8.1 will use the old text-based
        representation and therefore will not have the features of
-       OID-stored arguments. However, it is possible to upgrade a
-       database loaded with pre-8.1 schemas. First, save this query into
-       a file, such as <filename>fixseq.sql</>:
+       OID-stored arguments. However, it is possible to update a
+       database containing text-based <literal>DEFAULT</> clauses.
+       First, save this query into a file, such as <filename>fixseq.sql</>:
 <programlisting>
 SELECT  'ALTER TABLE ' ||
     pg_catalog.quote_ident(n.nspname) || '.' ||
     pg_catalog.quote_ident(c.relname) ||
     ' ALTER COLUMN ' || pg_catalog.quote_ident(a.attname) ||
     ' SET DEFAULT ' ||
-    regexp_replace(d.adsrc, '(nextval\\(''[^'']*'')::text', '\\1', 'g') ||
+    regexp_replace(d.adsrc,
+                   $$val\(\(('[^']*')::text\)::regclass$$,
+                   $$val\(\1$$,
+                   'g') ||
     ';'
 FROM    pg_namespace n, pg_class c, pg_attribute a, pg_attrdef d
 WHERE   n.oid = c.relnamespace AND
     c.oid = a.attrelid AND
     a.attrelid = d.adrelid AND
     a.attnum = d.adnum AND
-    d.adsrc ~ '.*nextval\\(''[^'']*''::text';
+    d.adsrc ~ $$val\(\('[^']*'::text\)::regclass$$;
 </programlisting>
        Next, run the query against a database to find what
        adjustments are required, like this for database <literal>db1</>:
 <programlisting>
-psql -aT -f fixseq.sql db1
+psql -t -f fixseq.sql db1
 </programlisting>
        This will show the <command>ALTER TABLE</> commands needed to
        convert the database to the newer OID-based representation.
-       Finally, run this to update the database:
+       If the commands look reasonable, run this to update the database:
 <programlisting>
-psql -aT -f fixseq.sql db1 | psql -e db1
+psql -t -f fixseq.sql db1 | psql -e db1
 </programlisting>
-       This process should be done for each database loaded with pre-8.1
-       schemas.
+       This process must be repeated in each database to be updated.
+      </para>
      </listitem>
 
      <listitem>
@@ -2060,7 +2061,7 @@ psql -aT -f fixseq.sql db1 | psql -e db1
 
    <note>
    <title>Release date</title>
-   <simpara>2005-09-??</simpara>
+   <simpara>2005-10-04</simpara>
    </note>
 
    <para>
@@ -4836,7 +4837,7 @@ typedefs (Michael)</para></listitem>
 
    <note>
    <title>Release date</title>
-   <simpara>2005-09-??</simpara>
+   <simpara>2005-10-04</simpara>
    </note>
 
    <para>
@@ -7463,7 +7464,7 @@ DROP SCHEMA information_schema CASCADE;
 
    <note>
    <title>Release date</title>
-   <simpara>2005-09-??</simpara>
+   <simpara>2005-10-04</simpara>
    </note>
 
    <para>