1

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

我成功地从源代码编译和构建了 postgresql,我也可以运行服务器,但是当我尝试使用这个命令创建一个新数据库时:

./postgresql/bin/createdb db1

我收到此错误:

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

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

在某些机器上它可以工作,而在其他机器上则不能。我真的无法弄清楚问题的根源。我想这与postgres的访问控制有关。

我对谷歌做了几项研究,但我无法找到并解决问题。

有谁知道如何获得这项工作?

谢谢,

-朱利奥

4

3 回答 3

2

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

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

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

所以执行命令为

./postgresql/bin/createdb -U postgres db1

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

于 2011-11-02T23:57:37.117 回答
1

我假设在已经知道用户“giulio”的机器上,您执行initdb的正是这个用户,使他成为 DB 超级用户。引自inidb(1)(强调我的):

--username=username 选择数据库超级用户的用户名。 这默认为运行 initdb 的有效用户的名称。超级用户的名字是什么其实并不重要,但是可以选择保留习惯名称postgres,即使操作系统用户的名字不同。

在其他机器上,我假设您确实initdb与另一个用户一起执行,希望使用postgres.

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

于 2011-11-02T23:58:15.453 回答
1

我的回答更简单......我意识到我只需要运行以下命令:

brew install postgresql

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

which createdb 

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

于 2014-03-09T17:24:30.433 回答