我在 Gentoo 上启动 Postgresql 时遇到问题。
$ /etc/init.d/postgresql-9.1 start
* Socket conflict.
* A server is already listening on:
* /var/run/postgresql/.s.PGSQL.5432
* HINT: Change PGPORT to listen on a different socket.
我删除了文件,/var/run/postgresql/.s.PGSQL.5432
服务启动并正常运行。我猜服务器关闭了,文件就留在那里了。我用 netstat 检查了是否有进程正在监听该端口,但没有。
我的问题是,我以后该如何避免这个问题?
答案1
当 postgres 关闭时(干净地),应该删除套接字。最可能的原因是,您的计算机不干净地重新启动(断电、重置按钮……),或者 postgres 崩溃,并且没有时间/机会删除套接字文件。
如果您完全关闭/重启,这种情况根本不会发生。如果 postgres 崩溃,那么您面临的问题比陈旧的套接字更大。如果经常发生硬重启,则很有可能出现数据丢失/损坏。
您可以在启动时从其中一个 init 脚本(取决于发行版)中删除套接字,或者编辑 postgres init 脚本以在启动之前删除套接字(如果您在一个 postgresd 已在运行时无意中运行它并删除它的套接字,则很危险)。
答案2
如果不是软件错误,你只需要确保在需要时正常停止 postgresql 服务器。这对于避免数据丢失也至关重要。