【问题标题】:How to give password to pg_dump without prompt?如何在没有提示的情况下给 pg_dump 密码?
【发布时间】:2023-02-04 04:51:03
【问题描述】:

我有以下 Python 代码可在本地运行以生成转储。 当我使用 pg_dump 命令时,我想在没有数据库连接提示密码的情况下对它进行 docker 化,而且我也不知道我将在 dockerfile 中提供什么而不是 postgres_bin = r"C:\Program Files\PostgreSQL\13\垃圾桶”

import os
import paramiko
import subprocess

postgres_bin = r"C:\Program Files\PostgreSQL\13\bin"
dump_file = "database_dump.sql"

with open(dump_file, "w") as f:
    result = subprocess.call([os.path.join(postgres_bin, "pg_dump"), "-Fp", "-d", "XXX", "-U", "XXX", "-h", "XXX", "-p", "XXX"], stdout=f)

transport.close()

此代码在本地工作。我想让相同的代码工作,而不必在我本地的提示中输入密码。

我怎样才能做到这一点 ?

【问题讨论】:

  • 您可以使用 PGPASSWORDPGPASSFILE 环境变量,如 the documentation 中所述。
  • 我试过了,但没有用。我认为你是对的,我没有很好地使用它。请问你有例子吗?

标签: python postgresql docker subprocess pg-dump


【解决方案1】:

您可以使用 PGPASSWORDPGPASSFILE 环境变量,如 the documentation 中所述。

例如,要将数据库“example”转储为用户“postgres”,密码为“secret”,我可以这样写:

PGHOST=127.0.0.1 
PGUSER=postgres 
PGPASSWORD=secret 
PGDATABASE=example 
pg_dump

我可以将密码存储在一个文件中,而不是使用 PGPASSWORD 环境变量;在这种情况下,我们需要按照“The Password File”中的描述格式化文件:

echo 127.0.0.1:5432:example:postgres:secret

然后使用 PGPASSFILE 环境变量引用该文件:

PGPASSFILE=pgpass 
pg_dump -h 127.0.0.1 -U postgres example

【讨论】:

    猜你喜欢
    • 2012-03-06
    • 2011-12-06
    • 1970-01-01
    • 2016-12-01
    • 1970-01-01
    • 2022-01-09
    • 2014-07-14
    • 1970-01-01
    相关资源
    最近更新 更多