我输入了psql
,我明白了:
psql: 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"?
我使用sudo netstat -nlp | grep 5432
来查看状态,但没有显示任何内容。
我在网上搜索,有人告诉我修改pg_hba.conf
,但我不能locate
这个文件。我也尝试了这个命令sudo ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432
。它无法运作。
答案 0 :(得分:23)
该错误指出psql实用程序无法找到连接到数据库服务器的套接字。要么您没有在后台运行数据库服务,要么套接字位于其他地方,或者pg_hba.conf
可能需要修复。
该命令可能因操作系统而异。但是在大多数* ix系统上,以下方法都可行,它将在所有正在运行的进程中搜索postgres
ps -ef | grep postgres
在我的系统上,mac osx,这会吐出
501 408 1 0 2Jul15 ?? 0:21.63 /usr/local/opt/postgresql/bin/postgres -D /usr/local/var/postgres -r /usr/local/var/postgres/server.log
最后一列显示用于启动服务器的命令和选项。
您可以使用以下命令查看可用于启动postgres服务器的所有选项。
man postgres
从那里,您可以看到选项-D
和-r
分别是datadir
& logfilename
。
使用find
搜索套接字的位置,该位置应位于/tmp
sudo find /tmp/ -name .s.PGSQL.5432
如果postgres正在运行并接受套接字连接,则上面应该告诉您套接字的位置。在我的机器上,原来是:
/tmp/.s.PGSQL.5432
然后,尝试使用此文件的位置显式连接psql,例如
psql -h /tmp/ dbname
如果找不到套接字,但看到该服务正在运行,请验证pg_hba.conf文件是否允许本地套接字。
浏览到datadir
,您应找到pg_hba.conf
文件。
默认情况下,在文件底部附近,您应看到以下行:
# "local" is for Unix domain socket connections only
local all all trust
如果您没有看到它,则可以修改该文件,然后重新启动postgres服务。
答案 1 :(得分:9)
如果启动postgres服务时没有错误,请按照以下步骤操作
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
最有可能的情况是你的情况和postgres服务
#format is pg_ctlcluster <version> <cluster> <action>
sudo pg_ctlcluster 9.6 main start
#restart postgres
sudo service postgres restart
如果此过程未成功,则会抛出错误。
我的错误是(您可以在/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
答案 2 :(得分:8)
我曾经遇到过类似的问题。通常我只是在tutorial之后重新安装PostgreSQL,并以丢失数据为代价解决问题。
我决定今天获得真正的解决方案。重启PostgreSQL在ubuntu上解决了它。 sudo /etc/init.d/postgresql restart
答案 3 :(得分:4)
解决了!虽然我不知道发生了什么,但我刚刚删除了所有内容并重新安装了它。这是我用来删除sudo apt-get --purge remove postgresql\*
和dpkg -l | grep postgres
的命令。后者是在不清理的情况下找到所有数据包。
答案 4 :(得分:1)
在我的情况下,以下内容在遇到错误后用于启动 postgres
sudo service postgresql start
sudo su - postgres
psql
答案 5 :(得分:1)
我在Devuan ascii上也遇到了同样的问题(也许也是Debian?)。配置文件/etc/postgresql/9.6/main/postgresql.conf
包含指令unix_socket_directories
,该指令默认情况下指向/var/run/postgresql
。将其更改为/tmp
(大多数客户默认情况下使用的外观)已为我修复。
答案 6 :(得分:0)
我相信我在卸载 PostgreSQL 11 和 12 后陷入了这个问题,而已经在 Ubuntu 21 上安装了 13。我刚刚通过 sudo nano /etc/postgresql/13/main/postgresql.conf
解决了这个问题,并发现 port = 5433
(不知道为什么)。所以我改变了port = 5432
。然后问题解决了。
答案 7 :(得分:0)
如果您使用的是用于 linux 和 Ruby on Rails 的 windows 子系统,请使用此命令检查您的 postgres 正在哪个端口上运行
sudo nano /etc/postgresql/12/main/postgresql.conf
如果它在端口 5433 则转到 database.yml 文件并在其中添加端口:5433
然后运行命令 sudo service postgresql start
我已经像这样解决了我的问题
答案 8 :(得分:0)
在我的例子中,我遇到了这个错误,def do_POST(self):
form = cgi.FieldStorage( fp=self.rfile, headers=self.headers, environ={'REQUEST_METHOD':'POST', 'CONTENT_TYPE':self.headers['Content-Type'] })
post_data = {}
for field in form:
if field != 'file':
post_data[field] = form.getvalue(field)
# print(post_data)
try:
fileitem = form['file']
if fileitem.filename:
fn = os.path.basename(fileitem.filename)
open('./tmp/' + fn, 'wb').write(fileitem.file.read())
data_files = {'file' : open('./tmp/' + fn, 'rb')}
# print(data_files)
r = requests.post(_POST_URL, data = post_data, files = data_files)
except:
r = requests.post(_POST_URL, data = post_data)
res = r.text
try:
data_files = None
os.remove('./tmp/' + fn)
except:
pass
self._set_headers()
self.wfile.write(res.encode('utf-8'))
(注意,它正在寻找的文件中的一个数字,/var/run/postgresql/.s.PGSQL.5433
)存在。尝试了本页顶部的说明,但没有任何效果。
原来在 .s.PGSQL.5432
中有一个 PostGreSQL 12 配置文件的旧目录,我删除了它,解决了这个问题。
答案 9 :(得分:0)
就我而言,我看到了此错误,而postgres却未运行。
问题是安装无法创建所需的集群。
解决方案是创建文件夹/etc/postgres/{postgresql-version}/main
,然后使用以下命令创建集群:
pg_createcluster {postgresql-version} main
之后,只要重新启动postgresql服务,一切都应该正常工作。
答案 10 :(得分:0)
在Ubuntu 18.04上使用PostgreSQL时,我遇到了这个问题。
我检查了PostgreSQL
的状态,发现使用以下命令运行得很好:
sudo systemctl status postgresql
我还尝试使用以下方法重新启动计算机上的PotgreSQL
服务器:
sudo systemctl restart postgresql
但问题仍然存在:
psql: 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"?
在Noushad' answer之后,我执行了以下操作:
列出设备上运行的所有Postgres集群:
pg_lsclusters
这给了我红色的输出,表明它们全部没电了,状态也显示了下降:
Ver Cluster Port Status Owner Data directory Log file
10 main 5432 down postgres /var/lib/postgresql/10/main /var/log/postgresql/postgresql-10-main.log
11 main 5433 down postgres /var/lib/postgresql/11/main /var/log/postgresql/postgresql-11-main.log
12 main 5434 down postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main.log
为其中一个服务器群集重新启动pg_ctlcluster。对我来说,我重新启动了 PG 10 :
sudo pg_ctlcluster 10 main start
但是它引发了以下错误,并且当我尝试重新启动其他PG群集时发生了相同的错误:
Job for postgresql@10-main.service failed because the service did not take the steps required by its unit configuration.
See "systemctl status postgresql@10-main.service" and "journalctl -xe" for details.
检查日志中是否有错误,在这种情况下,我的是 PG 10 :
sudo nano /var/log/postgresql/postgresql-10-main.log
我看到了以下错误:
2020-09-29 02:27:06.445 WAT [25041] FATAL: data directory "/var/lib/postgresql/10/main" has group or world access
2020-09-29 02:27:06.445 WAT [25041] DETAIL: Permissions should be u=rwx (0700).
pg_ctl: could not start server
Examine the log output.
这是因为我更改了PostgreSQL数据目录的文件权限。
我通过运行以下命令修复了它。我在计算机上为3个PG集群运行了命令:
sudo chmod -R 0700 /var/lib/postgresql/10/main
sudo chmod -R 0700 /var/lib/postgresql/11/main
sudo chmod -R 0700 /var/lib/postgresql/12/main
此后,我重新启动了每个PG集群:
sudo pg_ctlcluster 10 main start
sudo pg_ctlcluster 11 main start
sudo pg_ctlcluster 12 main start
最后,我再次检查了群集的运行状况:
pg_lsclusters
这次,一切恢复正常,状态显示为在线:
Ver Cluster Port Status Owner Data directory Log file
10 main 5432 online postgres /var/lib/postgresql/10/main /var/log/postgresql/postgresql-10-main.log
11 main 5433 online postgres /var/lib/postgresql/11/main /var/log/postgresql/postgresql-11-main.log
12 main 5434 online postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main.log
仅此而已。
我希望这会有所帮助
答案 11 :(得分:0)
就我而言,服务正在运行,但是群集已关闭,而psql无法启动。我的配置文件看上去很完美,但是它不断抛出配置错误,并且似乎忽略了我所做的更改。
事实证明,每当您使用ALTER SYSTEM SET ...
语法时,PostgreSQL就会写入一个名为postgresql.auto.conf
的文件。除了常规的postgresql.conf
和pg_hba.conf
文件之外,该文件还被读取。在我的Ubuntu(18.04)发行版中,它们位于不同的文件夹中(!):
-pg_hba.conf
和postgresql.conf
都在/etc/postgresql/12/main
中
-自动生成的文件为/var/lib/postgresql/12/main/postgresql.auto.conf
我曾尝试使用ALTER SYSTEM SET listen_addresses = <my-ip>
来更改配置,但是犯了一个错误,这造成了我找不到的损坏的“鬼”配置。一旦我删除了postgresql.auto.conf
中的违规行,它就解决了所有问题。
答案 12 :(得分:0)
我可以通过为datadir设置正确的权限来解决此问题。 应该是
chmod 700 /var/lib/postgresql/10/main
chown postgres.postgres /var/lib/postgresql/10/main
答案 13 :(得分:0)
使用以下方法验证Postgres是否正在运行:
ps -ef | grep postgres
root@959dca34cc6d:/var/lib/edb# ps -ef|grep postgres
enterpr+ 476 1 0 06:38 ? 00:00:00 /usr/lib/edb-as/11/bin/edb-postgres -D /var/lib/edb-as/11/main2 -c config_file=/etc/edb-as/11/main2/postgresql.conf
检查数据目录和postgresql.conf
。
在我的情况下,-D
中的数据目录与postgresql.conf
中的数据目录不同
所以我更改了postgresql.conf
中的数据目录,并且它起作用了。
答案 14 :(得分:0)
如果您的服务不安全,则可能是原因
vi /etc/postgresql/11/main/pg_hba.conf
host all all localhost trust md5
您可以删除 trust 关键字
保存pg_hba.conf
答案 15 :(得分:0)
重新启动实例对我有用。另外,如在其他一些文章中提到的,psql -h'/ tmp'在重启之前也可以正常工作。但是重启后psql直接开始工作。 因此,我想的可能是重启后重置的一些文件所有权问题。
答案 16 :(得分:0)
我有类似的问题,问题出在配置文件pg_hba.conf中。我之前进行了一些更改,这导致服务器在尝试启动时出错。注释掉多余的内容可以解决问题。
答案 17 :(得分:0)
我有同样的问题。 似乎没有集群时就没有套接字。
在安装过程中,默认的群集创建失败,因为未设置默认语言环境。
答案 18 :(得分:0)
我通过检查文件系统解决了此问题 磁盘已完全装满,因此数据库无法启动
Unix域套接字"/var/run/postgresql/.s.PGSQL.5432" ?
上的连接
我尝试了一系列的故障排除,直到检查磁盘使用情况并发现磁盘已满,使用率达到100%,
df -h
cd /var/log/odoo/
cat /dev/null > odoo-server.log
reboot
答案 19 :(得分:0)
我遇到了同样的问题,
sudo su - postgres
initdb --locale en_US.UTF-8 -D /var/lib/postgres/data
exit
sudo systemctl start postgresql
sudo systemctl status postgresql
这对我有用。
答案 20 :(得分:0)
该错误表示Postgres服务器未运行。尝试启动它:
sudo systemctl start postgresql
确保服务器在启动时启动:
sudo systemctl enable postgresql
答案 21 :(得分:0)
它可能导致任何事情,例如,我的问题是由于配置文件上的拼写错误引起的。 有人说是由证书文件引起的,还有一些人说是由不匹配的本地用户引起的。
如果找不到有关此问题的任何解决方案,请删除postgres并重新安装。这是最佳解决方案。
答案 22 :(得分:0)
在postgresql的全新安装过程中。默认情况下,用户名和密码被指定为&#34; postgres&#34;。此RDBMS提供的功能是为新用户添加角色并创建数据库。如果您遇到这样的错误:
以默认用户名登录:
root @ kalilinux:〜#sudo -i -u postgres
ype psql for interactive prompt
postgres @ kalilinux:〜$ psql退出提示使用
\ q
创建新用户角色
postgres @ kalilinux:〜$ createuser --interactive现在您处于交互式psql shell中。请享用。不要忘记从您的用户名登录并键入psql for shell。
答案 23 :(得分:0)
所以对于我和我的伙伴们在Node.js应用程序上工作(使用Postgres和Sequelize),我们不得不
brew services start postgresql
(我们其中一人失踪了,我们其中一人没有,但我们得到的错误信息与上面列出的相同)
createdb <name of database in config.json file>
****(利用Homebrew开始postgres)
node_modules/.bin/sequelize db:migrate
npm start
extern const int data[];
extern const int DATA_SIZE;
//other functions, not relevant
int get_second_item(void);
答案 24 :(得分:0)
我对此错误消息的问题是对密钥和pem证书的错误权限,我已经操作过。对我帮助很大的是: /var/log/postgresql/postgresql-9.5-main.log所有错误都在哪里。
答案 25 :(得分:0)
关于debian的快速说明:
/etc/postgresql/10/main/postgresql.conf
/etc/postgresql/10/main/pg_hba.conf
并使用host all all 0/0 md5
postgres=# CREATE ROLE remoteuser LOGIN WITH PASSWORD 'foo'
sudo /etc/init.d/postgresql restart
更改生效
使用psql --host=ipofserver --port=5432 --username=remoteuser --password --dbname=mydb
这是如何从psql客户端远程访问服务器上的postgres数据库
答案 26 :(得分:0)
只想添加一小段内容:如果您的实例在套接字上抱怨,您还可以检查unix_socket_directories
文件/data/postgresql.conf
,该文件可能已设置为/tmp
,例如,如果您使用过第三方发行版。您可以将其更改为/var/run/postgresql
并重新启动该服务。这可能还需要在postgresql
创建/var/run
目录,在subsys/postgresql-9.6
创建/var/lock
,如果这些目录尚不存在(使用postgresql 9.6为我工作)。