PostgreSQL - 从shell创建用户和数据库失败

3

我有一个在部署时运行的shell脚本,其中有以下这些行:

# Database
createdb $DBNAME
createuser -D -A $DBNAME

然而,在我的日志中,我遇到了以下错误:

  • createdb:无法连接到数据库postgres:用户“root”的标识身份验证失败
  • createuser:无法连接到数据库postgres:用户“root”的标识身份验证失败

请问有谁可以告诉我出了什么问题,以及我该如何更正我的代码。毕竟root应该有权限执行此操作吧?

2个回答

4

如果你想让你的脚本具有可移植性,最好的方法是:

su --login postgres --command "createdb $DBNAME"

使用此方法应该比使用-U更安全、更可靠、更易携带。我在所有我的PostgreSQL脚本中都是这样做的。你可能会发现它是一种有用的技巧。显然,它仍然需要以root用户身份运行(例如,使用sudo)。


我使用apt-get安装了postgreSQL,这会自动创建一个postgres账户。是否还需要像我在第一篇帖子中所做的那样创建一个单独的用户账户呢? - Jimmy
取决于您是否想为该数据库创建一个单独的用户。我几乎总是这样做,因为权限分离通常是个好主意 :) - simon

3

如果您的数据库已经受到保护,您需要作为数据库用户连接,而不是作为操作系统用户。例如:

createdb -U dbrootuser -W $DBNAME 

查看此链接以获取完整的语法


我得到了这个错误: /usr/lib/postgresql/8.4/bin/createdb: 无效选项 -- 'u' - Jimmy
抱歉,大小写敏感(应为大写U),我已编辑了答案。如果您对语法有疑问/想法,请再次检查链接。 - James Hornitzky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接