在 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_dumppg_restore 之间的用户界面不匹配很糟糕,我希望我们能改变它,但现在有点晚了。

【讨论】:

以上是关于在 pg_restore 中,如何使用 postgres 连接字符串来指定主机/数据库/用户名/密码?的主要内容,如果未能解决你的问题,请参考以下文章

在 pg_restore 中,如何使用 postgres 连接字符串来指定主机/数据库/用户名/密码?

如何在没有 psql 和 pg_restore 的情况下恢复 PostgreSQL 数据库备份?

当成功有时会导致退出代码为 1 时,如何可靠地确定 pg_restore 是不是成功?

在转储文件上使用 pg_restore

pg_dump & pg_restore 密码使用 python 模块子进程

pg_restore错误:pg_restore:文件头中的[archiver]不支持的版本(1.13)