使用变量的 pgpass 文件?

pgpass file that uses variables?

我正在处理 docker 使用 psql 连接到 postgres 的映像。

我的入口点:

psql analytics \
  --host=${INPUT_HOST} \
  --username=analytics \
  --port=32648

如果我 运行 系统提示我输入密码,我输入它并能够连接。太好了。

但是如果我尝试自动输入密码,我会收到错误消息:

psql analytics \
  --host=${INPUT_HOST} \
  --username=analytics \
  --port=32648 \
  --password=${INPUT_PASSWORD}

/usr/lib/postgresql/13/bin/psql: option '--password' doesn't allow an argument Try "psql --help" for more information.

我找到了一些关于使用 .pgpass 的文档,这个要添加到用户主目录的文件采用以下形式:

hostname:port:database:username:password

现在我将不得不做类似的事情:

${INPUT_HOST}:5432:analytics:analytics:${INPUT_PASSWORD}

然后在添加到图像之前对该文件进行 envsubst 或 sed。

开放式问题,有没有better/more方便的方法? ${INPUT_PASSWORD} 来自 docker 秘密。无论如何,我可以将密码传递给我对 psql 的调用吗?

最好的方法是使用连接字符串:

psql "password='${INPUT_PASSWORD}' dbname=analytics host='${INPUT_HOST}' user=analytics port=32648"