PostgreSQL:为什么 psql 无法连接到服务器?
PostgreSQL: Why psql can't connect to server?
我输入了 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
。不行。
解决了!虽然我不知道发生了什么,但我只是删除了所有东西并重新安装了它。这是我用来删除它的命令 sudo apt-get --purge remove postgresql\*
和 dpkg -l | grep postgres
。后面一个就是把所有的包都找出来,万一不干净呢
错误表明 psql 实用程序找不到连接到数据库服务器的套接字。要么后台没有数据库服务 运行,要么套接字位于其他地方,要么 pg_hba.conf
需要修复。
第 1 步:验证数据库是 运行
该命令可能因您的操作系统而异。但在大多数 *ix 系统上,以下内容会起作用,它将在所有 运行 个进程
中搜索 postgres
ps -ef | grep postgres
在我的系统上,macosx,这会吐出
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
。
第二步:如果postgres服务是运行
使用find
搜索socket的位置,应该在/tmp
中某处
sudo find /tmp/ -name .s.PGSQL.5432
如果 postgres 是 运行 并且接受套接字连接,上面应该告诉你套接字的位置。在我的 machine 上,结果是:
/tmp/.s.PGSQL.5432
然后,尝试明确使用此文件的位置通过 psql 进行连接,例如。
psql -h /tmp/ dbname
第 3 步:如果服务 运行 但您没有看到套接字
如果找不到套接字,但看到服务是 运行,请验证 pg_hba.conf 文件是否允许本地套接字。
浏览到 datadir
,您应该会找到 pg_hba.conf
文件。
默认情况下,您应该在文件底部附近看到以下几行:
# "local" is for Unix domain socket connections only
local all all trust
如果看不到,可以修改文件,重启postgres服务。
只是想做一个小补充:如果你的实例在套接字上抱怨,你也可以检查 /data/postgresql.conf
文件中的 unix_socket_directories
,它可能已设置为 /tmp
,例如,如果您使用了第 3 方发行版。您可以将其更改为 /var/run/postgresql
并重新启动服务。这可能还需要在 /var/run
处创建一个 postgresql
目录,在 /var/lock
处创建一个 subsys/postgresql-9.6
目录,如果这些目录尚不存在的话(在 postgresql 9.6 中为我工作)。
从 psql 客户端远程访问服务器上的 postgres 数据库的 debian 快速指南:(更改的配置在文件中记录):
- 用 listen_address *
编辑 /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
从客户端登录
- 交互式询问密码,在本例中为 foo
我遇到过几次类似的问题。通常我只是在 tutorial 之后重新安装 PostgreSQL,这以丢失数据为代价解决了问题。
我下定决心今天要真正解决问题。重新启动 PostgreSQL 在 ubuntu 解决了它。 sudo /etc/init.d/postgresql restart
我对此错误消息的问题是对我操纵的密钥和 pem 证书的错误权限。对我帮助很大的是:
/var/log/postgresql/postgresql-9.5-main.log 所有错误都在哪里。
所以对于我和我的朋友们来说,在开发 Node.js 应用程序(使用 Postgres 和 Sequelize)时,我们必须
brew install postgresql
(我们中的一个人缺少 postgres,我们中的一个人没有,但我们收到与上面列出的相同的错误消息)
brew services start postgresql
**** (使用 Homebrew 启动 postgres)
createdb <name of database in config.json file>
node_modules/.bin/sequelize db:migrate
npm start
在全新安装 postgresql 期间。默认情况下,用户名和密码分配为 "postgres"。此 RDBMS 提供的功能是为新用户添加角色并创建数据库。如果您遇到此类错误:
默认用户名登录:
root@kalilinux:~# sudo -i -u postgres
输入 psql 进行交互式提示
postgres@kalilinux:~$ psql
要退出提示使用
\q
创建新用户角色
postgres@kalilinux:~$ createuser --interactive
现在您处于交互式 psql shell。享受。不要忘记从您的用户名登录并输入 psql for shell.
如果启动Postgres服务没有报错,请按照以下步骤进行
第 1 步:运行ning 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
您的情况很可能状态会下降。如果不重启 PostgreSQL 服务
第 2 步:重新启动 pg_ctlcluster
#format is pg_ctlcluster <version> <cluster> <action>
sudo pg_ctlcluster 9.6 main start
#restart PostgreSQL service
sudo service postgresql restart
第 3 步:第 2 步失败并引发错误
如果重新启动 pg_lsclusters 不成功,则会抛出错误。
我的错误是(您可以在日志中看到错误 /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`
第 4 步:检查 postgres 的所有权
确保 postgres
是 /var/lib/postgresql/version_no/main
的所有者
例如:sudo chown postgres -R /var/lib/postgresql/9.6/main/
第 5 步:检查 postgres 用户属于 ssl-cert 用户组
这件事发生在我身上,结果我错误地从“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 postgresql restart
它可能会导致任何问题,例如,我的问题是由于配置文件上的拼写错误引起的。
有的说是证书文件导致的,有的说是本地人不匹配导致的。
如果您找不到关于您的问题的任何解决方案,请删除 postgres 并重新安装 it.This 是最好的解决方案。
该错误表示 Postgres 服务器不是 运行。尝试启动它:
sudo systemctl start postgresql
确保服务器在启动时启动:
sudo systemctl enable postgresql
我在 Devuan ascii 上遇到了同样的问题(也许 Debian 也是?)。配置文件 /etc/postgresql/9.6/main/postgresql.conf
包含指令 unix_socket_directories
,默认指向 /var/run/postgresql
。将其更改为 /tmp
,大多数客户默认查看的位置已为我修复。
我遇到了同样的问题
sudo su - postgres
initdb --locale en_US.UTF-8 -D /var/lib/postgres/data
exit
sudo systemctl start postgresql
sudo systemctl status postgresql
这对我有用。
我通过检查我的文件系统解决了这个问题
磁盘已满,因此数据库无法启动
Unix 域套接字上的连接数 "/var/run/postgresql/.s.PGSQL.5432" ?
我尝试了一系列的故障排除,直到我检查我的磁盘使用情况,发现它已满,100% 使用率,
df -h
cd /var/log/odoo/
cat /dev/null > odoo-server.log
reboot
我遇到了同样的问题。
好像没有集群的时候就没有socket
安装期间默认集群创建失败,因为未设置默认区域设置。
我遇到了类似的问题,问题出在配置文件 pg_hba.conf 中。我之前做了一些更改,导致服务器在尝试启动时出错。注释掉额外添加的内容解决了问题。
重新启动实例对我有用。此外,正如在其他一些 post 中提到的, psql -h '/tmp' 在重新启动之前也能正常工作。但是post restart psql直接开始工作了。
因此,我的想法可能是一些文件所有权问题随着重启而被重置。
如果您的服务不安全,这可能是原因
vi /etc/postgresql/11/main/pg_hba.conf
- 打开hba配置文件,这个配置文件通常位于etc目录下。
host all all localhost trust md5
您可以删除 trust 关键字
保存pg_hba.conf
sudo service postgresql restart.
验证 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
中的数据目录并且成功了。
我可以通过为 datadir 设置正确的权限来解决这个问题。
应该是
chmod 700 /var/lib/postgresql/10/main
chown postgres.postgres /var/lib/postgresql/10/main
在我的例子中,服务是 运行 但集群已关闭并且 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>
更改配置,但犯了一个错误,导致我找不到损坏的 "ghost" 配置。一旦我删除了 postgresql.auto.conf
中的违规行,它就解决了所有问题。
我在 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"?
在之后我做了以下 :
列出您设备上的所有 Postgres 集群 运行:
pg_lsclusters
这给了我这个红色的输出,表明它们都关闭了,状态也显示 down:
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
就这些了。
希望对您有所帮助
在我的例子中,我看到了这个错误,postgres 不是 运行。
问题是安装未能创建所需的集群。
解决方案是创建文件夹 /etc/postgres/{postgresql-version}/main
然后创建集群:
pg_createcluster {postgresql-version} main
之后,只要重新启动 postgresql 服务,一切就会正常。
在我的例子中,我遇到了这个错误,/var/run/postgresql/.s.PGSQL.5433
(注意,它正在查找的文件中的一个数字,.s.PGSQL.5432
)存在。尝试了此页面顶部的说明,但没有任何效果。
原来 /etc/postgresql/12
中有一个用于 PostGreSQL 12 配置文件的旧目录,我将其删除,从而解决了问题。
如果您在 linux 和 Ruby 上使用 windows 子系统 Rails 然后使用此命令检查您的 postgres 运行ning 在哪个端口
sudo nano /etc/postgresql/12/main/postgresql.conf
如果它在端口 5433 则转到 database.yml 文件并在其中添加 port:5433
然后 运行 命令 sudo service postgresql start
我已经解决了我的问题
在我的例子中,在 运行 进入错误
之后,以下内容用于启动 postgres
sudo service postgresql start
sudo su - postgres
psql
我相信我在卸载 PostgreSQL 11 和 12 后遇到了这个问题,而我已经在 Ubuntu 21 上安装了 13。我刚刚通过 sudo nano /etc/postgresql/13/main/postgresql.conf
解决了这个问题,并发现 port = 5433
(不知道为什么)。所以我改了port = 5432
。然后问题解决了。
如果您使用的是 WSL 2,请使用:
sudo service postgresql start
好的,我卸载了 postgres 10,但没有成功,一些 pg10 file/process 仍然存在。
然后我安装了 postgres 13,所以 pg 13 认为端口 5432 上还有另一个 pg 运行,所以它正在使用 5433。
解决方案:通过以下方式清除所有 pg:sudo apt-get --purge remove postgresql postgresql-*
然后 re-install 它。 (注意:这将删除所有现有数据)
这个命令在 Ubuntu 机器上对我有效
sudo su -postgres
它会要求您输入密码,很可能是您的默认密码。
我输入了 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
。不行。
解决了!虽然我不知道发生了什么,但我只是删除了所有东西并重新安装了它。这是我用来删除它的命令 sudo apt-get --purge remove postgresql\*
和 dpkg -l | grep postgres
。后面一个就是把所有的包都找出来,万一不干净呢
错误表明 psql 实用程序找不到连接到数据库服务器的套接字。要么后台没有数据库服务 运行,要么套接字位于其他地方,要么 pg_hba.conf
需要修复。
第 1 步:验证数据库是 运行
该命令可能因您的操作系统而异。但在大多数 *ix 系统上,以下内容会起作用,它将在所有 运行 个进程
中搜索 postgresps -ef | grep postgres
在我的系统上,macosx,这会吐出
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
。
第二步:如果postgres服务是运行
使用find
搜索socket的位置,应该在/tmp
sudo find /tmp/ -name .s.PGSQL.5432
如果 postgres 是 运行 并且接受套接字连接,上面应该告诉你套接字的位置。在我的 machine 上,结果是:
/tmp/.s.PGSQL.5432
然后,尝试明确使用此文件的位置通过 psql 进行连接,例如。
psql -h /tmp/ dbname
第 3 步:如果服务 运行 但您没有看到套接字
如果找不到套接字,但看到服务是 运行,请验证 pg_hba.conf 文件是否允许本地套接字。
浏览到 datadir
,您应该会找到 pg_hba.conf
文件。
默认情况下,您应该在文件底部附近看到以下几行:
# "local" is for Unix domain socket connections only
local all all trust
如果看不到,可以修改文件,重启postgres服务。
只是想做一个小补充:如果你的实例在套接字上抱怨,你也可以检查 /data/postgresql.conf
文件中的 unix_socket_directories
,它可能已设置为 /tmp
,例如,如果您使用了第 3 方发行版。您可以将其更改为 /var/run/postgresql
并重新启动服务。这可能还需要在 /var/run
处创建一个 postgresql
目录,在 /var/lock
处创建一个 subsys/postgresql-9.6
目录,如果这些目录尚不存在的话(在 postgresql 9.6 中为我工作)。
从 psql 客户端远程访问服务器上的 postgres 数据库的 debian 快速指南:(更改的配置在文件中记录):
- 用 listen_address * 编辑
- 编辑
/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
从客户端登录
- 交互式询问密码,在本例中为 foo
/etc/postgresql/10/main/postgresql.conf
我遇到过几次类似的问题。通常我只是在 tutorial 之后重新安装 PostgreSQL,这以丢失数据为代价解决了问题。
我下定决心今天要真正解决问题。重新启动 PostgreSQL 在 ubuntu 解决了它。 sudo /etc/init.d/postgresql restart
我对此错误消息的问题是对我操纵的密钥和 pem 证书的错误权限。对我帮助很大的是: /var/log/postgresql/postgresql-9.5-main.log 所有错误都在哪里。
所以对于我和我的朋友们来说,在开发 Node.js 应用程序(使用 Postgres 和 Sequelize)时,我们必须
brew install postgresql
(我们中的一个人缺少 postgres,我们中的一个人没有,但我们收到与上面列出的相同的错误消息)brew services start postgresql
**** (使用 Homebrew 启动 postgres)createdb <name of database in config.json file>
node_modules/.bin/sequelize db:migrate
npm start
在全新安装 postgresql 期间。默认情况下,用户名和密码分配为 "postgres"。此 RDBMS 提供的功能是为新用户添加角色并创建数据库。如果您遇到此类错误:
默认用户名登录:
root@kalilinux:~# sudo -i -u postgres
输入 psql 进行交互式提示
postgres@kalilinux:~$ psql
要退出提示使用
\q
创建新用户角色
postgres@kalilinux:~$ createuser --interactive
现在您处于交互式 psql shell。享受。不要忘记从您的用户名登录并输入 psql for shell.
如果启动Postgres服务没有报错,请按照以下步骤进行
第 1 步:运行ning 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
您的情况很可能状态会下降。如果不重启 PostgreSQL 服务
第 2 步:重新启动 pg_ctlcluster
#format is pg_ctlcluster <version> <cluster> <action>
sudo pg_ctlcluster 9.6 main start
#restart PostgreSQL service
sudo service postgresql restart
第 3 步:第 2 步失败并引发错误
如果重新启动 pg_lsclusters 不成功,则会抛出错误。
我的错误是(您可以在日志中看到错误 /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`
第 4 步:检查 postgres 的所有权
确保 postgres
是 /var/lib/postgresql/version_no/main
的所有者
例如:sudo chown postgres -R /var/lib/postgresql/9.6/main/
第 5 步:检查 postgres 用户属于 ssl-cert 用户组
这件事发生在我身上,结果我错误地从“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 postgresql restart
它可能会导致任何问题,例如,我的问题是由于配置文件上的拼写错误引起的。 有的说是证书文件导致的,有的说是本地人不匹配导致的。
如果您找不到关于您的问题的任何解决方案,请删除 postgres 并重新安装 it.This 是最好的解决方案。
该错误表示 Postgres 服务器不是 运行。尝试启动它:
sudo systemctl start postgresql
确保服务器在启动时启动:
sudo systemctl enable postgresql
我在 Devuan ascii 上遇到了同样的问题(也许 Debian 也是?)。配置文件 /etc/postgresql/9.6/main/postgresql.conf
包含指令 unix_socket_directories
,默认指向 /var/run/postgresql
。将其更改为 /tmp
,大多数客户默认查看的位置已为我修复。
我遇到了同样的问题
sudo su - postgres
initdb --locale en_US.UTF-8 -D /var/lib/postgres/data
exit
sudo systemctl start postgresql
sudo systemctl status postgresql
这对我有用。
我通过检查我的文件系统解决了这个问题 磁盘已满,因此数据库无法启动
Unix 域套接字上的连接数 "/var/run/postgresql/.s.PGSQL.5432" ?
我尝试了一系列的故障排除,直到我检查我的磁盘使用情况,发现它已满,100% 使用率,
df -h
cd /var/log/odoo/
cat /dev/null > odoo-server.log
reboot
我遇到了同样的问题。 好像没有集群的时候就没有socket
安装期间默认集群创建失败,因为未设置默认区域设置。
我遇到了类似的问题,问题出在配置文件 pg_hba.conf 中。我之前做了一些更改,导致服务器在尝试启动时出错。注释掉额外添加的内容解决了问题。
重新启动实例对我有用。此外,正如在其他一些 post 中提到的, psql -h '/tmp' 在重新启动之前也能正常工作。但是post restart psql直接开始工作了。 因此,我的想法可能是一些文件所有权问题随着重启而被重置。
如果您的服务不安全,这可能是原因
vi /etc/postgresql/11/main/pg_hba.conf
- 打开hba配置文件,这个配置文件通常位于etc目录下。
host all all localhost trust md5
您可以删除 trust 关键字
保存pg_hba.conf
sudo service postgresql restart.
验证 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
中的数据目录并且成功了。
我可以通过为 datadir 设置正确的权限来解决这个问题。 应该是
chmod 700 /var/lib/postgresql/10/main
chown postgres.postgres /var/lib/postgresql/10/main
在我的例子中,服务是 运行 但集群已关闭并且 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>
更改配置,但犯了一个错误,导致我找不到损坏的 "ghost" 配置。一旦我删除了 postgresql.auto.conf
中的违规行,它就解决了所有问题。
我在 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"?
在
列出您设备上的所有 Postgres 集群 运行:
pg_lsclusters
这给了我这个红色的输出,表明它们都关闭了,状态也显示 down:
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
就这些了。
希望对您有所帮助
在我的例子中,我看到了这个错误,postgres 不是 运行。
问题是安装未能创建所需的集群。
解决方案是创建文件夹 /etc/postgres/{postgresql-version}/main
然后创建集群:
pg_createcluster {postgresql-version} main
之后,只要重新启动 postgresql 服务,一切就会正常。
在我的例子中,我遇到了这个错误,/var/run/postgresql/.s.PGSQL.5433
(注意,它正在查找的文件中的一个数字,.s.PGSQL.5432
)存在。尝试了此页面顶部的说明,但没有任何效果。
原来 /etc/postgresql/12
中有一个用于 PostGreSQL 12 配置文件的旧目录,我将其删除,从而解决了问题。
如果您在 linux 和 Ruby 上使用 windows 子系统 Rails 然后使用此命令检查您的 postgres 运行ning 在哪个端口
sudo nano /etc/postgresql/12/main/postgresql.conf
如果它在端口 5433 则转到 database.yml 文件并在其中添加 port:5433
然后 运行 命令 sudo service postgresql start
我已经解决了我的问题
在我的例子中,在 运行 进入错误
之后,以下内容用于启动 postgressudo service postgresql start
sudo su - postgres
psql
我相信我在卸载 PostgreSQL 11 和 12 后遇到了这个问题,而我已经在 Ubuntu 21 上安装了 13。我刚刚通过 sudo nano /etc/postgresql/13/main/postgresql.conf
解决了这个问题,并发现 port = 5433
(不知道为什么)。所以我改了port = 5432
。然后问题解决了。
如果您使用的是 WSL 2,请使用:
sudo service postgresql start
好的,我卸载了 postgres 10,但没有成功,一些 pg10 file/process 仍然存在。
然后我安装了 postgres 13,所以 pg 13 认为端口 5432 上还有另一个 pg 运行,所以它正在使用 5433。
解决方案:通过以下方式清除所有 pg:sudo apt-get --purge remove postgresql postgresql-*
然后 re-install 它。 (注意:这将删除所有现有数据)
这个命令在 Ubuntu 机器上对我有效
sudo su -postgres
它会要求您输入密码,很可能是您的默认密码。