【问题标题】:PostgreSQL 9.2.4 (Windows 7) - Service won't start, "could not load pg_hba.conf"PostgreSQL 9.2.4 (Windows 7) - 服务无法启动,“无法加载 pg_hba.conf”
【发布时间】:2013-05-30 21:43:17
【问题描述】:

我正在尝试让 Postgres 9.2.4 在 Windows 7 上作为服务运行。安装 postgres 后,该服务运行良好。但是,在将 postgres 设置为另一个程序的服务器后,该服务停止运行。当我现在尝试启动服务时,我收到一条消息:

"postgresql-x64-9.2 - 本地 PostgreSQL Server 9.2 服务 计算机启动然后停止。某些服务会自动停止,如果 它们未被其他服务或程序使用。”

当我尝试运行应该使用数据库服务器的程序时,我得到了这个错误:

“尝试登录或创建 生产数据库。详细信息:无法连接到服务器;可以 不连接到远程套接字。应用程序现在必须关闭”

我在打开同一个程序时也遇到过这个错误:

“尝试登录或创建 生产数据库。详细信息:致命:无法加载 pg_hba.conf 应用程序现在必须关闭。”

我尝试运行以本地系统帐户以及我自己的帐户(在 postgres 服务属性中)登录的服务,但无济于事。我也尝试重新启动我的电脑。在网上查了很多故障后,我了解到一个好东西是检查 pg_log 文件。以下是最新 pg_log 条目的内容:

2013-05-29 14:59:45 MDT LOG:  database system was interrupted; last known up at 2013-05-29 14:58:01 MDT
2013-05-29 14:59:45 MDT LOG:  database system was not properly shut down; automatic recovery in progress
2013-05-29 14:59:45 MDT LOG:  record with zero length at 0/175BB98
2013-05-29 14:59:45 MDT LOG:  redo is not required
2013-05-29 14:59:45 MDT LOG:  database system is ready to accept connections
2013-05-29 14:59:45 MDT LOG:  autovacuum launcher started
2013-05-29 15:07:00 MDT LOG:  local connections are not supported by this build
2013-05-29 15:07:00 MDT CONTEXT:  line 1 of configuration file "C:/PostgreSQL/data/pg_hba.conf"
2013-05-29 15:07:00 MDT FATAL:  could not load pg_hba.conf
2013-05-29 15:07:00 MDT LOG:  local connections are not supported by this build
2013-05-29 15:07:00 MDT CONTEXT:  line 1 of configuration file "C:/PostgreSQL/data/pg_hba.conf"
2013-05-29 15:07:00 MDT FATAL:  could not load pg_hba.conf
2013-05-29 15:09:03 MDT LOG:  received fast shutdown request
2013-05-29 15:09:03 MDT LOG:  aborting any active transactions
2013-05-29 15:09:03 MDT LOG:  autovacuum launcher shutting down
2013-05-29 15:09:03 MDT LOG:  shutting down
2013-05-29 15:09:03 MDT LOG:  database system is shut down

pg_hba.conf 文件似乎有问题,如下所示:

local all all trust
host all all 127.0.0.1 255.255.255.255 trust
host all all 0.0.0.0 0.0.0.0 trust

根据网上的许多建议,我尝试将顶行编辑为许多不同的替代方案(host all all tr​​ust / host all 127.0.0.1/32 trust / host all 192.168.0.100/24 trust 等)。这对我来说很有意义,因为日志文件说 postgres 不支持本地连接并且也指向该行。但是,我的任何更改都没有任何效果。每次更改后我都尝试重新启动计算机,但没有任何区别。

当我搜索 pg_hba.conf 文件通常看起来的示例时,这些示例看起来与我的文件略有不同。我注意到在 PostgreSQL 程序文件中,除了 pg_hba.conf 之外,还有一个“20130529-150444-old-pg_hba.conf”文件,它看起来更像我在网上找到的示例。该文件在最后几行之前有几行 cmets:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#host    replication     postgres        127.0.0.1/32            md5
#host    replication     postgres        ::1/128                 md5

我希望这是原始的 pg_hba.conf 文件,如果我用旧文件的内容替换新文件,postgres 将再次开始工作。没有这样的运气。我一直希望在 pg_log 中记录更多的错误文件,以查看之前所说的错误是否已经消失或更改为其他内容,但没有记录更多文件。

我这几天一直在网上进行故障排除,但没有发现任何问题。很抱歉有这么长的问题,但我想彻底并包括所有相关信息。如果有人能阐明这个问题或提供建议,我将不胜感激。

