请不要将此问题移到askubuntu,因为我认为这个问题不是特定于操作系统的。
当我调用createuser
postgres命令时(现在无论我是否提供任何参数都无关紧要),我收到此错误:
createuser: could not connect to database postgres: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
通常这意味着postgres服务器已关闭但不是这次:
pg_lsclusters
Ver Cluster Port Status Owner Data directory Log file
9.4 main 5432 online postgres /var/lib/postgresql/9.4/main /var/log/postgresql/postgresql-9.4-main.log
sudo service postgresql status
9.4/main (port 5432): online
但确实没有/tmp/.s.PGSQL.5432
文件,因为我的配置文件(/etc/postgresql/9.4/main/postgresql.conf
)有这一行:
unix_socket_directories = '/var/run/postgresql'
所以我真的不明白为什么createuser
要访问/tmp/.s.PGSQL.5432
?这条路径可以硬编码到createuser
二进制文件中吗?我没有看到任何命令行参数来指定createuser
...
答案 0 :(得分:2)
postgresql.conf文件由数据库 server 读取,但不是由客户端应用程序(例如createuser,psql,...)读取。 (事实上,客户端应用程序无法读取服务器配置文件,因为客户端必须连接到服务器,这可能是世界的一半,然后它才可能知道该配置文件的存在位置)。
相反,您必须告诉客户端应用程序在哪里找到套接字目录。
如果您的客户端应用程序(createuser)连接到本地主机(必须是因为您没有指定其他主机),则使用host参数指定套接字目录的名称。
例如:
createuser -h /var/run/postgresql newusername
请参阅http://www.postgresql.org/docs/devel/static/libpq-connect.html#LIBPQ-CONNECT-HOST
希望有所帮助。
答案 1 :(得分:0)
您已经启动了服务吗?
service postgresql start