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

时间:2015-03-08 11:25:53

标签: ruby-on-rails ruby postgresql sockets

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

任何想法?

9 个答案:

答案 0 :(得分:12)

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

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

根据提问者的建议从/tmp到此目录的软链接工作,除了链接在每次重启时都会丢失,因为一般情况下/tmp会在重新启动时清空。

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

  • host: /tmp如果实际套接字路径为/tmp(自编译服务器,打包客户端)

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

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

另一种可能性是将自编译的软件包尽可能地与Debian配置,覆盖默认值。

答案 1 :(得分:5)

在Ubuntu 14.04中向postgres用户输入Is the server running locally and accepting connections on Unix domain socket “/var/run/postgresql/.s.PGSQL.5432”?时,我遇到了同样的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服务postgresql启动尝试启动但没有权限创建锁文件。
* 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

这最终对我有用

答案 2 :(得分:3)

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

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

答案 3 :(得分:2)

<强>解决方案:

试试这个

export LC_ALL="en_US.UTF-8"

这个。 ( 9.3 是我目前的PostgreSQL版本。编写你的版本!)

sudo pg_createcluster 9.3 main --start

答案 4 :(得分:2)

过时的锁定文件/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

答案 5 :(得分:1)

当我遇到这个错误时,我的postgres服务器正在一个不同的端口上进行实际监听(5433)。 要解决此问题,请在database.yml中添加一行以指示rails使用相同的行:

port: 5433

答案 6 :(得分:1)

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

它发生在我身上,事实证明我错误地删除了Postgres用户来自&#34; ssl-cert&#34;组。运行以下代码以修复用户组问题并修复权限

#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

答案 7 :(得分:0)

  

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

从终端检查 Postgres 服务状态

viewer.model.getBulkProperties(dbIds, ['Structural Material'],
   function(elements){
     let dbIds = [];
     let filterCategory = "Materials and Finishes";
     let filterValue = 'Concrete';

     for(let i=0; i<elements.length; i++) {
       const prop = elements[i].properties[0];
       const dbId = elements[i].dbId;
       if(prop.displayCategory === filterCategory && prop.displayValue.contains(filterValue)) {
         dbIds.push( dbId );
       }
     }
     console.log(dbIds);
   });

启用 Postgres 服务,如果尚未启动

sudo service postgresql status

OR

sudo service postgresql start

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

答案 8 :(得分:0)

在 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