我主要关心的是脚本(Postgres 函数)中是否有密码,我正在寻找一种解决方案,如何避免在 Postgres 函数中使用密码。
我在函数中使用
dblink_connect()
时遇到问题。
当我在连接字符串中提供密码时,没有问题,但是当我不提供密码时,它会显示:
ERROR: could not establish connection
DETAIL: fe_sendauth: no password supplied
但是路径
.pgpass
中的 /var/lib/postgres/.pgpass
文件确实包含正确的密码。
我尝试使用 dblink 和 bash 中的 psql 使用以下命令连接到同一服务器中的另一个数据库:
psql –h localhost –U myuser –w remote_db_name
效果很好。
我的 .pgpass 文件确实有以下行:
Localhost:5432:*:myuser:mypassword
psql 似乎在 .pgpass 文件中找到了正确的密码,但 dblink 却没有。
我遇到了同样的问题,发现如果您使用 dblink + postgres_fdw 的组合,实际上可以在 dblink 查询中摆脱硬编码数据库凭据。
使用 postgres_fdw 您可以创建一个外部服务器连接和一个映射到它的用户,之后您可以将服务器名称作为第一个参数。因此,通过这种方式,您无需对任何内容进行硬编码,也无需担心在 Airflow 中运行时屏蔽它。
这是一种简单的方法,在另一个问题的这个答案中有更详细的描述,而不是从那里复制粘贴代码。