当 pg_restore 遵循 --dbname 选项时

Mik*_*maa 6 postgresql pg-dump

pg_dump我正在尝试使用原始转储中的不同数据库名称恢复二进制备份。尽管给出了--dbname命令行参数,pg_restore但尝试恢复原始数据库名称下的所有内容 - 我特别想避免的行为。

createdb mydb

pg_restore --dbname=mydb --exit-on-error -Fc database.bak

pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 8; 2615 16396 SCHEMA topology u9o2f4j0
pg_restore: [archiver (db)] could not execute query: ERROR:  schema "topology" already exists
    Command was: CREATE SCHEMA topology;
Run Code Online (Sandbox Code Playgroud)

如何才能pg_restore以不同的名称恢复数据库?

pg_dump --version
pg_dump (PostgreSQL) 9.5.5

pg_restore --version
pg_restore (PostgreSQL) 9.6.1
Run Code Online (Sandbox Code Playgroud)

Mik*_*maa 5

您需要考虑几个命令行选项。

  pg_restore -x --no-owner --dbname=mynewdb --exit-on-error -Fc database.bak
Run Code Online (Sandbox Code Playgroud)
  • -Fc:从二进制备份恢复,因为它比纯文本 SQL 转储更灵活

  • --dbname:在此数据库名称下恢复(必须使用 预先创建createdb

  • -x:不要尝试恢复访问权限(例如,超级用户名可能会在数据库之间更改)

  • --no-owner:执行还原的系统上的数据库所有者用户不同

  • --exit-on-error:如果发生不好的事情,请中止并且不要让您的终端充满无用的错误