BUG #4374: pg_restore does not restore public schema comment
The following bug has been logged online:
Bug reference: 4374
Logged by: Daniel Migowski
Email address: dmigowski@ikoffice.de
PostgreSQL version: 8.3.3
Operating system: Windows
Description: pg_restore does not restore public schema comment
Details:
Hello dear developers,
Currently a schema dump (custom format, containing the public schema
comment) can be restored, but the public schema version is not restored.
I assume you check if a schema already exists and the skip the schema part.
Please don't skip setting the comment, since we use it for versioning
purposes, and restoring from a dump breaks it.
With best regards,
Daniel Migowski
"Daniel Migowski" <dmigowski@ikoffice.de> writes:
Currently a schema dump (custom format, containing the public schema
comment) can be restored, but the public schema version is not restored.
I assume you check if a schema already exists and the skip the schema part.
That assumption is false, so it's not entirely clear to me exactly what
you are complaining about. Please provide a specific test case --- what
did you do, what happened, what would you like to happen instead?
regards, tom lane
Tom Lane wrote:
"Daniel Migowski" <dmigowski@ikoffice.de> writes:
Currently a schema dump (custom format, containing the public schema
comment) can be restored, but the public schema version is not restored.I assume you check if a schema already exists and the skip the schema part.
That assumption is false, so it's not entirely clear to me exactly what
you are complaining about. Please provide a specific test case --- what
did you do, what happened, what would you like to happen instead?
The issue actually appears to be that the comment on default schema like
`public' isn't dumped in the first place.
Setup:
CREATE DATABASE re;
\c re
COMMENT ON SCHEMA public IS 'public comment';
CREATE SCHEMA testschema;
COMMENT ON SCHEMA testschema IS 'testschema comment';
\q
\dn+ shows the comments as set on schema `public' and `testschema'.
The output of:
pg_dump re
includes the statement:
COMMENT ON SCHEMA testschema IS 'testschema comment';
but lacks any COMMENT statement for the `public' schema.
So: the user's report is incorrect in blaming pg_restore, but correct in
that comments on the public schema (and presumably other default schema)
aren't preserved by pg_dump | pg_restore. The real reason appears to be
that they're not dumped in the first place.
I haven't checked to see if a custom dump behaves differently.
--
Craig Ringer
Craig Ringer <craig@postnewspapers.com.au> writes:
The issue actually appears to be that the comment on default schema like
`public' isn't dumped in the first place.
Hmm ... there is a specific exclusion in _printTocEntry to suppress
dumping of either the CREATE SCHEMA command for "public" or its comment.
I don't quite recall the reasoning [ digs... ] Oh, here it is:
http://archives.postgresql.org/pgsql-committers/2008-01/msg00212.php
You can probably find some related discussion in the archives right
before that, but the commit message is clear enough.
On the whole, since "public" is a quasi-built-in object, it doesn't seem
like a very good idea to depend on being able to alter its properties.
Why not attach your version comment to some other, entirely user-defined
object? "CREATE SCHEMA version" perhaps ...
regards, tom lane
Hallo Craig,
Craig Ringer schrieb:
So: the user's report is incorrect in blaming pg_restore, but correct in
that comments on the public schema (and presumably other default schema)
aren't preserved by pg_dump | pg_restore. The real reason appears to be
that they're not dumped in the first place.
I do a dump on Linux Postgres 8.3.1 in custom format. When I try to read
it (gzip -d > myfile;less myfile) i find a string like "COMMENT ON
SCHEMA public IS 'mycomment'". So I assumed that pg_dump actually dumps
it. But I don't know why there is a "DROP SCHEMA public" in the file.
Thats why I assumed pg_restore fails here.
I haven't checked to see if a custom dump behaves differently.
Craig Ringer
I didn't check the plain text format :).
Daniel Migowski
Tom Lane wrote:
Craig Ringer <craig@postnewspapers.com.au> writes:
The issue actually appears to be that the comment on default schema like
`public' isn't dumped in the first place.Hmm ... there is a specific exclusion in _printTocEntry to suppress
dumping of either the CREATE SCHEMA command for "public" or its comment.
I don't quite recall the reasoning [ digs... ] Oh, here it is:
http://archives.postgresql.org/pgsql-committers/2008-01/msg00212.php
You can probably find some related discussion in the archives right
before that, but the commit message is clear enough.On the whole, since "public" is a quasi-built-in object, it doesn't seem
like a very good idea to depend on being able to alter its properties.
Why not attach your version comment to some other, entirely user-defined
object? "CREATE SCHEMA version" perhaps ...
I have added a comment in the source code about this.
--
Bruce Momjian <bruce@momjian.us> http://momjian.us
EnterpriseDB http://enterprisedb.com
+ If your life is a hard drive, Christ can be your backup. +