Answers:
这是因为它是pg_restore的工作方式。
pg_restore手册内容如下:
-C,--create在还原到数据库之前创建数据库。如果还指定了--clean,请在连接到目标数据库之前删除并重新创建目标数据库。
使用此选项时,以-d命名的数据库仅用于发出初始DROP DATABASE和CREATE DATABASE命令。所有数据都将还原到存档中显示的数据库名称中。
当且仅当不使用-C时,-d才会在给定的数据库中还原。如果使用-C,则数据库将用作“启动板”,而不用作目标。
docker-compose -p dump_import -f docker/dump_import.yml run --rm be bash -c 'waitforit -host=postgres -port=5432 -timeout=30 && export PGPASSWORD=$DATABASE_PASSWORD && createdb --echo --port=$DATABASE_PORT -host=$DATABASE_HOST --username=$DATABASE_USER $DATABASE_NAME && pg_restore --format=c --dbname=$DATABASE_URL_WITHOUT_QUERY tmp/full.dump && echo "Import done"'
简而言之,您需要(清除现有的):(注意数据库名称为postgres
)
pg_restore -c -d postgres db.dump
或(新建)
pg_restore -C -d postgres db.dump
或(明确创建新的)
createdatabase the_database
pg_restore -d the_database db.dump
有关更多详细信息,请参见SCO所说的内容。
pg_restore: [archiver] -C and -c are incompatible options
pg_restore -C -d postgres db.dump
可能看起来很吓人,但是它对postgres数据库没有任何作用,它仅用于初始连接。
更明确地说,这就是我为我解决的问题:
使用所需名称创建一个空数据库:(在我的情况下,用户名是“ postgres”)
psql -U [username]
然后,它将提示您输入密码。此时,您将以[用户名]登录。输入以下内容:
CREATE DATABASE [dbname];
现在退出会话并返回到常规的终端会话。
从将目标数据库名称设置为刚创建的数据库名称的文件中还原数据库。
cat [your_file_path/filename] | psql -U [username] [dbname]
其中[your_file_path / filename]是要还原的db文件或文本文件的位置。
-F
选项创建备份时,除非使用-F p
产生带有sql语句的纯文本文件,否则必须使用pg_restore还原备份。
pg_restore
。-C选项只能创建名称与转储文件中的数据库名称匹配的数据库。要还原到任意数据库,必须先CREATE DATABASE new_db;
在psql中运行pg_restore --dbname=new_db
。