postgres中createdb的问题

时间:2011-11-02 23:19:17

标签: sql postgresql role

我必须使用遍布不同机器的几个postgresql数据库运行模拟,所有这些数据库都运行linux。

我从源代码中成功编译并构建了postgresql,我也可以运行服务器,但是当我尝试用这个命令创建一个新的db时:

./postgresql/bin/createdb db1

我收到此错误:

createdb: could not connect to database postgres: FATAL:  role "giulio" does not exist

其中giulio是我访问所有机器的用户名。

在某些机器上它可以正常工作而在其他机器上却没有。我真的无法弄清楚问题的根源。我想这是与postgres的访问控制有关的东西。

我在google上做过几项研究,但我无法找到并解决问题。

有谁知道如何开展这项工作?

谢谢,

-Giulio

3 个答案:

答案 0 :(得分:2)

PostgreSQL拥有自己的用户和角色,与您的操作系统不同。一般有专门的超级用户,postgres。有关用户管理信息,请查看此处:

http://www.postgresql.org/docs/9.1/interactive/user-manag.html

执行postgres命令时,需要使用-U标志指定用户(除非您已作为现有db用户登录)。当您调用createdb脚本时,因为您没有使用-U标志,服务器假定应该使用调用者的uid(giulo),但是您没有向db添加用户“giulio”,并且因此错误消息。

因此执行命令

./postgresql/bin/createdb -U postgres db1

它应该有效。然后,稍后,您可能希望在数据库中创建其他用户和角色,而不是以超级用户身份执行所有操作。

答案 1 :(得分:1)

我认为在已经知道用户“giulio”的机器上,你使用这个用户执行initdb,使他成为数据库超级用户。引自inidb(1)(强调我的):

  

- 用户名的用户名=                 选择数据库超级用户的用户名。 此默认设置                 到运行initdb的有效用户的名字。确实如此                 超级用户的名字并不重要,但有人可能会选择                 保持习惯名称 postgres ,即使操作系统 -                 tem用户的名字不同。

在其他计算机上,我假设您与其他用户执行了initdb,希望使用postgres

为了回到我提议的标准轨道,您在“giulio”是超级用户的机器上删除数据库集群,并使用标准postgres用户设置新的数据库集群。然后添加另一个用户“giulio”。这将避免更多的混乱,因为一些脚本/程序期望一个名为postgres的超级用户帐户。

答案 2 :(得分:1)

我的回答更简单......我意识到我需要运行以下内容:

brew install postgresql

然后检查它是否有效我跑了:

which createdb 

检查文件路径以及它是否有效,它有!希望这可以帮助。