pg_restore为何忽略指定dbname?Docker PostgreSQL迁移至远程异常
问题原因及解决办法
原因分析
你使用了--create参数,该参数会让pg_restore优先读取备份文件中存储的原始数据库名称(即本地的postgres库)来创建数据库。此时你指定的--dbname参数仅用于连接远程服务器时的初始数据库(比如远程默认的postgres库),而非要创建的目标库名,因此会忽略你设置的proddb。
解决方法
方法一:使用--new-dbname指定目标库名(推荐)
保留--create参数,同时添加--new-dbname=proddb来覆盖备份中的原始库名,--dbname指定远程的默认postgres库用于初始连接:
pg_dump --format=custom --dbname=postgresql://postgres:postgres@localhost:5432/postgres | PGPASSWORD=pa$$word pg_restore -v --clean --create --host=production.local --username=swasher --dbname=postgres --new-dbname=proddb
方法二:手动创建目标库后直接还原
- 先在远程服务器创建
proddb库:
PGPASSWORD=pa$$word createdb -h production.local -U swasher proddb
- 移除
--create参数,直接连接到proddb库还原数据:
pg_dump --format=custom --dbname=postgresql://postgres:postgres@localhost:5432/postgres | PGPASSWORD=pa$$word pg_restore -v --clean --host=production.local --username=swasher --dbname=proddb
内容的提问来源于stack exchange,提问作者swasher
相关产品推荐
相关产品推荐

