initdb — 创建一个新的 PostgreSQL 数据库集群
initdb [选项...] [ --pgdata | -D ] 目录
initdb 创建一个新的 PostgreSQL 数据库集群。
创建数据库集群包括创建集群数据所在的目录,生成共享目录表(属于整个集群而不是任何特定数据库的表),并创建 postgres、 template1 和 template0 数据库。postgres 数据库是一个默认数据库,供用户、实用程序和第三方应用程序使用。template1 和 template0 用作后续 CREATE DATABASE 命令复制的源数据库。template0 永远不应该被修改,但是您可以向 template1 添加对象,默认情况下,这些对象将被复制到稍后创建的数据库中。有关更多详细信息,请参阅第 22.3 节。
尽管 initdb 将尝试创建指定的数据目录,但如果所需数据目录的父目录归 root 所有,则它可能没有权限。要在此设置中初始化,请以 root 身份创建一个空数据目录,然后使用 chown 将该目录的所有权分配给数据库用户帐户,然后使用 su 成为数据库用户来运行 initdb。
initdb 必须以将拥有服务器进程的用户身份运行,因为服务器需要访问 initdb 创建的文件和目录。由于服务器不能以 root 身份运行,因此您也不得使用 root 身份运行 initdb。(实际上它会拒绝这样做。)
出于安全原因,默认情况下,由 initdb 创建的新集群只能由集群所有者访问。--allow-group-access 选项允许与集群所有者位于同一组中的任何用户读取集群中的文件。这对于以非特权用户身份执行备份很有用。
initdb 初始化数据库集群的默认区域设置和字符集编码。这些也可以在创建每个数据库时单独设置。initdb 确定模板数据库的这些设置,这些设置将作为所有其他数据库的默认设置。
默认情况下,initdb 使用区域设置提供程序 libc (请参阅第 23.1.4 节)。libc 区域设置提供程序从环境中获取区域设置,并从区域设置中确定编码。
要为集群选择不同的区域设置,请使用选项 --locale。还有一些单独的选项 --lc-* 和 --icu-locale (见下文)来设置各个区域设置类别的值。请注意,不同区域设置类别的不一致设置可能会导致无意义的结果,因此应谨慎使用。
或者,initdb 可以通过指定 --locale-provider=icu 来使用 ICU 库来提供区域设置服务。服务器必须构建为支持 ICU。要选择要应用的特定 ICU 区域设置 ID,请使用选项 --icu-locale。请注意,出于实现原因和支持遗留代码的需要,当使用 ICU 区域设置提供程序时,initdb 仍将选择和初始化 libc 区域设置。
当 initdb 运行时,它将打印出它选择的区域设置。如果您有复杂的要求或指定了多个选项,建议检查结果是否与预期匹配。
有关区域设置的更多详细信息,请参阅第 23.1 节。
要更改默认编码,请使用 --encoding。更多详细信息,请参阅第 23.3 节。
-A authmethod--auth=authmethod #此选项指定在 pg_hba.conf(host 和 local 行)中使用的本地用户的默认身份验证方法。有关有效值的概述,请参阅第 20.1 节。
initdb 将使用指定的身份验证方法为非复制以及复制连接预填充 pg_hba.conf 条目。
除非您信任系统上的所有本地用户,否则不要使用 trust。为方便安装,trust 是默认设置。
--auth-host=authmethod #此选项指定通过 TCP/IP 连接的本地用户在 pg_hba.conf(host 行)中使用的身份验证方法。
--auth-local=authmethod #此选项指定通过 Unix 域套接字连接的本地用户在 pg_hba.conf(local 行)中使用的身份验证方法。
-D directory--pgdata=directory #此选项指定应存储数据库集群的目录。这是 initdb 唯一需要的信息,但是您可以通过设置 PGDATA 环境变量来避免编写它,这很方便,因为数据库服务器 (postgres) 稍后可以通过相同的变量找到数据目录。
-E encoding--encoding=encoding #选择模板数据库的编码。这也将是您稍后创建的任何数据库的默认编码,除非您那时覆盖它。PostgreSQL 服务器支持的字符集在第 23.3.1 节中描述。
默认情况下,模板数据库编码是从区域设置派生的。如果指定了--no-locale (或等效地,如果区域设置为 C 或 POSIX),则对于 ICU 提供程序,默认值为 UTF8 ,对于 libc 提供程序,默认值为 SQL_ASCII。
-g--allow-group-access #允许与集群所有者位于同一组中的用户读取 initdb 创建的所有集群文件。此选项在 Windows 上被忽略,因为它不支持POSIX-样式组权限。
--icu-locale=locale #指定使用 ICU 提供程序时的 ICU 区域设置。区域设置支持在第 23.1 节中描述。
--icu-rules=rules #指定其他排序规则以自定义默认排序规则的行为。仅 ICU 支持此功能。
-k--data-checksums #在数据页上使用校验和,以帮助检测 I/O 系统造成的静默数据损坏。启用校验和可能会导致明显的性能下降。如果设置此选项,将为所有数据库中的所有对象计算校验和。所有校验和失败都将在 pg_stat_database 视图中报告。有关详细信息,请参阅第 28.2 节。
--locale=locale #设置数据库集群的默认区域设置。如果未指定此选项,则区域设置将从运行 initdb 的环境中继承。区域设置支持在第 23.1 节中描述。
如果 --locale-provider 是 builtin,则必须指定 --locale 或 --builtin-locale,并且设置为 C 或 C.UTF-8。
--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 #指定使用内置提供程序时的区域设置名称。区域设置支持在第 23.1 节中描述。
--locale-provider={builtin|libc|icu} #此选项为在新集群中创建的数据库设置区域设置提供程序。在随后创建新数据库时,可以在 CREATE DATABASE 命令中覆盖此选项。默认值为 libc(请参阅第 23.1.4 节)。
--pwfile=filename #使 initdb 从文件中读取引导超级用户的密码。文件的第一行被视为密码。
-T config--text-search-config=config #设置默认的文本搜索配置。有关更多信息,请参阅default_text_search_config。
-U username--username=username #设置引导超级用户的用户名。默认为运行 initdb 的操作系统用户的名称。
-W--pwprompt #使 initdb 提示输入密码,以提供给引导超级用户。如果您不打算使用密码身份验证,则这并不重要。否则,在设置密码之前,您将无法使用密码身份验证。
-X directory--waldir=directory #此选项指定应存储预写日志的目录。
--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-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 后进行可靠的恢复很有用。
其他选项
initdb 也可以通过 pg_ctl initdb 调用。
如果您在文档中发现任何不正确、与您使用特定功能的体验不符或需要进一步澄清的内容,请使用此表单来报告文档问题。