pg_restore忽略 .pgpass 和 PGPASSWORD 环境变量



我想在没有密码提示的情况下使用pg_restore导入备份。 我尝试了几个选项,但在运行脚本后,它总是会要求输入密码。pg_dump正在工作,但不是pg_restore。如果我输入密码,我可以运行 pg_restore 命令,但我想要一个无密码命令,或者至少我不想输入我的密码,因为脚本必须在没有用户交互的情况下工作。

什么对我有用:

PGPASSWORD=xyz pg_dump -h localhost -U user -Fc database > ~/dump_prod.pgsql

什么不起作用

1.(

PGPASSWORD=xyz pg_restore -h localhost -d database -U user -W --clean --no-owner ~/dump_prod.pgsql

2.(

pg_restore --dbname=postgresql://user:pass@localhost:5432/db -W --clean --no-owner ~/dump_prod.pgsql

3.(

touch ~/.pgpass
echo "*:*:*:*:password > ~/.pgpass
chmod 0600 ~/.pgpass
pg_restore -h localhost -d db -U user -W --clean --no-owner ~/dump_prod.pgsql

有什么想法吗?

问候

根据文档,-W将提示输入密码。-w不会

-

w
--无密码

切勿发出密码提示。如果服务器需要密码身份验证,并且密码无法通过其他方式获得,例如 如果是 .pgpass 文件,则连接尝试将失败。此选项可以是 在没有用户输入 密码。

-W
--密码

强制pg_restore在连接到数据库之前提示输入密码。

.pgpass文件对我有用。

我的设置: 我正在将数据库还原到作为 Docker 容器运行的 postgres 实例中。

postgres 实例使用以下命令运行:

docker run --name postgres_db -p 5432:5432 -e POSTGRES_PASSWORD=admin -d postgres:9.6

pg_restore存在,但它在 docker 设置之外作为单独的工具提供。

~/.pgpass文件条目如下所示:

localhost:5432:db_name:user:password


哪里:db_name是要还原的目标数据库名称。

用户是将要执行还原的用户的名称 - 在我的例子中是管理员用户。 即Postgres实例中的Postgres用户。

密码- 管理员用户的密码。

相关内容

  • 没有找到相关文章

最新更新