postgresql datababse 错误:服务器是不是在本地运行并接受 Unix 域套接字“/var/run/postgresql/.s.PGSQL.5432”上的连接?

Posted

技术标签:

【中文标题】postgresql datababse 错误:服务器是不是在本地运行并接受 Unix 域套接字“/var/run/postgresql/.s.PGSQL.5432”上的连接?【英文标题】:error with postgresql datababse : Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?postgresql datababse 错误:服务器是否在本地运行并接受 Unix 域套接字“/var/run/postgresql/.s.PGSQL.5432”上的连接? 【发布时间】:2015-05-09 15:43:53 【问题描述】:

当我运行rake db:migrate 或运行rails s 命令时,我得到同样的错误:

Error : could not connect to server: 
No such file or directory Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

当我尝试rails s 时,我在浏览器中遇到错误。

这是我的数据库.yml

default: &default
adapter: postgresql
encoding: unicode

pool: 5

development:
<<: *default
database: books_development




test:
<<: *default
database: books_test



production:
<<: *default
database: books_production
username: abd
password: <%= ENV['BOOKS_DATABASE_PASSWORD'] %>

注意:我有数据库books_developmentbooks_test ;当我尝试sudo /etc/init.d/postgresql start

时,postresql 运行没有问题

我确实跑了:

create database books_development;
create database books_test; 

在 psql 控制台中。它说它已经成功完成了

我尝试了很多解决方案,昨天我一直在寻找解决方案,但相关问题中的解决方案没有解决我的错误。

我有 postgresql-9.4(最新)和 xubuntu 14.04

有什么想法吗?

【问题讨论】:

