Windows 7中archive_command出错

时间:2013-03-23 07:28:09

标签: database postgresql-9.0

我已经完成了以下步骤:

  1. 已打开postgresql.conf
  2. 设置以下参数:

    wal_level = archive
    archive_mode =on
    archive_command = ''copy %p \\\\192.168.1.10\\Archive\\wals\\%f''
    
  3. 其中192.168.1.10是我的PC IP地址,Archive是D驱动器中的共享文件夹。

    当我重新启动postgres服务时,我在Archive文件夹中找到了已存档的文件。

    这就是我想要做的事。

    但是现在我想将存档的文件存储在另一台IP地址为“192.168.1.41”的PC中,我执行了以下步骤:

    1. 我创建了一个文件夹Archive和一个子文件夹WALs。
    2. 为每个人提供可共享和完全访问权限。
    3. 更新我的电脑中的archive_command = ''copy %p \\\\192.168.1.41\\Archive\\wals\\%f''
    4. 现在,当我重新启动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.
      

2 个答案:

答案 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数据库的帐户的权限