【发布时间】:2020-05-28 19:18:57
【问题描述】:
我无法让 .pgpass 在 Windows/cygin 上工作
我在 Windows 10 上安装了 pgAdmin4,psql 版本 12.0。
我正在使用 cygwin,编写 bash 脚本来对安装有云提供商的 PG 数据库执行各种操作。
如果我在 bash 脚本中指定这些环境变量,一切都会很好:
export PGUSER=<pguser>
export PGPASSWORD=<pgpassword>
export PGHOSTADDR=<ip-address>
export PGPORT=5432
但如果相反,我不在 bash 脚本中包含这些环境变量并创建一个 .pgpass 文件:$HOME/.pgpass 并输入如下行:
hostname:port:database:username:password
并运行脚本,它会尝试连接到“localhost”,就好像找不到 .pgpass 文件一样。
我收到此错误:
Running: [./myscript.sql]
psql: error: could not connect to server: could not connect to server: Connection refused (0x0000274D/10061)
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?
could not connect to server: Connection refused (0x0000274D/10061)
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?
我尝试像这样在 bash 脚本中明确指定:
export PGPASSFILE=$HOME/.pgpass
它仍然不起作用,我收到相同的错误消息,它忽略了 PGPASSFILE 环境变量。
我将 .pgpass 文件的权限设置为 0600,所以这不是问题。
ls -l .pgpass
-rw------- 1 <user> None 49 Feb 12 23:01 .pgpass
【问题讨论】:
-
我会使用进程监视器来查看
psql在哪里寻找文件。 -
pgAdmin4 不是 Cywin 程序,那么 HOME 对它意味着什么? @LaurenzAlbe 的建议是个好主意
-
'psql' 是一个 Windows 程序,我正在运行 'psql' 这是一个为 Windows 编译的 .exe。我可以在 Cygwin 中运行 .exe 程序,因为 Cygwin 是 Windows 编译的应用程序。
-
> 我会使用进程监视器来查看 psql 在哪里寻找文件。我搜索了 Process Monitor,找到了它(Microsoft Sysinternals),下载并安装了它,这是一大堆废话,不让我做你推荐的事情。我假设你使用 cygwin 并且有一个 $HOME/.pgpass 并且它正在工作?否则你不会对此作出回应。它冻结了,它不允许我搜索和过滤任何我能看到的进程,我有许多进程正在运行,当我运行我的 psql 脚本时,我永远无法在列表中找到它来遵循这个建议。跨度>
-
我已经尝试了一切,没有办法编写 bash 脚本,使用 'psql.exe' 并让它在任何地方读取 .pgpass 文件或 pgpass.conf。 pgAdmin/psql 的开发人员在 windows 上遗漏了一些东西,就是读取这个文件。
标签: postgresql cygwin psql