问题的说明
我安装了bitnami django堆栈,包括PostgreSQL 8.4。
运行psql -U postgres时发生以下错误:
pql : couldnotconnecttoserver : nosuchfileordirectory
istheserverrunninglocallyandaccepting
connectionsonunixdomainsocket '/var/run/PostgreSQL/. s.pgsql.5432 '?
PG一定在运行。 pg_hba.conf文件如下:
# typedatabaseusercidr -地址方法
# ' local ' isforunixdomainsocketconnectionsonly
本地所有全部MD5
# IP v4本地连接:
主机全部全部全部127.0.0.1/32 MD5
# IPv6本地连接:
主机全部全部:33601/128 MD5
你被给了什么?
pg正在运行的“Proof”:
root @ assaf-desktop :/home/assaf # PS axf|grep postgres
是14338吗? s 0:00/opt/django堆栈- 1.3-0/PostgreSQL/WMD ZT/postgres-d/opt/django堆栈- 1.3-0/PostgreSQL/data
是14347吗? s 0:00_ postgres 3360写入程序
是14348吗? s 0:00 (postgres 3360魔兽世界
是14349吗? ss 0:00 _ postgres 3360 autovacuumlauncherprocess
是14350吗? s 0:00_ postgres 3360 statscollectorprocess
15139 pts/1s 0:00_ grep-- color=auto postgres
root @ assaf-desktop 3360/home/assaf # netstat-nltp|grep 5432
TCP 0127.0.0.1:54320.0.0.0: * listen 14338/postgres
TCP 6033603360133601336054323603360:336033603360 * listen 14338/postgres
root @ assaf -桌面:/home/assaf #
最佳解决方案
此问题是由没有版本号的postgres软件包的安装引起的。 postgres已安装,版本正确,但用于设置群集的脚本无法正常运行。 这是包装问题。
如果对postgres满意,可以运行脚本创建此群集并运行postgres。 但是,有更简单的方法。
首先清除旧的postgres安装。 因为现在的问题是9.1,所以假设你已经安装了
sudo apt-get remove-- purge PostgreSQL-9.1
现在只需要重新安装
sudo apt-getinstallpostgresql-9.1
请注意包名称和版本号。 HTH。
次优的解决办法
错误消息是Unix-domain套接字,因此必须协调netstat调用以避免排除它。 所以,如果没有选项-t,请尝试以下操作:
netstat -nlp | grep 5432
我认为服务器实际上正在侦听套接字/tmp/.s.PGSQL.5432。 不是客户端尝试连接的/var/run/PostgreSQL/. s.pgsql.5432。 这是在Debian或Ubuntu上使用hand-compiled或third-party PostgreSQL包时的常见问题。 这是因为Unix-domain套接字目录源的默认值为/tmp,但Debian将它打包并将其更改为/var/run/postgresql包
可能的解决方法:
使用third-party软件包提供的客户端(电话/opt/django堆栈- 1.3-0/PostgreSQL/WMD ZT/psql )。 可能会完全卸载Ubuntu-supplied软件包(由于其他反向依赖性,可能很难)。
修复休眠包的套接字目录,使其与Debian /Ubuntu兼容。
使用-H localhost通过TCP /IP进行连接。
使用-h /tmp或等效的PGHOST设置指向正确的目录。
请勿使用third-party包。
第三个解决方案
可以使用p
sql -U postgres -h localhost强制通过TCP而不是UNIX域套接字进行连接;您的netstat输出显示PostgreSQL服务器正在侦听localhost的端口5432。您可以通过使用不同的netstat调用来找出PostgrSQL服务器使用的本地UNIX套接字:
netstat -lp --protocol=unix | grep postgres
无论如何,PostgreSQL服务器侦听的接口都在postgresql.conf中配置。
第四种方案
只需创建一个这样的软链接:
ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432
第五种方案
这对我有用:
编辑:postgresql.conf
sudo nano /etc/postgresql/9.3/main/postgresql.conf
启用或添加:
listen_addresses = '*'
重启数据库引擎:
sudo service postgresql restart
此外,您可以检查文件pg_hba.conf
sudo nano /etc/postgresql/9.3/main/pg_hba.conf
并添加您的网络或主机地址:
host all all 192.168.1.0/24 md5
第六种方案
我不得不在Debian Squeeze上编译PostgreSQL 8.1,因为我使用的是Project Open,它基于OpenACS,不会在更新版本的PostgreSQL上运行。
默认的编译配置将unix_socket放在/tmp中,但是依赖于PostgreSQL的Project Open将无法工作,因为它在/var/run/postgresql中查找unix_socket。
postgresql.conf中有一个设置来设置套接字的位置。我的问题是,我可以设置/tmp和psql工作,但不是项目打开,或者我可以设置它为/var/run/postgresql和psql不起作用,但项目打开。
该问题的一个解决方案是为/var/run/postgresql设置套接字,然后根据Peter的建议运行psql,如下所示:
psql -h /var/run/postgresql
这使用本地权限在本地运行。唯一的缺点是它比简单的”psql”打字更多。
有人提出的另一个建议是在两个地点之间建立一个符号链接。这也有效,但是重启后链接消失了。使用-h参数可能更容易,但是,我在/etc/init.d中的PostgreSQL脚本中创建了符号链接。我在”start”部分放置了symbolic link create命令。当然,当我发出一个停止并启动或重启命令时,它会尝试重新创建一个现有的符号链接,但除了警告信息之外,可能没有任何损害。
就我而言,而不是:
ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432
我有
ln -s /var/run/postgresql/.s.PGSQL.5432 /tmp/.s.PGSQL.5432
并在postgresql.conf中明确将unix_socket设置为/var/run/postgresql/.s.PGSQL.5432。
第七种方案
我通过这样做使它工作:
dpkg-reconfigure locales
选择首选语言环境然后运行
pg_createcluster 9.5 main --start
(9.5是我的postgresql版本)
/etc/init.d/postgresql start
然后它的工作原理!
sudo su - postgres
psql
第八种方案
解:
做这个
export LC_ALL="en_US.UTF-8"
还有这个。 (9.3是我目前的PostgreSQL版本。写下你的版本!)
sudo pg_createcluster 9.3 main --start
第九种方案
在我的情况下,它是由我在编辑/etc/postgresql/9.5/main/pg_hba.conf时输入的拼写引起的
我变了:
# Database administrative login by Unix domain socket
local all postgres peer
至:
# Database administrative login by Unix domain socket
local all postgres MD5
但是MD5必须是小写的md5:
# Database administrative login by Unix domain socket
local all postgres md5
第十种方案
我用postgres-9.5服务器无法解决这个问题。经过3天的零进度尝试在这个和其他网站上的每个修复,我决定re-install服务器,并失去了5天的工作量。但是,我确实在新实例上复制了这个问题。这可能会提供一些关于如何解决它的观点,然后再采取我所做的灾难性方法。
首先,禁用postgresql.conf中的所有日志记录设置。这是部分:
# ERROR REPORTING AND LOGGING
评论该部分中的所有内容。然后重启服务。
重新启动时,使用/etc/init.d/postgresql start或restart我发现在重新启动时处于超级用户模式会很有帮助。我打开了一个x-window用于该操作。您可以使用sudo -i建立超级用户模式。
使用以下简单命令验证是否可以访问服务器:psql -l -U postgres
如果这不能解决问题,请考虑以下事项:
在尝试寻找解决方案时,我正在更改许多文件夹的所有权。我知道我可能会尝试将这些文件夹所有权和chmod还原2天。如果您已经搞乱了这些文件夹所有权并且不想完全清除服务器,那么请开始跟踪所有受影响文件夹的设置,以使其恢复到原始状态。您可能希望尝试在另一个系统上进行并行安装,并系统地检查所有文件夹的所有权和设置。单调乏味,但您可以访问您的数据。
获得访问权限后,系统地更改postgresql.conf文件的#ERROR REPORTING AND LOGGING部分中的每个相关行。重启并测试。我发现日志的默认文件夹导致失败。我特意评论了log_directory。系统删除日志的默认文件夹是/var /log /postgresql。
参考资料