在 pg_restore 中,如何使用 postgres 连接字符串来指定主机/数据库/用户名/密码?
Posted
技术标签:
【中文标题】在 pg_restore 中,如何使用 postgres 连接字符串来指定主机/数据库/用户名/密码?【英文标题】:In pg_restore, how can you use a postgres connection string to specify the host/database/username/password? 【发布时间】:2015-04-04 04:07:14 【问题描述】:使用pg_dump时,可以使用postgres连接字符串来指定主机/数据库/用户名/密码:
pg_dump postgres://someuser:somepassword@somehost.com:5432/somedatabase
我想为 pg_restore 使用相同类型的连接字符串:
pg_restore -f dump.dump postgres://userb:somepassword@somehost.com:5432/otherdatabase
但我得到一个错误:
pg_restore: [archiver] could not open input file "postgres://userb:somepassword@somehost.com:5432/otherdatabase": No such file or directory
【问题讨论】:
manual is clear 关于你应该使用的标志。 手册说:pg_restore [connection-option...] [option...] [filename] 当我尝试:pg-restore postgres://userb:somepassword@somehost.com:5432 /otherdatabase -f dump.dump 我得到同样的错误 为什么你认为 [connection-options] 可以接受完整的连接 url?这不是手册所说的。 它接受 pg_dump 的完整连接 url - 即使 pg_dump 的手册没有提到能够使用完整连接 url 我明白了,但如果我做对了,pg_dump
接受它作为它的dbname
参数。那就是带有pg_restore
的-d
选项。没有选项的参数用作输入filename
(带有pg_restore
),这是肯定的。
【参考方案1】:
在 PostgreSQL 工具中,只要您可以指定数据库名称,您就可以指定连接字符串。
在pg_restore
的语法中,dbname 是通过标志传递的,而不是作为位置参数:
$ pg_restore --help
pg_restore restores a PostgreSQL database from an archive created by pg_dump.
Usage:
pg_restore [OPTION]... [FILE]
General options:
-d, --dbname=NAME connect to database name
...
所以你应该使用:
pg_restore -d 'postgres://userb:somepassword@somehost.com:5432/otherdatabase' dump.dump
是的,pg_dump
和 pg_restore
之间的用户界面不匹配很糟糕,我希望我们能改变它,但现在有点晚了。
【讨论】:
以上是关于在 pg_restore 中,如何使用 postgres 连接字符串来指定主机/数据库/用户名/密码?的主要内容,如果未能解决你的问题,请参考以下文章
在 pg_restore 中,如何使用 postgres 连接字符串来指定主机/数据库/用户名/密码?
如何在没有 psql 和 pg_restore 的情况下恢复 PostgreSQL 数据库备份?
当成功有时会导致退出代码为 1 时,如何可靠地确定 pg_restore 是不是成功?