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

ady*_*uri 12 ruby sockets postgresql ruby-on-rails

当我运行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"?
Run Code Online (Sandbox Code Playgroud)

我尝试时在浏览器中收到错误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'] %>
Run Code Online (Sandbox Code Playgroud)

注意:我有数据库books_development; books_test ; 当我尝试时,postresql运行没有问题sudo /etc/init.d/postgresql start

我跑了:

create database books_development;
create database books_test; 
Run Code Online (Sandbox Code Playgroud)

在psql控制台中.它说成功完成了

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

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

有任何想法吗?

Dan*_*ité 13

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

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

/tmp如问题所建议的那样从该目录进行软链接工作,除了链接在每次重启时都会丢失,因为通常/tmp在重启时清空.

更好的选择是添加作为条目database.yml:

  • 无论host: /tmp是否真正插座路径/tmp(自编服务器,客户端打包)

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

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

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


Sum*_*ker 8

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

从终端检查Postgres服务状态

sudo service postgresql status
Run Code Online (Sandbox Code Playgroud)

启用Postgres服务,如果未启动

sudo service postgresql start
Run Code Online (Sandbox Code Playgroud)

或者

sudo service postgresql restart
Run Code Online (Sandbox Code Playgroud)

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


des*_*ipt 5

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

对我来说简短的回答是:我的安装创建了一个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 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

这最终对我有用