Thread: -HEAD pg_dumpall broken against older backends

-HEAD pg_dumpall broken against older backends

From
Stefan Kaltenbrunner
Date:
Hi!

looks like somebody forgot to test some changes to the pg_dumpall code
in Revision 1.70 against <8.1 installations -  resulting in the
following syntax error:

--
-- PostgreSQL database cluster dump
--

\connect postgres

pg_dumpall: query failed: ERROR:  syntax error at or near "null"
LINE 1: ... passwd as rolpassword, valuntil as rolvaliduntil null as ro...
                                                              ^
pg_dumpall: query was: SELECT usename as rolname, usesuper as rolsuper,
true as rolinherit, usesuper as rolcreaterole, usecreatedb as
rolcreatedb, usecatupd as rolcatupdate, true as rolcanlogin, -1 as
rolconnlimit, passwd as rolpassword, valuntil as rolvaliduntil null as
rolcomment FROM pg_shadow UNION ALL SELECT groname as rolname, false as
rolsuper, true as rolinherit, false as rolcreaterole, false as
rolcreatedb, false as rolcatupdate, false as rolcanlogin, -1 as
rolconnlimit, null::text as rolpassword, null::abstime as rolvaliduntil
null FROM pg_group


proposed patch to fix problem is attached.


Stefan
Index: src/bin/pg_dump/pg_dumpall.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/bin/pg_dump/pg_dumpall.c,v
retrieving revision 1.72
diff -u -r1.72 pg_dumpall.c
--- src/bin/pg_dump/pg_dumpall.c    5 Mar 2006 15:58:51 -0000    1.72
+++ src/bin/pg_dump/pg_dumpall.c    29 Mar 2006 13:29:01 -0000
@@ -444,7 +444,7 @@
                           "true as rolcanlogin, "
                           "-1 as rolconnlimit, "
                           "passwd as rolpassword, "
-                          "valuntil as rolvaliduntil "
+                          "valuntil as rolvaliduntil, "
                           "null as rolcomment "
                           "FROM pg_shadow "
                           "UNION ALL "
@@ -457,8 +457,8 @@
                           "false as rolcanlogin, "
                           "-1 as rolconnlimit, "
                           "null::text as rolpassword, "
-                          "null::abstime as rolvaliduntil "
-                          "null "
+                          "null::abstime as rolvaliduntil, "
+                          "null as rolcomment "
                           "FROM pg_group");

     res = executeQuery(conn, buf->data);

Re: -HEAD pg_dumpall broken against older backends

From
Peter Eisentraut
Date:
Stefan Kaltenbrunner wrote:
> looks like somebody forgot to test some changes to the pg_dumpall
> code in Revision 1.70 against <8.1 installations -  resulting in the
> following syntax error:

Dump output is never expected to be backward compatible.

--
Peter Eisentraut
http://developer.postgresql.org/~petere/

Re: -HEAD pg_dumpall broken against older backends

From
Tom Lane
Date:
Peter Eisentraut <peter_e@gmx.net> writes:
> Stefan Kaltenbrunner wrote:
>> looks like somebody forgot to test some changes to the pg_dumpall
>> code in Revision 1.70 against <8.1 installations -  resulting in the
>> following syntax error:

> Dump output is never expected to be backward compatible.

But pg_dumpall should be able to extract a dump from an older server.

            regards, tom lane

Re: -HEAD pg_dumpall broken against older backends

From
Andrew Dunstan
Date:
Peter Eisentraut wrote:
> Stefan Kaltenbrunner wrote:
>
>> looks like somebody forgot to test some changes to the pg_dumpall
>> code in Revision 1.70 against <8.1 installations -  resulting in the
>> following syntax error:
>>
>
> Dump output is never expected to be backward compatible.
>
>

We don't expect pg_dumpall to be issuing invalid SQL at any time,
though. That's what Stefan has uncovered. The code in question is only
called when it's run against an older server.

cheers

andrew

Re: -HEAD pg_dumpall broken against older backends

From
Stefan Kaltenbrunner
Date:
Peter Eisentraut wrote:
> Stefan Kaltenbrunner wrote:
>
>>looks like somebody forgot to test some changes to the pg_dumpall
>>code in Revision 1.70 against <8.1 installations -  resulting in the
>>following syntax error:
>
>
> Dump output is never expected to be backward compatible.

yeah - but if you take a look at the code/patch you will see that the
problem in this case is that pg_dumpall generates invalid SQL if it is
operating against an older backend which is an obvious typo/thinko in
this case.
It has nothing to do with generating backwards compatible dumps - and
using the pg_dumpall from the (newer) target version for upgrades has
been recommended for a while (or rather is documented to work in the
manual) I think.


Stefan

Re: -HEAD pg_dumpall broken against older backends

From
Andrew Dunstan
Date:

Stefan Kaltenbrunner wrote:

> Hi!
>
> looks like somebody forgot to test some changes to the pg_dumpall code
> in Revision 1.70 against <8.1 installations -  resulting in the
> following syntax error:
>
>

patch applied, thanks

andrew