CREATE USER
是用于创建数据库角色的 DDL 命令。
CREATE USER
添加于 PostgreSQL 6.3。自 PostgreSQL 8.1 起,它成为了 CREATE ROLE
的别名。
创建用户和创建角色
虽然 CREATE USER
从本质上讲(自 PostgreSQL 8.1 起)是 CREATE ROLE
的别名,但存在一个重要的行为差异,即 CREATE USER
会创建一个具有登录权限的角色(选项 LOGIN
)。但是,使用 CREATE ROLE
创建的角色默认没有登录权限(选项 NOLOGIN
)。
这保留了 PostgreSQL 8.1 之前 CREATE USER
的行为,同时可以使用 CREATE ROLE
安全地定义非登录角色。
请注意,createuser
核心实用程序的行为与 CREATE USER
相同,即使用它创建的角色默认具有登录权限。
更改历史记录
- PostgreSQL 14
CURRENT_ROLE
现在也接受作为用户名替代(提交 45b98057)
- PostgreSQL 10
- 选项
UNENCRYPTED PASSWORD
已移除(eb61136d)
- 选项
- PostgreSQL 9.6
- 选项
CREATEUSER
/NOCREATEUSER
已移除(提交 d371bebd)
- 选项
- PostgreSQL 9.5
- PostgreSQL 9.1
- 选项
REPLICATION
/NOREPLICATION
已添加(提交 9b8aff8c)
- 选项
- PostgreSQL 8.1
- PostgreSQL 7.2
PASSWORD
选项可以指定为ENCRYPTED
或UNENCRYPTED
(提交 38bb1abc)
- PostgreSQL 7.0
SYSID
选项已添加(提交 eebfb9ba)
- PostgreSQL 6.3
- 已添加(提交 4c04f772)
示例
CREATE USER
的基本用法示例
postgres=# CREATE USER foo; CREATE ROLE
postgres=# \du List of roles Role name | Attributes | Member of -----------+------------------------------------------------------------+----------- foo | | {} postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
请注意 CREATE USER
和 CREATE ROLE
之间的行为差异
postgres=# CREATE ROLE bar; CREATE ROLE
postgres=# \du List of roles Role name | Attributes | Member of -----------+------------------------------------------------------------+----------- bar | Cannot login | {} foo | | {} postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
参考
- PostgreSQL 文档: CREATE USER