Martin Sarsale <lists@runa.sytes.net> writes:
> Im running psql (PostgreSQL) 7.3.2 here and since some weeks Im getting this error when trying to dump all databases
(toupgrade to pg 7.4.1)
> \connect XXX
> pg_dump: SQL command failed
> pg_dump: Error message from server: ERROR: nodeRead: did not find '}' at end of plan node
> pg_dump: The command was: select (select usename from pg_user where usesysid = datdba) as dba, encoding, datpath from
pg_databasewhere datname = 'emepe3'
> pg_dumpall: pg_dump failed on emepe3, exiting
It would appear that the view rule for the pg_user view is corrupt, or
at least not quite the same format that the backend code is expecting.
Can you do "select * from pg_user" in any of your databases, or does it
fail the same way in all? If it fails in each database then I'd suspect
some kind of version mismatch; if not then it's just corrupt in that
particular database.
We had a similar report last November which seemed to be related to a
glibc update --- see the thread starting here:
http://archives.postgresql.org/pgsql-general/2003-11/msg01102.php
The complainant lost interest after finding a workaround, so we
never did get a complete explanation of what happened, but I'm
suspicious there was some software incompatibility involved, not
data corruption per se. I would like to find out the truth of the
matter. If you are interested you could try manually creating an
equivalent of pg_user, viz
CREATE VIEW my_pg_user AS
SELECT
usename,
usesysid,
usecreatedb,
usesuper,
usecatupd,
'********'::text as passwd,
valuntil,
useconfig
FROM pg_shadow;
and then see if you can do "select * from my_pg_user", and if so,
what is the difference between the pg_rewrite entries for the two
views. (See the above-referenced thread for more info.)
regards, tom lane