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

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

initdb

initdb — 创建一个新的 PostgreSQL 数据库集簇

大纲

initdb [option...] [ --pgdata | -D ] directory

描述

initdb 创建一个新的 PostgreSQL 数据库集簇。

创建数据库集簇包括创建用于存放集簇数据的目录,生成共享系统目录表(属于整个集簇而不是某个特定数据库的表),以及创建 postgres、template1 和 template0 数据库。postgres 数据库是一个默认数据库,供用户、工具程序和第三方应用程序使用。template1 和 template0 用作后续 CREATE DATABASE 命令复制的源数据库。template0 不应被修改,但可以向 template1 中添加对象,这些对象默认会被复制到以后创建的数据库中。更多细节见第 23.3 节。

虽然 initdb 会尝试创建指定的数据目录,但如果所需数据目录的父目录归 root 所有,它可能没有足够的权限。要在这种环境中初始化,可先由 root 创建一个空的数据目录,然后用 chown 将该目录的所有权赋予数据库用户账户,再用 su 切换为该数据库用户来运行 initdb。

initdb 必须以将拥有服务器进程的用户身份运行,因为服务器需要访问 initdb 创建的文件和目录。由于服务器不能以 root 身份运行,因此也绝不能以 root 身份运行 initdb。(实际上它会拒绝这样做。)

出于安全原因,initdb 创建的新集簇默认只有集簇拥有者可以访问。--allow-group-access 选项允许与集簇拥有者同组的任何用户读取集簇中的文件。这对由非特权用户执行备份很有用。

initdb 会初始化数据库集簇的默认区域设置和字符集编码。这些设置也可以在创建每个数据库时分别设置。initdb 为模板数据库确定这些设置,它们将作为所有其他数据库的默认值。

默认情况下,initdb 使用 libc 区域设置提供程序(见第 24.1.4 节)。libc 区域设置提供程序会从环境中获取区域设置,并根据区域设置确定编码。

要为集簇选择不同的区域设置,请使用 --locale。此外还有单独的 --lc-* 和 --icu-locale 选项(见下文),用于为各个区域设置类别设置值。请注意,不同区域设置类别之间若设置不一致,可能产生不合理的结果,因此应谨慎使用。

另一种方式是指定 --locale-provider=icu,让 initdb 使用 ICU 库提供区域设置服务。服务器必须在构建时启用 ICU 支持。要选择具体要应用的 ICU 区域设置 ID,请使用 --icu-locale。请注意,出于实现原因以及对旧代码的支持,在使用 ICU 区域设置提供程序时,initdb 仍会选择并初始化 libc 区域设置。

initdb 运行时会打印出它选择的区域设置。如果有复杂需求或者指定了多个选项,建议检查结果是否符合预期。

有关区域设置的更多细节见第 24.1 节。

要修改默认编码,请使用 --encoding。更多细节见第 24.3 节。

选项

-A authmethod
--auth=authmethod #

该选项指定 pg_hba.conf 中本地用户默认使用的认证方法(host 和 local 行)。有效值概览见第 21.1 节。

initdb 会使用指定的认证方法预填充 pg_hba.conf 条目,既用于非复制连接,也用于复制连接。

除非信任系统上的所有本地用户,否则不要使用 trust。为了便于安装,默认使用 trust。

--auth-host=authmethod #

该选项指定 pg_hba.conf 中本地用户通过 TCP/IP 连接时(host 行)使用的认证方法。

--auth-local=authmethod #

该选项指定 pg_hba.conf 中本地用户通过 Unix 域套接字连接时(local 行)使用的认证方法。

-D directory
--pgdata=directory #

该选项指定数据库集簇应存放的目录。这是 initdb 所需的唯一信息,但也可以通过设置 PGDATA 环境变量来省去显式写出它;这通常更方便,因为数据库服务器(postgres)之后也可以通过同一变量找到数据目录。

-E encoding
--encoding=encoding #

选择模板数据库的编码。这也将成为以后创建的任何数据库的默认编码,除非在创建时覆盖它。PostgreSQL 服务器支持的字符集见第 24.3.1 节。

默认情况下,模板数据库的编码从区域设置派生。如果指定了 --no-locale(或者等价地,区域设置为 C 或 POSIX),那么 ICU 提供程序的默认值为 UTF8,而 libc 提供程序的默认值为 SQL_ASCII。

-g
--allow-group-access #

允许与集簇拥有者同组的用户读取由 initdb 创建的所有集簇文件。该选项在 Windows 上会被忽略,因为它不支持 POSIX 风格的组权限。

--icu-locale=locale #

当使用 ICU 提供程序时,指定 ICU 区域设置。区域设置支持见第 24.1 节。

