Discussion:
pg_restore usage
(too old to reply)
Thomas F. O'Connell
2004-06-21 21:57:17 UTC
Permalink
A while back, there was a thread on this list called "pg_restore
problem with 7.3.1". It outlined a scenario very similar to one I'm
having problems with. Granted, they're not serious problems (in the
sense that there's an acceptable workaround), but they suggest that
either pg_restore is not working as expected, or I have incorrect
expectations. I'd like to get some clarification as to which is the
case.

I dump a database as follows:

pg_dump -F c db >pg_dump`date +\%Y\%m\%d`.pgsql

I transfer this file to another server, where the database db does not
exist. I try the following:

pg_restore -C -d db pg_dump20040621.pgsql

I get this error:

pg_restore: [archiver (db)] connection to database "db" failed: FATAL:
database "db" does not exist

What is an example of how the -C flag is intended to be used? If it is
omitted, then the error is the same because no createdb has been
issued.

In the end, what I'm looking for is a nice way of taking a dump and
restoring it in one command that could be added to a crontab. I
realize that it's not too much extra work to create a shell script
that creates the relevant database, but this seems like such a natural
one-liner, and I'm curious what the intent of the -C flag is, if not
to precipitate such a situation.
Tom Lane
2004-06-27 14:22:28 UTC
Permalink
Post by Thomas F. O'Connell
I transfer this file to another server, where the database db does not
pg_restore -C -d db pg_dump20040621.pgsql
database "db" does not exist
What is an example of how the -C flag is intended to be used?
Whatever database you name in -d has to already exist, because that's
where pg_restore will initially connect. -C means to issue a CREATE
DATABASE command and then reconnect to the new db.

In other words, try "-C -d template1".

regards, tom lane

---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to ***@postgresql.org so that your
message can get through to the mailing list cleanly
Thomas F. O'Connell
2004-06-28 19:55:05 UTC
Permalink
So these two statements seem to be somewhat contradictory.

What's the point of -C if not to create the database named in -d?

And why does -C -d template1 work but not -C -d <mypgsql>?

-tfo
Post by Tom Lane
Whatever database you name in -d has to already exist, because that's
where pg_restore will initially connect. -C means to issue a CREATE
DATABASE command and then reconnect to the new db.
In other words, try "-C -d template1".
j***@ono.com
2004-06-29 16:56:53 UTC
Permalink
Post by Tom Lane
Post by Thomas F. O'Connell
I transfer this file to another server, where the database db does not
pg_restore -C -d db pg_dump20040621.pgsql
database "db" does not exist
What is an example of how the -C flag is intended to be used?
Whatever database you name in -d has to already exist, because that's
where pg_restore will initially connect. -C means to issue a CREATE
DATABASE command and then reconnect to the new db.
In other words, try "-C -d template1".
I have a database called "test", that I use for proofs, and It also is usefull
for restoring a database.

Realize that psql and pg_restore, need to connect to a database. Therefore
I use the "test" database for these issues. I prefer "test", than "template1",
because If I make an mistake, then it would not affect all databases based
in the template.


---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to ***@postgresql.org so that your
message can get through to the mailing list cleanly

Loading...