不指定用户名的 PostgreSQL `createuser`

PostgreSQL `createuser` without specifying username

我运行:

$ createuser --pwprompt

看到了:

Enter password for new role: 

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

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

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

唯一给出的其他信息是:

username

Specifies the name of the PostgreSQL user to be created. This name must be different from all existing roles in this PostgreSQL installation.

createuser 在给定 none 时正在对哪个用户进行操作?

你没看懂这部分文档(我也花了点时间):

--interactive

Prompt for the user name if none is specified on the command line, and also prompt for whichever of the options -d/-D, -r/-R, -s/-S is not specified on the command line. (This was the default behavior up to PostgreSQL 9.1.)

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

因此,PostgreSQL 选择默认用户:除非设置了 PGUSER,否则就是您的操作系统用户。

因此,假设您是操作系统用户 postgres,您实际上执行了以下操作:

createuser -U postgres postgres

这当然很愚蠢,会导致

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

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