检查这个线程 - ubuntuforums.org/showthread.php?t=869080 - 也许你会发现任何提示...... 我告诉过我昨天花了整个时间寻找解决方案,当然我尝试了那个线程;它对我不起作用:( 谢谢我解决了。我刚刚使用sudo ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432 创建了一个软链接,然后从local all postgres peer 编辑了/etc/postgresql/9.4/main/pg_hba.conf(如果你有另一个版本的postgresql,你必须在路径中更改9.4)到:local all postgres md5 如果您根据您的评论创建了一个答案并将其标记为正确的答案,这可能是值得的 - 仅供将来参考。最好的! 在我的 /etc 中没有 postgresql 文件夹...知道该怎么做吗? 【参考方案1】:

为 Debian 或 Debian 衍生产品(例如 Ubuntu)打包的 PostgreSQL 的约定是使用 /var/run/postgresql 作为 Unix 域套接字的目录。另一方面,自编译 postgres 客户端库的约定是使用/tmp,除非另有自配置。

因此,两者之间不匹配的通常根本原因是自编译的客户端内容与预编译的服务器端包的混合(即使客户端和服务器安装在同一台机器上,客户端和服务器-side 仍然不同,可能不同步)。

按照提问者的建议,从/tmp 到此目录的软链接是可行的,只是每次重新启动时链接都会丢失,因为通常/tmp 在重新启动时会被清空。

更好的选择是在database.yml 中添加一个条目:

如果真正的套接字路径是/tmp,则为host: /tmp(自编译服务器,打包客户端)

或者host: /var/run/postgresql,如果是真正的socket路径/var/run/postgresql/(打包服务器,自编译客户端)。

当主机字段中的值以斜杠字符开头时,postgres 库知道它是本地套接字目录的位置,而不是主机名。目录.s.PGSQL.portnumber里面的文件名是生成的,不能指定,只能指定目录。

另一种可能性是配置自编译软件包尽可能接近 Debian,覆盖默认设置。

【讨论】:

谢谢,在database.yml 中添加host: /tmp 确实很好用:) ;但我害怕从部署到 Heroku 。好吗?部署到 heroku 后,该应用会正常工作吗? 是的,您可能需要为 heroku 改编 database.yml,但没什么好害怕的。只需阅读并遵循他们的文档:devcenter.heroku.com/articles/… 谢谢,在 database.yml 中添加 host: /tmp 用于开发确实适用于 Rails 6、Postgres 12、macOS 10 Mojave(还没有去 Catalina;等待 2 周没有修复) .从 Postgres 10 升级到 12 时遇到了这个问题(略有不同:`Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"')。但是现在我在升级时遇到了另一个问题;但那是另一个帖子。【参考方案2】:

在 Ubuntu 14.04 的 postgres 用户中输入 psql 时,我遇到了相同的 Is the server running locally and accepting connections on Unix domain socket “/var/run/postgresql/.s.PGSQL.5432”? 错误。我找不到现有的可行解决方案。

我的简短回答是:我的安装创建了一个 var/pgsql_socket 目录,但没有配置文件知道它。

1) 找到postgres.conf 文件(我在etc/postgresql/9.6/main 中) 2) 改为listen_addresses = '*' 3) 添加另一个unix socket目录unix_socket_directories = '/var/run/postgresql, /var/pgsql_socket' # comma-separated list of directories 4)此时 sudo service postgresql start 尝试启动但无权创建锁文件。 * The PostgreSQL server failed to start. Please check the log output: 2016-10-05 17:14:55 CEST [28472-1] FATAL: could not create lock file "/var/pgsql_socket/.s.PGSQL.5432.lock": Permission denied 2016-10-05 17:14:55 CEST [28472-2] LOG: database system is shut down 5) 更改权限(来自Mark Berry's comment here)$ sudo chown root.postgres /var/pgsql_socket$ sudo chmod g+wx /var/pgsql_socket 6) sudo service postgresql start sudo -i -u postgres psql

这终于对我有用了

【讨论】:

非常感谢!我在将 9.4 db 恢复到 9.6 安装时遇到问题,这解决了我的问题! 我正面临这个“chown: cannot access '/var/pgsql_socket': No such file or directory”【参考方案3】:

这意味着您的 Postgres 服务器没有运行。

从终端检查 Postgres 服务状态

sudo service postgresql status

启用 Postgres 服务,如果未启动

sudo service postgresql start

sudo service postgresql restart

如果 Postgres 服务已成功启动,现在您的命令应该可以运行了。

【讨论】:

【参考方案4】:

我解决了。我刚刚创建了一个软链接:

sudo ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432

然后编辑了

/etc/postgresql/9.4/main/pg_hba.conf

(如果你有其他版本的postgresql你必须在路径中更改9.4)

发件人:

local all postgres peer

收件人:

local all postgres md5

【讨论】:

我收到ln: failed to create symbolic link ‘/var/run/postgresql/.s.PGSQL.5432’: File exists 然后通过rm /var/run/postgresql/.s.PGSQL.5432删除它并重试:) @adyouri 嘿,我试过了,但它给了我错误 sudo ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432 错误低于 ln: failed访问“/var/run/postgresql/.s.PGSQL.5432”:权限被拒绝【参考方案5】:

解决方案:

试试这个

export LC_ALL="en_US.UTF-8"

还有这个。 (9.3 是我当前的 PostgreSQL 版本。写下你的版本!)

sudo pg_createcluster 9.3 main --start

【讨论】:

我收到消息“错误:集群配置已存在”,是什么原因?【参考方案6】:

过时的锁定文件/var/run/postgresql/.s.PGSQL.5432.lock 可能会导致完全相同的症状。这种情况的症状之一是psql 报告

psql:无法连接到服务器:没有这样的文件或目录 服务器是否在本地运行并接受 Unix 域套接字“/var/run/postgresql/.s.PGSQL.5432”上的连接?

即使netstat -lp --protocol=unix | grep postgres 报告的该路径明显存在可用的套接字

问题可以通过删除锁定文件并重新启动postgresql来解决。这绝对比清除和重新安装更具侵入性。

sudo rm /var/run/postgresql/.s.PGSQL.5432.lock
sudo service postgresql restart

【讨论】:

【参考方案7】:

在 Mac OS X 上,当我的计算机不正确关闭时(例如,由于电源故障),我通常会收到此错误。

我使用的解决方案非常简单,并且 100% 的时间都有效:

# Find the postgres config folder
cd /usr/local/var/postgres

# remove file
rm postmaster.pid

# restart postgres
brew services restart postgres

【讨论】:

【参考方案8】:

运行 pg_lsclusters 将列出您设备上运行的所有 postgres 集群 例如:

Ver Cluster Port Status Owner    Data directory               Log file
9.6 main    5432 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log

如果状态为关闭运行

#format is pg_ctlcluster <version> <cluster> <action>
sudo pg_ctlcluster 9.6 main start

如果这个过程不成功,它会抛出错误。 我的错误是(你可以在/var/log/postgresql/postgresql-9.6-main.log看到错误日志)

FATAL: could not access private key file "/etc/ssl/private/ssl-cert-snakeoil.key": Permission denied
Try adding `postgres` user to the group `ssl-cert`

确保postgres/var/lib/postgresql/version_no/main 的所有者 例如:sudo chown postgres -R /var/lib/postgresql/9.6/main/

这发生在我身上,结果我错误地从“ssl-cert”组中删除了 Postgres 用户。运行以下代码来修复用户组问题并修复权限

#set user to group back with
sudo gpasswd -a postgres ssl-cert

# Fixed ownership and mode
sudo chown root:ssl-cert  /etc/ssl/private/ssl-cert-snakeoil.key
sudo chmod 740 /etc/ssl/private/ssl-cert-snakeoil.key

# now postgresql starts! (and install command doesn't fail anymore)
sudo service postgres restart

【讨论】:

【参考方案9】:

当我遇到此错误时,我的 Postgres 服务器实际上正在侦听不同的端口 (5433) 而不是 5432。 为了解决这个问题,添加

port: 5433

到您的 database.yml 文件以指示 rails 使用相同的文件

【讨论】:

哇。同样在这里。简单的解决方案

以上是关于postgresql datababse 错误:服务器是不是在本地运行并接受 Unix 域套接字“/var/run/postgresql/.s.PGSQL.5432”上的连接?的主要内容,如果未能解决你的问题,请参考以下文章

Postgresql 9.2 错误与 group by 未出现在 postgresql 12 中

PostgreSQL 分组错误

PostgreSQL 安装 - 错误加载模块

postgresql 错误:由于用户请求而取消语句

postgresql“而不是”错误

尝试 PostgreSQL 主从 WAL 复制时出现“主 PostgreSQL 标识符与从属 PostgreSQL 标识符不匹配”错误