首先道歉,如果'端口文件不是正确的术语',但Postgres不是我的优点之一。我试图找出这个端口文件应该是什么样子,因为它似乎从我的系统中消失了。请继续阅读以获得解释和我的(很可能不正确的)思路。
我正在使用带有rails项目的Postgres(通过postgres gem)并且它一直工作正常,直到昨天它在我更新一些HTML时停止工作。我用通常的
重新启动了我的rails服务器rails s
只得到:
/Users/pedr/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.2.1/lib/active_record/connection_adapters/postgresql_adapter.rb:1161:in `initialize':无法连接到服务器:没有这样的文件或目录 (PG ::错误)\ n \ n
服务器是在本地运行还是接受连接 在Unix域套接字“/tmp/.s.PGSQL.5432”?
我正在使用Lunchy开始和停止postgres,似乎没有问题。
但是我使用了以下终端命令来检查Postgres正在侦听的端口:
sudo lsof -p 286| awk '$5 == "unix" && $NF ~ /\// { print $NF }'
并没有列出任何内容。所以我认为端口已被删除。
我对端口的理解有限,这使我在以下位置查找端口文件:
/tmp/.s.PGSQL.5432
有一个名为:
的文件.s.PGSQL.5432.lock
据我了解,此文件可防止编辑丢失的端口文件。
我尝试使用Time machine找到这个丢失的文件,但似乎Time Machine没有在/ tmp目录中存储任何内容。
那么我该如何重新创建这个文件呢?它应该是什么样的?
[UPDATE]
回应@wildplasser的建议:
使用以下方法测试postgres是否正在运行:
ps aux | grep postgres
得到我:
633 0.0 0.0 2442564 392 ?? Ss 9:23 am 0:00.09 postgres:stats collector 过程632 0.0 0.0 2446480 1516 ?? 9:23 am 0:00.09 postgres: autovacuum发射器过程631 0.0 0.0 2446348 520 ?? Ss 9:23 am 0:00.32 postgres:wal writer process 630 0.0 0.0 2446348 580 ?? SS 9:23 am 0:00.48 postgres:writer process 520 0.0 0.1 2446348 3640 ??小号 上午9:22 0:00.33 / usr / local / bin / postgres -D / usr / local / var / postgres -r /usr/local/var/postgres/server.log myusername 1187 0.0 0.0 2434892 540 s000 S + 10:35 am 0:00.00 grep postgres
测试Unix域套接字是否正在运行:
ls -l / tmp / | grep PGSQL | grep -v grep
什么都没有。
postgres是否正在监听网络协议localhost?
psql -H localhost
得到我:
psql:致命:数据库“localhost”不存在
postgres是否在Unix域套接字上侦听?
psql -H /tmp/.s.PGSQL.5432
得到我:
psql:致命:数据库“/tmp/.s.PGSQL.5432”不存在
答案 0 :(得分:2)
“端口文件”是PostgreSQL正在侦听的unix套接字。它将在启动时创建它。停止PostgreSQL服务器,如果它仍然存在,则删除.lock文件,重启PG并查看你的套接字是否回来。
我很困惑,实际上它怎么可能不存在。我以前从未听说过这种情况。
答案 1 :(得分:1)
似乎.s.PGSQL.5432.lock阻止编辑套接字文件.s.PGSQL.5432在它应该被删除时保留。这意味着当postgres尝试启动时,它无法执行,因为锁定文件阻止它创建一个新套接字,即使没有套接字来保护锁文件。
删除.s.PGSQL.5432.lock并重新启动postgres,然后启动(Rails)服务器通常工作正常。
答案 2 :(得分:0)
我发现这个答案很有帮助
Repairing Postgresql after upgrading to OSX 10.7 Lion
并通过这个来解决我的错误..
export PATH=/usr/local/bin:$PATH
在我的.bash_profile
中