windows - 在 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
预计不会在运行该CREATE SUBSCRIPTION
命令的 Windows 用户的用户目录中找到 。换句话说,如果我的 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\
.
因此,通过在 中创建 pgpass 文件C:\Windows\ServiceProfiles\NetworkService\AppData\Roaming\postgresql\pgpass.conf
,我可以创建一个订阅,如下所示,密码将从文件中成功获取。
CREATE SUBSCRIPTION alltables
CONNECTION 'host=192.168.1.5 port=5432 user=replicator1 dbname=test1'
PUBLICATION alltables;
推荐阅读
- python - 从容器中的多个 ipywidget 中卸载值
- javascript - 动态增加 setInterval 值
- html - 如何在纯 css 中制作一个压扁的圆圈?
- r - 如何避免 Shiny 应用程序和助手中的代码重复
- r - 如何以非常特定的格式合并 R 中的多个文件?
- spring-boot - spring hibernate.connection.release_mode 默认值
- c++ - 模板值多于类中定义的运算符没有匹配函数
- c++ - 使用 CPLEX 和 Concert Technology 编写 C++ 程序
- tensorflow - “ValueError:在给定目录中找不到'检查点'文件或检查点”错误与谷歌的对象检测教程
- nasm - 为什么 LD 以这种方式为 Ubuntu 18.04 上的 ELF64 映射部分