pg_restore --single-transaction and --clean

Started by Takahiro Itagakialmost 16 years ago7 messages
#1Takahiro Itagaki
itagaki.takahiro@oss.ntt.co.jp

As another glitch in pg_restore, a combination of options
--single-transaction and --clean raises errors if we restore data
into an empty database. The reason is pg_restore uses DROP <OBJECT>.
The cleanup command fails if the target object doesn't exist.

Is it a TODO item to replace "DROP" into "DROP IF EXISTS"
for cleanup commands in pg_restore?

Regards,
---
Takahiro Itagaki
NTT Open Source Software Center

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Takahiro Itagaki (#1)
Re: pg_restore --single-transaction and --clean

Takahiro Itagaki <itagaki.takahiro@oss.ntt.co.jp> writes:

Is it a TODO item to replace "DROP" into "DROP IF EXISTS"
for cleanup commands in pg_restore?

No. We try to avoid using nonstandard SQL in dumps.

regards, tom lane

#3Robert Haas
robertmhaas@gmail.com
In reply to: Tom Lane (#2)
Re: pg_restore --single-transaction and --clean

On Wed, Feb 10, 2010 at 10:16 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Takahiro Itagaki <itagaki.takahiro@oss.ntt.co.jp> writes:

Is it a TODO item to replace "DROP" into "DROP IF EXISTS"
for cleanup commands in pg_restore?

No.  We try to avoid using nonstandard SQL in dumps.

How often do we succeed? It seems unlikely that our dumps would be
restorable into any other database.

...Robert

#4Kevin Grittner
Kevin.Grittner@wicourts.gov
In reply to: Robert Haas (#3)
Re: pg_restore --single-transaction and --clean

Robert Haas <robertmhaas@gmail.com> wrote:

Tom Lane <tgl@sss.pgh.pa.us> wrote:

We try to avoid using nonstandard SQL in dumps.

How often do we succeed? It seems unlikely that our dumps would
be restorable into any other database.

When we were running in a mixed environment we had several occasions
where it was useful to feed pg_dump --column-inserts output into
Sybase databases. It was very nice to have that. I think we did
sometimes have to filter it through sed to deal with BOOLEAN vs BIT
issues.

-Kevin

#5Alvaro Herrera
alvherre@commandprompt.com
In reply to: Kevin Grittner (#4)
Re: pg_restore --single-transaction and --clean

Kevin Grittner escribi�:

Robert Haas <robertmhaas@gmail.com> wrote:

Tom Lane <tgl@sss.pgh.pa.us> wrote:

We try to avoid using nonstandard SQL in dumps.

How often do we succeed? It seems unlikely that our dumps would
be restorable into any other database.

When we were running in a mixed environment we had several occasions
where it was useful to feed pg_dump --column-inserts output into
Sybase databases. It was very nice to have that. I think we did
sometimes have to filter it through sed to deal with BOOLEAN vs BIT
issues.

Maybe we should have a --compatible-mode or some such that enables these
things, instead of staying away from useful PG-only features.

The problem would then be how to test it ...

--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.

#6Tom Lane
tgl@sss.pgh.pa.us
In reply to: Alvaro Herrera (#5)
Re: pg_restore --single-transaction and --clean

Alvaro Herrera <alvherre@commandprompt.com> writes:

Kevin Grittner escribi�:

Robert Haas <robertmhaas@gmail.com> wrote:

Tom Lane <tgl@sss.pgh.pa.us> wrote:

We try to avoid using nonstandard SQL in dumps.

How often do we succeed? It seems unlikely that our dumps would
be restorable into any other database.

When we were running in a mixed environment we had several occasions
where it was useful to feed pg_dump --column-inserts output into
Sybase databases. It was very nice to have that. I think we did
sometimes have to filter it through sed to deal with BOOLEAN vs BIT
issues.

Maybe we should have a --compatible-mode or some such that enables these
things, instead of staying away from useful PG-only features.

Well, the subtext of my comment was really that this case isn't useful
enough to justify introducing a nonstandard construct into dumps.
IMO the whole *point* of --single-transaction is to fail if the database
isn't in the state you thought it was. If you want to restore into an
empty DB with --single-transaction, don't use --clean. Problem solved.

--clean has got other issues anyway with a DB that isn't in exactly the
expected state. If the inter-object dependencies aren't quite what they
were in the source, drops are likely to fail because dependent objects
still remain. Should we therefore make all pg_dump's drop commands
CASCADE? I don't think so; the side-effects could be nasty.

regards, tom lane

#7Alvaro Herrera
alvherre@commandprompt.com
In reply to: Tom Lane (#6)
Re: pg_restore --single-transaction and --clean

Tom Lane escribió:

Alvaro Herrera <alvherre@commandprompt.com> writes:

Kevin Grittner escribi�:

Robert Haas <robertmhaas@gmail.com> wrote:

Tom Lane <tgl@sss.pgh.pa.us> wrote:

We try to avoid using nonstandard SQL in dumps.

How often do we succeed? It seems unlikely that our dumps would
be restorable into any other database.

When we were running in a mixed environment we had several occasions
where it was useful to feed pg_dump --column-inserts output into
Sybase databases. It was very nice to have that. I think we did
sometimes have to filter it through sed to deal with BOOLEAN vs BIT
issues.

Maybe we should have a --compatible-mode or some such that enables these
things, instead of staying away from useful PG-only features.

Well, the subtext of my comment was really that this case isn't useful
enough to justify introducing a nonstandard construct into dumps.

That's true, but this is not the first time we've left out some feature
from dumps because they would make them standards-incompatible. If we
have enough of these (and I have no idea that we do), maybe we could
start here. This is of course just a future TODO item, not something to
consider for 9.0.

--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.