【问题讨论】:

    标签: service installation database-connection windows-7-x64 postgresql-9.2


    【解决方案1】:

    Windows 机器不支持本地条目。见E.20.3.1.3. Authentication

    在不支持的平台上拒绝 pg_hba.conf 中的本地行 Unix-socket 连接 (Magnus Hagander)

    以前,这些行会被默默地忽略,这可能会令人惊讶。 这使得行为更像其他不受支持的情况。

    从以下位置更改您的配置:

    local  all    all     trust
    

    到:

    host   all    all   127.0.0.1/32  trust
    host   all    all   ::1/128       trust
    

    更多信息,请咨询19.1. The pg_hba.conf File

    【讨论】:

      【解决方案2】:

      在 Windows 7 机器上安装 Postgresql 8.3 版后,我遇到了这个问题。 最初它工作正常,但突然停止(可能在某些 Windows 更新之后)。 许多试探性的改变了权限,但它并没有让它发挥作用。 几个月后,我在一个空的文件中发现了问题,同时它应该有一些数据。 验证此路径:C:\Program Files (x86)\Postgresql\8.3\data\(其中 8.3 必须替换为您的版本号)。 检查文件 Postmaster.pid 是否为空(使用写字板或记事本打开)。 如果为空,请将其重命名为 _Postmaster.pid(或其他名称)。 转到开始菜单并在命令框中键入 services.msc 按回车 找到 Postgresql 数据库条目 双击它 点击开始按钮 如果服务启动,将创建一个新的 Postmaster.pid(带有一些数据) 您可以在上面指示的路径中查看它。

      很好的提示来自分析事件查看器: 打开 Windows 资源管理器,选择“计算机”,右键单击“管理”,选择“事件查看器”,等待“管理事件摘要”加载,打开“错误”节点,在“源”列中找到“PostgreSQL”条目并双击它。 Postmaster.pid 文件中有提示信息是虚假数据。

      我希望这些信息对您有所帮助。 干杯! 编。

      【讨论】:

      • 我有不同的问题,但 +1 事件查看器提示!
      【解决方案3】:

      问题是win7下这个postgres版本不能处理本地连接。我不得不在本地计算机上非常紧急地使用 pg,所以我不太关心安全性,所以这可能不是现场环境的最佳解决方案。但是我的本地电脑就足够了。

      我从 pg_hba.conf 中删除了所有其他未注释的行,只剩下以下一行:

      host    all             all             ::1/0                 trust
      

      之后我可以通过命令行连接。

      我不明白为什么手册没有更多地说明这个问题。我很确定很多人对此有疑问。

      【讨论】:

      • 谢谢,这对我有用,尽管添加以下行包括我的本地 IP(从本地 VM 连接)起到了作用:host all all 192.168.1.49/32 md5
      • 这是唯一对我有用的解决方案。谢谢!
      • 在我尝试启动 postgres 时,在 conf 文件中使用这个或任何 ipv4 变体会导致同样的错误。
      【解决方案4】:

      我也遇到了同样的问题。对我有用的是:

      1. 打开 postgresql.conf 文件(通常位于 C:\Program Files\PostgreSQL\9.4\data);
      2. 评论第147行(shared_preload_libraries = '$libdir/plugins/plugin_debugger.dll'

      【讨论】:

        【解决方案5】:

        在这种情况下,最好的办法是分析操作系统日志。对于 Windows,请检查“事件查看器”->“应用程序”。 这种错误可能由于各种原因而发生。就我而言,postgres 已经在运行。我在 Windows 日志中找到了该信息。

        【讨论】:

          【解决方案6】:

          所以,快速免责声明,我现在在 Linux 上运行 PostgreSQL。但是,几年前,我确实在 Windows 上运行过它。我似乎记得这个问题。我认为线索就在这一行:

          2013-05-29 15:07:00 MDT LOG:  local connections are not supported by this build
          

          本地连接是 Unix 的东西。您正在使用窗户。所以“这个版本不支持”。尝试将本地更改为 localhost 并重新启动。这是 Postgres 邮件列表上发布的类似问题的 enter link description here

          【讨论】:

            【解决方案7】:

            “本地计算机上的服务启动然后停止,如果没有被其他服务或程序使用,某些服务会自动停止。”

            现在我将解释如何解决本地计算机上的服务启动然后停止,如果某些服务没有被其他服务或程序使用,则会自动停止。

            解决这个问题我们有两种方法

            第一道

            开始 --> 运行 --> 输入 Services.msc 并单击 Enter 按钮现在您将获得计算机中的所有服务,然后选择您的服务并右键单击该服务并转到属性

            然后打开选择本地系统帐户中的选择登录选项卡,然后单击确定,您的问题将解决

            【讨论】:

            • 非常感谢,伙计,这拯救了我的一天!深入一点,至少在我的情况下,这与文件夹权限有关。在原始的“数据”文件夹中,NETWORK SERVICE 具有完全控制权限,而通过 Windows 资源管理器或 pg_basebackup 创建的文件夹具有非常不同(实际上很奇怪)的一组权限。这是在 Windows Server 2012 机器上。
            【解决方案8】:

            我在 postgresql.conf 中犯了一个错误。我已经完成了

            max_prepared_transactions = 16*max_connections  # zero disables the feature
            

            在这个文件之前的位置,

            max_connections=100
            

            这是无法做到的,以下是可行的:

            max_prepared_transactions = 1600    # zero disables the feature
            

            【讨论】:

              猜你喜欢
              • 2016-05-31
              • 2015-08-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-06-19
              • 1970-01-01
              • 2019-03-28
              相关资源
              最近更新 更多