0

我越来越有名了

psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

createdb尝试在 OSX Mountain Lion 的终端中尝试时出错,因此按照此处的说明,我添加export PATH=/opt/local/lib/postgresql92/bin:$PATH到我的.bash_profile,现在如果我输入which psql我得到/opt/local/lib/postgresql92/bin/psql(以前我得到的地方/usr/bin/psql)。

但是,如果我createdb database现在尝试,系统会提示我输入我不知道的密码(这不是我的默认用户密码),如果我两次输入错误,我会得到:

createdb: could not connect to database template1: 
FATAL:  password authentication failed for user "username"

username我在终端中的默认用户名在哪里。我要做的是创建一个 PostgreSQL 数据库,我可以从一个生活在 virtualenv 中的 Django 项目中访问。我正在使用 PostgreSQL 9.2。我究竟做错了什么?

4

1 回答 1

2

createdb必须在后台连接到 PostgreSQL 才能执行将创建新数据库的 SQL 命令。默认情况下,它使用您的操作系统用户名。根据错误消息,它碰巧失败了,要么是因为该用户不作为数据库用户存在(最有可能),要么是因为他有一个您不记得的密码。

要解决这个问题,假设您使用的是macports包,考虑到安装路径,这似乎是合理的,您可以运行:

sudo su postgres -c '/opt/local/lib/postgresql92/bin/createdb dbname'

新数据库将由 postgres 用户拥有,这并不总是理想的。更明智的选择是使用您的用户名创建一个普通的 db 用户,并使其成为数据库的所有者:

sudo su postgres -c '/opt/local/lib/postgresql92/bin/createuser username'
sudo su postgres -c '/opt/local/lib/postgresql92/bin/createdb -O username dbname'

编辑createuser命令提示这些问题(来自手册页):

      $ createuser joe
       Shall the new role be a superuser? (y/n) n
       Shall the new role be allowed to create databases? (y/n) n
       Shall the new role be allowed to create more new roles? (y/n) n

通过对最后两个回答“是”,新用户将拥有足够的权限,以便随后可以在 through 中使用它postgressudo例如,这将起作用:

createuser -U username newuser
createdb -U username newdatabase
于 2013-04-02T16:40:06.437 回答