【问题标题】:Postgres just randomly stopped working (Rails, PGSQL.5432)Postgres 只是随机停止工作(Rails,PGSQL.5432)
【发布时间】:2012-06-06 16:46:47
【问题描述】:

我已经在同一个应用程序中使用同一个 Postgres 数据库一个月了,没有任何问题,在今天随机出现此错误之前,我没有更改数据库中的任何内容。但是,今天当我尝试“rails s”时,Postgres 随机开始抛出此错误(我在运行 createdb 或 createuser 时遇到相同类型的错误):

退出 /Users/Joe/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.2.2/lib/active_record/connection_adapters/postgresql_adapter.rb:1194:在“初始化”中:无法连接到服务器:否这样的文件或目录(PG::Error) 服务器是否在本地运行并接受 Unix域套接字“/tmp/.s.PGSQL.5432”上的连接?

真正奇怪的是,我的朋友昨天遇到了完全相同的错误(在同一个应用程序上工作),他通过运行http://nextmarvel.net/blog/2011/09/brew-install-postgresql-on-os-x-lion/ 的脚本解决了这个问题。运行脚本后,他卸载并重新安装了 PG gem 以使一切正常。但是,他运行的是 OS X Lion,而我运行的是 Snow Leopard,因此该脚本对我不起作用。

关于 (1) 为什么这会随机开始发生以及 (2) 如何解决它的任何想法?

【问题讨论】:

  • PostgreSQL 正在运行吗?您是否重新启动并忘记启动它?
  • 是的,它正在运行。我们通过运行 'lunchy start postgres' 命令进行验证,输出显示 PosgresSQL 正在运行。
  • 你能用psql连接它吗?
  • 是的,控制台显示我们的测试 psql 命令运行良好。
  • /tmp/s.PGSQL.5432 存在吗?它的权限是什么?

标签: ruby-on-rails postgresql


【解决方案1】:

我今天遇到了类似的问题,虽然在我的情况下 postgres(在 MacOS 10.8 上通过自制软件安装)没有运行,但我无法启动或重新启动它。似乎由于崩溃,僵尸阻塞了套接字,为了解决它,我做了以下操作

lsof -i :5432

这显示了进程阻塞的PID,我只是用它杀死了它

kill -9 PID

并且 postgres 重新启动正常。

HTH

【讨论】:

    【解决方案2】:
    • 可能删除了 /tmp/.s.PGSQL.5432 套接字 - 例如 /tmp/ 清洁服务。
    • 也许您可以使用:host => 'localhost' 作为PG::Connection.new() 的连接参数进行连接——这将避免为 Unix 套接字或文件权限问题定位正确路径的问题。
    • 如果您不想使用localhost(它可能比套接字慢一点),那么您可以以操作系统管理员的身份使用lsof | grep PGSQL 命令找到它的位置——例如/var/run/postgres/.s.PGSQL.5432——你会使用:host => '/var/run/postres/'

    【讨论】:

    • 汤姆,我知道这是旧答案,但我遇到了完全相同的问题,你能告诉我如何阻止链接 /tmp/.s.PGSQL.5432 在系统重启后停止被删除?现在我必须通过“sudo ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432”手动创建链接
    • iCyborg:你不能阻止 /tmp/ 清理,因为它可能是一个 tmpfs(内存中的目录)。您可以将ln -s ... 添加到/etc/rc.d/rc.local 启动脚本中。
    【解决方案3】:

    我在启动 rails 时遇到了同样的错误(没有这样的文件或目录)。 使用 PostgreSQL one-click installer 重新安装 postgres 并重新启动解决了该问题。

    在我的情况下,这发生在安装 Mountain Lion 之后,它可能清理了 tmp 目录。

    【讨论】:

      【解决方案4】:

      我遇到了类似的错误,发现这个答案很有帮助

      Repairing Postgresql after upgrading to OSX 10.7 Lion

      我通过添加解决了

      export PATH=/usr/local/bin:$PATH
      

      到我的 .bash_profile

      【讨论】:

        【解决方案5】:

        我遇到了同样的问题,当我检查 server.log 时,我发现它无法找到 var/postgres 文件夹和一些 conf 文件。

        我这样做了,但是在那种情况下我丢失了我的数据

        brew uninstall postgres
        brew install postgres
        initdb `brew --prefix`/var/postgres/data -E utf8``
        

        这对我来说效果很好,一切都恢复正常了。

        【讨论】:

          猜你喜欢
          • 2014-04-11
          • 2014-09-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-14
          相关资源
          最近更新 更多