CREATE USER 是一个用于创建数据库角色的 DDL 命令。
CREATE USER 在 PostgreSQL 6.3 中引入。从 PostgreSQL 8.1 开始,它一直是 CREATE ROLE 的别名。
CREATE USER 和 CREATE ROLE
虽然 CREATE USER 在本质上(自 PostgreSQL 8.1 起)是 CREATE ROLE 的一个别名,但有一个显著的行为差异:CREATE USER 创建的角色具有登录权限(选项 LOGIN)。然而,默认情况下,使用 CREATE ROLE 创建的角色没有登录权限(选项 NOLOGIN)。
这保留了 CREATE USER 在 PostgreSQL 8.1 之前的行为,同时允许使用 CREATE ROLE 安全地定义非登录角色。
请注意,核心实用程序 createuser 的行为与 CREATE USER 相同,即使用它创建的角色默认具有登录权限。
变更历史
- 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
