Thread: BUG #8128: pg_dump (>= 9.1) failed while dumping a scheme named "old" from PostgreSQL 8.4
BUG #8128: pg_dump (>= 9.1) failed while dumping a scheme named "old" from PostgreSQL 8.4
From
Adrian.Vondendriesch@credativ.de
Date:
The following bug has been logged on the website: Bug reference: 8128 Logged by: Adrian Vondendriesch Email address: Adrian.Vondendriesch@credativ.de PostgreSQL version: 9.1.9 Operating system: Debian GNU/Linux 7.0 Description: = Hi, while browsing on bugs.debian.org I saw the following bug: 'pg_upgradecluster fails with "OLD used in query that is not in a rule"' (http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=3D688960). Because I don't found any reference to that report in pgsql-bugs I report it by my self. Since I have tested it on my own I can confirm it is reproducible: 1. In a 8.4 cluster create a scheme called "old": > CREATE SCHEME "old"; 2. Create a test table: > CREATE TABLE "old".test(id int); 3. insert some test data: > INSERT INTO "old".test VALUES (1),(2),(3); 4. dump it with pg_dumpall (9.1): /usr/lib/postgresql/9.1/bin/pg_dumpall -s > foo This will produce the following error: > pg_dump: SQL command failed > pg_dump: Error message from server: ERROR: OLD used in query that is not in a rule > LINE 1: LOCK TABLE old.test IN ACCESS SHARE MODE > ^ > pg_dump: The command was: LOCK TABLE old.test IN ACCESS SHARE MODE > pg_dumpall: pg_dump failed on database "postgres", exiting If pg_dumpall version 8.4 is used, the dump runs smoothly. This is because pg_dump(all) in version 8.x uses quotes. (2013-04-30 16:24:49 CEST LOG: statement: LOCK TABLE "old".test IN ACCESS SHARE MODE). I think it's a bad idea to name a scheme 'old', but it's possible, so it should be supported. I saw no clue to resolve that issue in the pg_dump documentation. I'm running Debian Wheezy using the apt.postgresql.org repository. Regards - Adrian
Re: BUG #8128: pg_dump (>= 9.1) failed while dumping a scheme named "old" from PostgreSQL 8.4
From
Adrian Vondendriesch
Date:
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 > Hi, > > while browsing on bugs.debian.org I saw the following bug: > 'pg_upgradecluster fails with "OLD used in query that is not in a > rule"' (http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=688960). > > Because I don't found any reference to that report in pgsql-bugs I > report it by my self. > > Since I have tested it on my own I can confirm it is reproducible: > > 1. In a 8.4 cluster create a scheme called "old": >> CREATE SCHEME "old"; > > 2. Create a test table: >> CREATE TABLE "old".test(id int); > > 3. insert some test data: >> INSERT INTO "old".test VALUES (1),(2),(3); > > 4. dump it with pg_dumpall (9.1): > /usr/lib/postgresql/9.1/bin/pg_dumpall -s > foo > > This will produce the following error: >> pg_dump: SQL command failed pg_dump: Error message from server: >> ERROR: OLD used in query that is not > in a rule >> LINE 1: LOCK TABLE old.test IN ACCESS SHARE MODE ^ pg_dump: The >> command was: LOCK TABLE old.test IN ACCESS SHARE MODE pg_dumpall: >> pg_dump failed on database "postgres", exiting > > If pg_dumpall version 8.4 is used, the dump runs smoothly. This is > because pg_dump(all) in version 8.x uses quotes. (2013-04-30 > 16:24:49 CEST LOG: statement: LOCK TABLE "old".test IN ACCESS SHARE > MODE). The error also happened with pg_dump in 9.3. > > I think it's a bad idea to name a scheme 'old', but it's possible, > so it should be supported. I saw no clue to resolve that issue in > the pg_dump documentation. > > I'm running Debian Wheezy using the apt.postgresql.org repository. > > Regards > > - Adrian > > > -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ iQEcBAEBAgAGBQJRf+jBAAoJEJg+KbLX08eJV5YH/RLriFo3r9eDrbeO6UKwBhBq RMYcs0GvqoDz2QtDRFiyjwl6s12rarTP//dK70oA587XBjWX3FN3k1BkHDrkrEFQ XxP8hwtUKIYDYQgMx5OX8FrrLfmXcoQtkM7mISS3DxPb436Cv4+JVukZWDHVGmJj nVKXwlB/spTSKMVcyi5Be8Gjf6b+7ArYfP6334nSOEznWrdbs+f9lWokTCOkSRW6 DxWC1ELbXkOTXK03qLXtieVGIrs8r6tUnAu/PeIDb3L5nsNZzs6FLfxkq6FckMDI hVPnksW633eUQM/O1Jibr5o82rzvda2b/R/Soo1HjaChSGnnFH3HvodefS5cgTU= =EIwd -----END PGP SIGNATURE-----
Re: BUG #8128: pg_dump (>= 9.1) failed while dumping a scheme named "old" from PostgreSQL 8.4
From
Tom Lane
Date:
Adrian.Vondendriesch@credativ.de writes: > [ recent pg_dump fails against an 8.4 server if "old" is used as a name ] Yeah. The reason for this is that "old" was considered a reserved word in 8.4 and before, but since 9.0 it is not reserved (indeed it isn't a keyword at all anymore), so 9.0 and later pg_dump don't think they need to quote it in commands. De-reserving a keyword happens sufficiently rarely that it doesn't really seem worth teaching pg_dump about such cases. There is a workaround, which is to use the --quote-all-identifiers switch when dumping from a server with an incompatible idea of the set of reserved keywords. For the archives' sake, it might be worth noting that --quote-all-identifiers was added in 9.1, which means that 9.0 pg_dump is vulnerable to this problem and has no workaround. That's a bit annoying, but I rather doubt we'll take the trouble to back-port --quote-all-identifiers into 9.0 at this point. regards, tom lane
Re: BUG #8128: pg_dump (>= 9.1) failed while dumping a scheme named "old" from PostgreSQL 8.4
From
"Adrian.Vondendriesch"
Date:
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am 01.05.2013 01:53, schrieb Tom Lane: > Adrian.Vondendriesch@credativ.de writes: >> [ recent pg_dump fails against an 8.4 server if "old" is used as >> a name ] > > Yeah. The reason for this is that "old" was considered a reserved > word in 8.4 and before, but since 9.0 it is not reserved (indeed it > isn't a keyword at all anymore), so 9.0 and later pg_dump don't > think they need to quote it in commands. > > De-reserving a keyword happens sufficiently rarely that it doesn't > really seem worth teaching pg_dump about such cases. There is a > workaround, which is to use the --quote-all-identifiers switch > when dumping from a server with an incompatible idea of the set of > reserved keywords. I've tested the workaround and it works. But, because the error originaly happens when upgrading from 8.4 to 9.1, I'm interested in a way how I could force pg_upgrade to tell pg_dump to use this switch. IMO: When there is such a switch, it should be on by default when upgrading from 8.4 (or lower) to a version >= 9.1 to prevent this kind of error. Did I miss something that would break in this scenario when - --quote-all-identifiers is used by default while upgrading from <= 9.0? > > For the archives' sake, it might be worth noting that > --quote-all-identifiers was added in 9.1, which means that 9.0 > pg_dump is vulnerable to this problem and has no workaround. > That's a bit annoying, but I rather doubt we'll take the trouble to > back-port --quote-all-identifiers into 9.0 at this point. > > regards, tom lane > Regards - Adrian * Englisch - erkannt * Englisch * Deutsch * Englisch * Deutsch <javascript:void(0);> -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ iQEcBAEBAgAGBQJRgQN7AAoJEJg+KbLX08eJo+QH/3WUV9qj2WTv1YaBRL2A0BxJ 0xwYUEKKZn++E7wU7hJSstY9vS7uQJEnSicQT1GcEZREYwJkR2vqMZUUKX1aB2KU KnHLmRE3+4OWAIwNYIDOL00BMlAZ+brRkxWy7zERpMDkcsuo7v29rsWiwI0RggDf U+Dt/JZaMfWCEobo9dBFyW1jGOkOs378JMltWV71JUEW2MfAh24KTL35IjlK47Vi ZPYpFWsnLJDJlq33Lx7+GM9PIK/xRefXJZZLkjHaXcNMkTdu05nEsehuARcZt9Vz OW1k2W7IcktzlLsUOz2fuLwSDSITQKT5HvLeubFJOoFwtQrVOIBhw2VGC5phOYE= =nBRc -----END PGP SIGNATURE-----