我想在没有密码提示的情况下使用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用户。
密码- 管理员用户的密码。