我已经完成了以下步骤:
postgresql.conf
设置以下参数:
wal_level = archive
archive_mode =on
archive_command = ''copy %p \\\\192.168.1.10\\Archive\\wals\\%f''
其中192.168.1.10是我的PC IP地址,Archive是D驱动器中的共享文件夹。
当我重新启动postgres服务时,我在Archive文件夹中找到了已存档的文件。
这就是我想要做的事。
但是现在我想将存档的文件存储在另一台IP地址为“192.168.1.41”的PC中,我执行了以下步骤:
archive_command = ''copy %p \\\\192.168.1.41\\Archive\\wals\\%f''
现在,当我重新启动postgres服务时,远程PC“192.168.1.41”中没有收到存档文件。
当我打开pg_log
文件夹查看日志文件时,我发现了错误:
The failed archive command was:
copy pg_xlog\000000010000000000000009 \\192.168.1.41\PGArchivewals\000000010000000000000009
The referenced account is currently locked out and may not be logged on to.
答案 0 :(得分:1)
您的问题是PostgreSQL服务器不在您自己的用户帐户下运行。它在postgres
用户(适用于PostgreSQL 9.1及更早版本)或NETWORKSERVICE
用户(适用于PostgreSQL 9.2及更高版本)下运行。
这些帐户都无法访问您保存的密码和连接。他们也无权访问您的用户帐户可能拥有的任何Active Directory域权限,因为它们只是本地帐户。
要将Windows网络(SMB / CIFS)与来自服务帐户的UNC路径一起使用,需要进行其他配置,尤其是在连接到本地PC以外的地址时。您可能需要一个安装脚本来执行net use
并指定密码。
您可以在远程计算机上添加共享权限,以便postgres
帐户可以通过在远程计算机上创建postgres
帐户(如果不存在)并进行连接来进行连接确定它有相同的密码。这不适用于9.2中的NETWORKSERVICE
,也不适用于AD域。
“正确”的解决方案是更改PostgreSQL,使其在具有网络访问权限的特权帐户下运行。这并不困难,但需要您编辑或创建Windows服务并在PostgreSQL数据目录上正确更改权限。如果你弄错了,你的PostgreSQL安装将停止工作,可能很难修复。出于这个原因,除非你非常了解Windows服务和配置,否则我不推荐它 - 在这种情况下你已经知道你为什么尝试不起作用。
更简单的解决方法是使用FTP之类的东西在机器之间传输文件。
答案 1 :(得分:0)
在PC(主服务器和从服务器)上设置防火墙并检查您访问postgres数据库的帐户的权限