initdb — 创建一个新的PostgreSQL数据库集簇
initdb [option...] [ --pgdata | -D ] directory
initdb创建一个新的PostgreSQL 数据库集簇。
创建数据库集簇包括创建用于存放集簇数据的 目录, 生成共享系统目录表(属于整个集簇而不是某个特定数据库的表),以及创建 postgres、template1 和 template0 数据库。postgres 数据库是一个默认数据库,供用户、工具程序和第三方应用程序使用。 template1 和 template0 用作后续CREATE DATABASE命令复制的源数据库。 template0 不应被修改,但可以向 template1 中添加对象,这些对象默认会被复制到以后创建的数据库中。 更多细节见Section 22.3。
虽然initdb会尝试创建指定的数据目录,但如果所需数据目录的父目录归 root 所有,它可能没有足够的权限。要在这种环境中初始化,可先由 root 创建一个空的数据目录, 然后用chown将该目录的所有权赋予数据库用户账户,再用 su切换为该数据库用户来运行initdb。
initdb必须以将拥有服务器进程的用户身份运行,因为服务器需要访问 initdb创建的文件和目录。由于服务器不能以 root 身份运行,因此 也绝不能以 root 身份运行initdb。(实际上它会拒绝这样做。)
出于安全原因,initdb创建的新集簇默认只有集簇拥有者可以访问。 --allow-group-access 选项允许与集簇拥有者同组的任何用户读取集簇中的文件。 这对由非特权用户执行备份很有用。
initdb会初始化数据库集簇的默认区域设置和字符集编码。这些设置也可以在 创建每个数据库时分别设置。initdb为模板数据库确定这些设置,它们将 作为所有其他数据库的默认值。
默认情况下,initdb使用libc区域设置提供程序 (见Section 23.1.4)。libc区域设置提供程序会 从环境中获取区域设置,并根据区域设置确定编码。
要为集簇选择不同的区域设置,请使用--locale。此外还有单独的 --lc-* 和 --icu-locale 选项(见下文),用于为各个 区域设置类别设置值。请注意,不同区域设置类别之间若设置不一致,可能产生不合理的结果,因此应谨慎使用。
另一种方式是指定--locale-provider=icu,让initdb 使用 ICU 库提供区域设置服务。服务器必须在构建时启用 ICU 支持。要选择具体要应用的 ICU 区域设置 ID,请使用--icu-locale。请注意,出于实现原因以及对旧代码的支持, 在使用 ICU 区域设置提供程序时,initdb仍会选择并初始化 libc 区域设置。
initdb运行时会打印出它选择的区域设置。如果有复杂需求或者指定了多个选项, 建议检查结果是否符合预期。
有关区域设置的更多细节见Section 23.1。
要修改默认编码,请使用--encoding。更多细节见 Section 23.3。
-A authmethod--auth=authmethod #该选项指定pg_hba.conf中本地用户默认使用的认证方法 (host 和 local 行)。有效值概览见 Section 20.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服务器支持的字符集见 Section 23.3.1。
默认情况下,模板数据库的编码从区域设置派生。如果指定了 --no-locale(或者等价地,区域设置为 C 或 POSIX),那么 ICU 提供程序的默认值为 UTF8,而 libc 提供程序的默认值为 SQL_ASCII。
-g--allow-group-access #允许与集簇拥有者同组的用户读取由initdb创建的所有集簇文件。 该选项在Windows上会被忽略,因为它不支持 POSIX 风格的组权限。
--icu-locale=locale #当使用 ICU 提供程序时,指定 ICU 区域设置 ID。区域设置支持见 Section 23.1。
--icu-rules=rules #指定附加的排序规则,以定制默认排序规则的行为。该选项仅支持 ICU。
-k--data-checksums #对数据页启用校验和,以帮助检测原本会悄无声息发生的、由 I/O 系统导致的损坏。 该项默认启用;使用--no-data-checksums可禁用校验和。
启用校验和可能会带来小幅性能损失。如果启用,就会为所有数据库中的所有对象计算校验和。 所有校验和失败都会在 pg_stat_database视图中报告。详见 Section 28.2。
--locale=locale #设置数据库集簇的默认区域设置。如果未指定该选项,区域设置将继承自 initdb运行时所在的环境。区域设置支持见 Section 23.1。
如果--locale-provider为builtin, 则必须指定--locale或--builtin-locale, 并将其设置为C、C.UTF-8或 PG_UNICODE_FAST。
--lc-collate=locale--lc-ctype=locale--lc-messages=locale--lc-monetary=locale--lc-numeric=locale--lc-time=locale #类似于--locale,但只在指定的类别中设置区域设置。
--no-locale #等价于--locale=C。
--builtin-locale=locale #当使用 builtin 提供程序时,指定区域设置名称。区域设置支持见 Section 23.1。
--locale-provider={builtin|libc|icu} #该选项设置新集簇中创建的数据库所使用的区域设置提供程序。后续创建新数据库时, 可以在CREATE DATABASE命令中覆盖它。默认值为 libc(见Section 23.1.4)。
--no-data-checksums #不启用数据校验和。
--pwfile=filename #使initdb从文件中读取引导超级用户的密码。文件的第一行会被当作密码。
-T config--text-search-config=config #设置默认文本搜索配置。更多信息见 default_text_search_config。
-U username--username=username #选择数据库超级用户的用户名。默认值是运行 initdb的实际用户名称。超级用户的名称本身 并不重要,不过即使操作系统用户名称不同,人们也可能选择沿用惯常 的名称postgres。
-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发现某个错误使其无法完整创建数据库集簇, 就会删除它在发现无法完成任务之前可能已创建的所有文件。该选项会禁止这种清理,因此对调试有用。
-N--no-sync #默认情况下,initdb会等待所有文件都安全写入磁盘。该选项使 initdb在不等待的情况下返回,速度更快,但这意味着如果后续操作系统崩溃, 数据目录可能会损坏。通常,该选项适用于测试,但不应用于创建生产环境安装。
--no-sync-data-files #默认情况下,initdb会将所有数据库文件安全地写入磁盘。 该选项指示initdb跳过同步各个数据库目录中的所有文件、这些数据库目录本身 以及表空间目录,也就是base子目录中的所有内容和任何其他表空间目录。 其他文件,例如pg_wal和pg_xact中的文件, 仍会被同步,除非也指定了--no-sync。
请注意,如果--no-sync-data-files与 --sync-method=syncfs一起使用,上述部分或全部文件与目录仍会被同步, 因为syncfs处理的是整个文件系统。
该选项主要供那些会另行确保这些被跳过文件已同步到磁盘的工具在内部使用。
--no-instructions #默认情况下,initdb会在其输出末尾写出如何启动集簇的说明。 该选项会省略这些说明。它主要供那些对initdb进行平台特定封装的工具使用, 因为在这种情况下那些说明很可能并不正确。
-s--show #显示内部设置并退出,不执行其他操作。可用于调试initdb的安装。
--sync-method=method #设为fsync(默认值)时,initdb会递归打开并同步 数据目录中的所有文件。查找文件时会跟随 WAL 目录和每个已配置表空间的符号链接。
在 Linux 上,也可以改用syncfs,请求操作系统同步包含数据目录、 WAL 文件以及每个表空间的整个文件系统。使用syncfs时需注意的事项见 recovery_init_sync_method。
使用--no-sync时,该选项不起作用。
-S--sync-only #将所有数据库文件安全地写入磁盘并退出。这不会执行任何常规的 initdb操作。通常,该选项可用于在将 fsync从off改为on后, 确保能够可靠恢复。
其他选项:
PGDATA #指定数据库集簇应存放的目录;可使用-D选项覆盖。
PG_COLOR #指定是否在诊断消息中使用颜色。可能的值为always、 auto和never。
TZ #指定所创建数据库集簇的默认时区。该值应为完整的时区名称 (见Section 8.5.3)。
也可以通过pg_ctl initdb调用initdb。
如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。