在 pg_restore 中,如何使用 postgres 连接字符串来指定 host/database/username/password?

In pg_restore, how can you use a postgres connection string to specify the host/database/username/password?

使用 pg_dump 时,可以使用 postgres 连接字符串指定 host/database/username/password:

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

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