繁体   English   中英

postgresql 数据库错误:服务器是否在本地运行并接受 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”?

当我运行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时,我在浏览器中收到错误消息。

这是我的database.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_development books_test 当我尝试sudo /etc/init.d/postgresql start时,postresql 运行没有问题

我确实运行了:

create database books_development;
create database books_test; 

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

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

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

有任何想法吗?

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

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

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

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

  • 任一host: /tmp如果真正的socket路径是/tmp (自编译服务器,打包客户端)

  • host: /var/run/postgresql如果真正的套接字路径/var/run/postgresql/ (打包服务器,自编译客户端)。

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

另一种可能性是将自编译软件包配置得尽可能接近 Debian,像它们一样覆盖默认值。

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

对我来说简短的回答是:我的安装创建了一个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 的评论中找到
$ sudo chown root.postgres /var/pgsql_socket
$ sudo chmod g+wx /var/pgsql_socket
6) sudo service postgresql start
sudo -i -u postgres
psql

这最终对我有用

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

从终端检查Postgres服务状态

sudo service postgresql status

启用Postgres服务,如果没有启动

sudo service postgresql start

或者

sudo service postgresql restart

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

我解决了它。 我刚刚使用以下方法创建了一个软链接:

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

解决方案:

尝试这个

export LC_ALL="en_US.UTF-8"

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

sudo pg_createcluster 9.3 main --start

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

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

即使netstat -lp --protocol=unix | grep postgres报告的那样,显然有一个具有此路径的套接字可用netstat -lp --protocol=unix | grep postgres

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

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

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

port: 5433

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

运行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

如果状态为 down run

#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

在 Mac OS XI 上,当我的计算机错误关闭(例如,由于电源故障)时,通常会出现此错误。

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

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

# remove file
rm postmaster.pid

# restart postgres
brew services restart postgres

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM