1

我跑了:

$ createuser --pwprompt

并看到:

Enter password for new role: 

我希望系统会提示输入用户名,所以此时我点击了CTRL+ C

man页面概要说用户名是可选的:

createuser [connection-option...] [option...] [username]

给出的唯一其他信息是:

用户名

指定要创建的 PostgreSQL 用户的名称。此名称必须不同于此 PostgreSQL 安装中的所有现有角色。

什么用户createuser在没有给出时正在操作?

4

1 回答 1

1

您没有阅读这部分文档(我也花了一些时间):

--interactive

如果在命令行上未指定任何用户名,则提示输入用户名,并且还会提示在命令行上未指定任何选项-d/ -D-r/ -R-s/ -S。(这是 PostgreSQL 9.1 之前的默认行为。)

您没有指定--interactive,因此不会提示您。

因此,PostgreSQL 选择默认用户:除非PGUSER设置,即您的操作系统用户。

因此,假设您是操作系统用户postgres,您有效地执行了以下操作:

createuser -U postgres postgres

这当然很愚蠢,会导致

createuser: creation of new role failed: ERROR:  role "postgres" already exists

如果你没有退缩并中断执行。

于 2018-09-28T04:45:10.807 回答