--icu-rules=rules #

指定附加的排序规则,以定制默认排序规则的行为。该选项仅支持 ICU。

-k
--data-checksums #

在数据页上使用校验和,帮助检测 I/O 系统造成的、否则可能悄无声息的数据损坏。启用校验和可能会带来明显的性能损失。如果启用,就会为所有数据库中的所有对象计算校验和。所有校验和失败都会在 pg_stat_database 视图中报告。详见第 30.2 节。

--locale=locale #

设置数据库集簇的默认区域设置。如果未指定该选项,区域设置将继承自 initdb 运行时所在的环境。区域设置支持见第 24.1 节。

--lc-collate=locale
--lc-ctype=locale
--lc-messages=locale
--lc-monetary=locale
--lc-numeric=locale
--lc-time=locale #

类似于 --locale,但只在指定的类别中设置区域设置。

--no-locale #

等价于 --locale=C。

--locale-provider={libc|icu} #

该选项设置新集簇中创建的数据库所使用的区域设置提供程序。后续创建新数据库时,可以在 CREATE DATABASE 命令中覆盖它。默认值为 libc(见第 24.1.4 节)。

-N
--no-sync #

默认情况下,initdb 会等待所有文件都安全写入磁盘。该选项使 initdb 在不等待的情况下返回,速度更快,但这意味着如果后续操作系统崩溃,数据目录可能会损坏。通常,该选项适用于测试,但不应用于创建生产环境安装。

--no-instructions #

默认情况下,initdb 会在其输出末尾写出如何启动集簇的说明。该选项会省略这些说明。它主要供那些对 initdb 进行平台特定封装的工具使用,因为在这种情况下那些说明很可能并不正确。

--pwfile=filename #

使 initdb 从文件中读取引导超级用户的密码。文件的第一行会被当作密码。

-S
--sync-only #

将所有数据库文件安全地写入磁盘并退出。这不会执行任何常规的 initdb 操作。通常,该选项可用于在将 fsync 从 off 改为 on 后,确保能够可靠恢复。

-T config
--text-search-config=config #

设置默认文本检索配置。更多信息见 default_text_search_config。

-U username
--username=username #

设置引导超级用户的用户名。默认值是运行 initdb 的操作系统用户名。

-W
--pwprompt #

使 initdb 提示输入要赋给引导超级用户的密码。如果不打算使用密码认证,这一点并不重要。否则,在设置密码之前将无法使用密码认证。

-X directory
--waldir=directory #

该选项指定预写式日志(WAL)应存放的目录。

--wal-segsize=size #

设置 WAL 段大小,单位为兆字节。这是 WAL 日志中每个单独文件的大小。默认大小为 16 兆字节。该值必须是 1 到 1024(兆字节)之间的 2 的幂。此选项只能在初始化期间设置,以后不能更改。

调整该大小可能有助于控制 WAL 日志传送或归档的粒度。此外,在 WAL 量很大的数据库中,每个目录中的 WAL 文件数量可能会成为性能和管理问题。增大 WAL 文件大小会减少 WAL 文件数量。

还提供了其他一些较少使用的选项:

-c name=value
--set name=value #

在 initdb 期间,强制将服务器参数 name 设为 value,并把该设置写入生成的 postgresql.conf 文件,以便在今后的服务器运行中生效。该选项可指定多次,以设置多个参数。它主要用于默认参数下服务器根本无法启动的环境。

-d
--debug #

打印引导后端的调试输出,以及少量普通用户通常不感兴趣的其他消息。引导后端是 initdb 用来创建系统目录表的程序。该选项会产生大量极其乏味的输出。

--discard-caches #

使用 debug_discard_caches=1 选项运行引导后端。这会花费很长时间,只对深度调试有用。

-L directory #

指定 initdb 初始化数据库集簇时应到哪里查找其输入文件。通常不需要这样做。若需要显式指定其位置,系统会提示。

-n
--no-clean #

默认情况下,如果 initdb 发现某个错误使其无法完整创建数据库集簇,就会删除它在发现无法完成任务之前可能已创建的所有文件。该选项会禁止这种清理,因此对调试有用。

其他选项:

-V
--version #

打印 initdb 版本并退出。

-?
--help #

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

环境

PGDATA #

指定数据库集簇应存放的目录;可使用 -D 选项覆盖。

PG_COLOR #

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

TZ #

指定所创建数据库集簇的默认时区。该值应为完整的时区名称(见第 8.5.3 节)。

注解

也可以通过 pg_ctl initdb 调用 initdb。

报告文档问题

阅读 上游文档. 通过 PostgreSQL 文档反馈表单.