不指定用户名的 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
如果你没有退缩和中断执行。
我运行:
$ 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
如果你没有退缩和中断执行。