BUG #4374: pg_restore does not restore public schema comment

Started by Daniel Migowskiover 17 years ago6 messagesbugs
Jump to latest
#1Daniel Migowski
dmigowski@ikoffice.de

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

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Daniel Migowski (#1)
Re: BUG #4374: pg_restore does not restore public schema comment

"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

#3Craig Ringer
craig@2ndquadrant.com
In reply to: Tom Lane (#2)
Re: BUG #4374: pg_restore does not restore public schema comment

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

#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: Craig Ringer (#3)
Re: BUG #4374: pg_restore does not restore public schema comment

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

#5Daniel Migowski
dmigowski@ikoffice.de
In reply to: Craig Ringer (#3)
Re: BUG #4374: pg_restore does not restore public schema comment

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

#6Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#4)
Re: BUG #4374: pg_restore does not restore public schema comment

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. +