createdb上的密码问题 - OSX Mountain Lion上的PostgreSQL

时间:2013-04-02 14:50:17

标签: django postgresql osx-mountain-lion virtualenv

我得到了着名的

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"?
在OSX Mountain Lion的终端中尝试createdb时出现

错误,因此按照here的说明,我向export PATH=/opt/local/lib/postgresql92/bin:$PATH添加了.bash_profile,如果我输入{{}} {1}}我得到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" 是我在终端中的默认用户名。我想要做的是创建一个PostgreSQL数据库,我可以从生活在virtualenv中的Django项目访问。我正在使用PostgreSQL 9.2。我做错了什么?

1 个答案:

答案 0 :(得分: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

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

createuser -U username newuser
createdb -U username newdatabase