↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1 / 7.0 / 6.5 / 6.4
历史版本。 PostgreSQL 13 已结束支持。 2025-11-13. 请参阅 当前版本手册.

createuser

createuser — 定义一个新的 PostgreSQL 用户账户

大纲

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

描述

createuser 创建一个新的 PostgreSQL 用户(更准确地说,是一个角色)。只有超级用户以及具有 CREATEROLE 权限的用户才能创建新用户,因此调用 createuser 的用户必须能够以超级用户或具有 CREATEROLE 权限的用户身份连接。

如果要创建一个具有 SUPERUSER、REPLICATION 或 BYPASSRLS 权限的角色,则必须以超级用户身份连接,而不能仅具有 CREATEROLE 权限。超级用户意味着能够绕过数据库中的所有访问权限检查,因此不应轻易授予超级用户权限。CREATEROLE 也赋予非常广泛的权限。

createuser 是 SQL 命令 CREATE ROLE 的一个包装器。通过此工具创建用户与通过其他访问服务器的方法创建用户,在效果上没有区别。

选项

createuser 接受以下命令行参数:

username

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

-c number
--connection-limit=number

为新用户设置最大连接数。默认不设限制。

-d
--createdb

允许新用户创建数据库。

-D
--no-createdb

不允许新用户创建数据库。这是默认设置。

-e
--echo

回显 createuser 生成并发送给服务器的命令。

-E
--encrypted

该选项已废弃,但为了向后兼容仍被接受。

-g role
--role=role

指定此角色应立即作为新成员加入的现有角色。可以使用多个 -g 开关,指定此角色要加入的多个角色。

-i
--inherit

新角色将自动继承其所属角色的权限。这是默认设置。

-I
--no-inherit

新角色将不会自动继承其所属角色的权限。

--interactive

如果命令行中未指定用户名,则提示输入用户名;此外,还会提示输入命令行中未指定的 -d/-D、-r/-R、-s/-S 选项。(直到 PostgreSQL 9.1 为止,这都是默认行为。)

-l
--login

允许新用户登录(也就是说,该用户名可用作初始会话用户标识符)。这是默认设置。

-L
--no-login

不允许新用户登录。(不具有登录权限的角色仍可用于管理数据库权限。)

-P
--pwprompt

如果给出此选项,createuser 会提示输入新用户的密码。如果不打算使用密码认证,则不需要这样做。

-r
--createrole

允许新用户创建、更改、删除其他角色,对其添加注释,更改其安全标签,以及授予或撤销其他角色的成员资格;也就是说,该用户将具有 CREATEROLE 权限。关于该权限赋予哪些能力的更多细节,见创建角色。

-R
--no-createrole

不允许新用户创建新角色。这是默认设置。

-s
--superuser

新用户将成为超级用户。

-S
--no-superuser

新用户将不是超级用户。这是默认设置。

-V
--version

打印 createuser 版本并退出。

--replication

新用户将具有 REPLICATION 权限,关于该权限的更完整说明见 CREATE ROLE。

--no-replication

新用户将不具有 REPLICATION 权限,关于该权限的更完整说明见 CREATE ROLE。

-?
--help

显示有关 createuser 命令行参数的帮助并退出。

createuser 也接受下列用于连接参数的命令行参数:

-h host
--host=host #

指定服务器所在主机的主机名。如果该值以斜杠开头,则将其用作 Unix 域套接字所在目录。

-p port
--port=port #

指定服务器监听连接所用的 TCP 端口或本地 Unix 域套接字文件扩展名。

-U username
--username=username #

指定连接时使用的用户名(不是要创建的用户名)。

-w
--no-password #

绝不提示输入密码。如果服务器要求密码认证,而密码又无法通过诸如.pgpass 文件等其他方式获得,则连接尝试将失败。该选项可用于没有用户在场输入密码的批处理作业和脚本。

-W
--password #

强制 createuser 提示输入密码(用于连接到服务器,而不是新用户的密码)。

该选项绝非必需,因为如果服务器要求密码认证,createuser 会自动提示输入密码。不过,createuser 会浪费一次连接尝试来发现服务器需要密码。在某些情况下,输入 -W 可以避免这次额外的连接尝试。

环境

PGHOST
PGPORT
PGUSER

默认连接参数

PG_COLOR

指定诊断消息是否使用颜色。可选值为 always、auto 和 never。

与大多数其他 PostgreSQL 工具一样,此工具也使用 libpq 支持的环境变量(见第 33.14 节)。

诊断

如果遇到问题,请参见 CREATE ROLE 和 psql 中关于潜在问题和错误消息的讨论。数据库服务器必须在目标主机上运行。此外,libpq 前端库所使用的任何默认连接设置和环境变量都会生效。

示例

要在默认数据库服务器上创建用户 joe:

$ createuser joe

要在默认数据库服务器上创建用户 joe,并提示输入一些额外属性:

$ createuser --interactive joe
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) n
Shall the new role be allowed to create more new roles? (y/n) n

要通过主机 eden、端口 5000 上的服务器创建同一个用户 joe,并显式指定各项属性,同时查看底层命令:

$ createuser -h eden -p 5000 -S -D -R -e joe
CREATE ROLE joe NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN;

要把用户 joe 创建为超级用户,并立即为其设置密码:

$ createuser -P -s -e joe
Enter password for new role: xyzzy
Enter it again: xyzzy
CREATE ROLE joe PASSWORD 'SCRAM-SHA-256$4096:44560wPMLfjqiAzyPDZ/eQ==$4CA054rZlSFEq8Z3FEhToBTa2X6KnWFxFkPwIbKoDe0=:L/nbSZRCjp6RhOhKK56GoR1zibCCSePKshCJ9lnl3yw=' SUPERUSER CREATEDB CREATEROLE INHERIT LOGIN NOREPLICATION NOBYPASSRLS;

在上面的示例中,输入新密码时实际上不会回显它,但为清楚起见,这里展示了输入的内容。可以看到,该密码在发送给客户端之前就已经被加密了。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.