如何解决在 Windows 10 上运行 PostgreSQL 服务的用户的默认 pgpass.conf 位置是什么?
在 Microsoft Windows 上,pgpass 文件的位置如下:
在 Microsoft Windows 上,该文件名为 %APPDATA%\postgresql\pgpass.conf(其中 %APPDATA% 指的是用户配置文件中的应用程序数据子目录)。
来源:https://www.postgresql.org/docs/current/libpq-pgpass.html
当我创建订阅时,如下所示,我没有在连接字符串中提供密码。
CREATE SUBSCRIPTION alltables
CONNECTION 'host=192.168.1.5 port=5432 user=replicator1 dbname=test1'
PUBLICATION alltables;
相反,我希望将密码存储在具有受限访问权限的 pgpass.conf
文件中。
几次尝试后,我注意到在创建订阅的情况下,在运行 pgpass.conf
命令的 Windows 用户的用户目录中不会找到 CREATE SUBSCRIPTION
。换句话说,如果我的 Windows 10 用户名是 foobar
,则该文件不应是 C:\Users\foobar\AppData\Roaming\postgresql\pgpass.conf
。相反,它似乎应该出现在运行 PostgreSQL 程序的 Windows 用户的用户目录中。
我通过在连接字符串中添加 passfile=C:\\Users\\foobar\\AppData\\Roaming\\postgresql\\pgpass.conf
并向 NETWORK SERVICE
用户(运行 postgres.exe
进程的用户)授予读取权限发现了这一点。在这种情况下,将创建订阅。但是,如果我从连接字符串中删除 passfile
选项,则会返回简洁的 ERROR: could not connect to the publisher: fe_sendauth: no password supplied
错误消息。
那么,在这种情况下,%APPDATA%\postgresql\pgpass.conf
会指向哪里?换句话说,在这种情况下,pgpass.conf
文件应该在哪里?
解决方法
正如 Laurenz 所评论的,问题本质上是:%APPDATA%
用户的NETWORK SERVICE
是什么?
在我的情况下是 C:\Windows\ServiceProfiles\NetworkService\AppData\Roaming\
。
因此,通过在 C:\Windows\ServiceProfiles\NetworkService\AppData\Roaming\postgresql\pgpass.conf
中创建 pgpass 文件,我可以创建如下订阅,密码将从文件中成功获取。
CREATE SUBSCRIPTION alltables
CONNECTION 'host=192.168.1.5 port=5432 user=replicator1 dbname=test1'
PUBLICATION alltables;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。