postgresql datababse出错:服务器是否在本地运行并接受Unix域套接字“/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:
注意:我有数据库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
如果实际的套接字路径是/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服务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的评论中找到 )
$ sudo chown root.postgres /var/pgsql_socket
$ sudo chmod g+wx /var/pgsql_socket
6) sudo service postgresql start
sudo -i -u postgres
psql
这最终对我有用
我解决了它。 我刚刚创建了一个软链接:
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
过时的锁定文件/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
解:
试试这个
export LC_ALL="en_US.UTF-8"
还有这个。 ( 9.3是我目前的PostgreSQL版本。写下你的版本!)
sudo pg_createcluster 9.3 main --start
当我遇到这个错误时,我的postgres服务器正在一个不同的端口上进行实际监听(5433)。 要解决此问题,请在database.yml中添加一行以指示rails使用相同的行:
port: 5433
运行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 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/
它发生在我身上,事实certificate我错误地从“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
这意味着你的Postgres服务器没有运行。
从终端检查Postgres服务状态
sudo service postgresql status
启用Postgres服务,如果没有启动
sudo service postgresql start
要么
sudo service postgresql restart
现在你的命令应该工作,如果Postgres服务成功启动。
- 在Postgres的一张巨大的桌子上,Kaminari的COUNT(*)很慢
- 在postgresql …查询中加入两个单独的查询…(可能或不可能)
- Rails 4 / postgresql index – 我应该使用一个datetime列作为索引filter,它可以有无限数量的值吗?
- 通过两个“has_many”子表的总和来排序查询?
- RoR:不能在postgres中更改_column,在MySQL中可以很好(MySQL用于开发,Postgres在Heroku上)
- 用于生产的Rails性能调优?
- ActiveRecord :: StatementInvalid:PG :: ReadOnlySqlTransaction: – 即使在取消关注后,Heroku数据库仍然只读
- 用于rails应用程序的PG :: SyntaxError
- 如何通过Rails 3中的时间片(总和,平均值,最小值,最大值等)获取聚合数据