why pg_restore ignores --create ? Error: failed: FATAL: database "new_db" does not exist
This is because it is the way pg_restore works.
pg_restore manual reads as follow :
-C, --create Create the database before restoring into it. If --clean is also specified, drop and recreate the target database before connecting to it.
When this option is used, the database named with -d is used only to issue the initial DROP DATABASE and CREATE DATABASE commands. All data is restored into the database name that appears in the archive.
The -d will restore in the given database if and only if -C is not used. If -C is used, the database is used as a "launchpad", not as the destination.
In short, you want either (clean existing): (note the database name is postgres
)
pg_restore -c -d postgres db.dump
or (create new)
pg_restore -C -d postgres db.dump
or (create new explicitly)
createdatabase the_database
pg_restore -d the_database db.dump
See what SCO said for more details.