Postgresql 中文操作指南

initdb

initdb - 创建新的 PostgreSQL 数据库集群

Synopsis

initdb [ option …​] [ —​pgdata | -D ] directory

Description

initdb 创建新的 PostgreSQL [role="bare"]glossary.html#GLOSSARY-DB-CLUSTER database cluster

创建数据库集群包括创建将存储集群数据的 [role="bare"]glossary.html#GLOSSARY-DATA-DIRECTORY directories ,生成共享目录表(属于整个集群而非特定数据库的表),以及创建 postgrestemplate1template0 数据库。 postgres 数据库是默认数据库,供用户、实用程序和第三方应用使用。 template1template0 作为源数据库,以后由 CREATE DATABASE 命令进行复制。永远不要修改 template0 ,但可以添加对象到 template1 ,默认情况下,这些对象将被复制到以后创建的数据库。有关详细信息,请参见 Section 23.3

尽管 initdb 将尝试创建指定的数据目录,但如果所需数据目录的父目录为 root 所有,它可能没有权限。要在这种情况下初始化,请以 root 权限创建一个空数据目录,然后使用 chown 为数据库用户帐户分配该目录的所有权,然后 su 成为运行 initdb 的数据库用户。

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

由于安全原因, initdb 创建的新集群默认情况下仅由集群所有者可以访问。 —​allow-group-access 选项允许与集群所有者在相同组中的任何用户读集群中的文件。这对非特权用户执行备份非常有用。

initdb 初始化数据库集群的默认语言环境和字符集编码。当创建每个数据库时也可以单独为其设置这些内容。 initdb 为模板数据库确定这些设置,这些设置将作为所有其他数据库的默认设置。

默认情况下, initdb 使用语言环境提供程序 libc (参见 Section 24.1.4 )。 libc 语言环境提供程序从环境中获取语言环境设置,并从语言环境设置中确定编码。

要为集群选择另一种语言环境,请使用选项 —​locale 。此外还有单独的选项 —​lc-*—​icu-locale (参见下文)来设置各个语言环境类别的值。请注意,不同语言环境类别的设置不一致会导致无意义的结果,因此应谨慎使用。

另外, initdb 可以使用 ICU 库通过指定 —​locale-provider=icu 来提供语言环境服务。必须使用 ICU 支持来构建服务器。要选择要应用的特定 ICU 语言环境 ID,请使用选项 —​icu-locale 。请注意,由于实现原因以及为了支持旧代码, initdb 在使用 ICU 语言环境提供程序时仍然会选择和初始化 libc 语言环境设置。

initdb 运行时,它将打印出已选择设置的语言环境。如果您有复杂的要求或指定了多个选项,建议检查结果是否与预期相符。

可在 Section 24.1 中找到有关区域设置的更多详情。

如需更改默认编码,请使用 —​encoding 。可在 Section 24.3 中找到更多详情。

Options

  • -A _authmethod—​auth=_authmethod #

    • 此选项指定在 pg_hba.conf ( hostlocal 行中) 中使用的本地用户默认验证方法。请查看 Section 21.1 了解有效值的概览。

    • initdb 将使用指定的验证方法为非复制以及复制连接填充 pg_hba.conf 条目。

    • 除非您信任系统上的所有本地用户,否则请勿使用 trusttrust 是安装简便性的默认选项。

  • —​auth-host=_authmethod_ #

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

  • —​auth-local=_authmethod_ #

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

  • -D _directory—​pgdata=_directory #

    • 此选项指定应当存储数据库集群的目录。这是 initdb 所需的唯一信息,但可通过设置 PGDATA 环境变量避免编写此信息,这样做很便捷,因为数据库服务器 ( postgres ) 稍后可以通过同一变量找到数据目录。

  • -E _encoding—​encoding=_encoding #

    • 选择模板数据库的编码。这还将是稍后创建的任何数据库的默认编码,但您在创建时可以覆盖此编码。PostgreSQL 服务器支持的字符集在 Section 24.3.1 中描述。

    • 默认情况下,模板数据库编码是从区域派生的。如果指定 —​no-locale (或等效地,如果区域是 CPOSIX ),则 ICU 提供程序的默认值是 UTF8 ,而 libc 提供程序的默认值是 SQL_ASCII

  • -g_—​allow-group-access_ #

    • 允许与集群所有者同组的用户读取 initdb 创建的所有集群文件。此选项在 Windows 中被忽略,因为它不支持 POSIX 样式的组权限。

  • —​icu-locale=_locale_ #

    • 当使用 ICU 提供程序时,指定 ICU 区域。区域支持在 Section 24.1 中说明。

  • —​icu-rules=_rules_ #

    • 指定其他校对规则,以自定义默认校对的行为。仅支持 ICU 使用此功能。

  • -k_—​data-checksums_ #

    • 在数据页上使用校验和有助于检测 I/O 系统对数据进行的损坏,否则将不会发现。启用校验和可能会影响明显的性能。如果设置,则将计算所有数据库中所有对象的所有校验和。所有校验和故障在 pg_stat_database 视图中报告。请参阅 Section 30.2 了解详情。

  • —​locale=_locale_ #

    • 设置数据库集群的默认区域。如果未指定此选项,则将从 initdb 运行所在的环境继承此区域。区域支持在 Section 24.1 中说明。

  • —​lc-collate=_locale—​lc-ctype=_locale—​lc-messages=locale—​lc-monetary=locale—​lc-numeric=locale—​lc-time=locale #

    • —​locale 类似,但只能设置指定类别中的区域。

  • —​no-locale #

    • Equivalent to —​locale=C.

  • —​locale-provider={_libc|icu}_ #

    • 此选项设置在新的集群中创建的数据库的区域提供程序。稍后创建新的数据库时可以在 CREATE DATABASE 命令中覆盖此设置。默认原则是 libc (请参阅 Section 24.1.4 )。

  • -N_—​no-sync_ #

    • 默认情况下, initdb 将等待直到所有文件安全写入磁盘。此选项导致 initdb 无需等待即可返回,速度更快,但表示紧随其后的操作系统崩溃会导致数据目录损坏。通常,此选项对于测试很有用,但不应在创建生产安装时使用。

  • —​no-instructions #

    • 默认情况下, initdb 会在输出结束时编写有关如何启动集群的说明。此选项导致不留下这些说明。这主要是供将 initdb 封装在特定于平台的行为中的工具使用,这些说明在此类工具中很可能不正确。

  • —​pwfile=_filename_ #

    • 使 initdb 从文件中读取引导超级用户的密码。该文件的首行将作为密码。

  • -S_—​sync-only_ #

    • 安全地将所有数据库文件写入磁盘并退出。这不会执行任何常规的 initdb 操作。通常,此选项对于确保 fsyncoff 更改到 on 之后实现可靠的恢复很有用。

  • -T _config—​text-search-config=_config #

  • -U _username—​username=_username #

    • 设置 [role="bare"]glossary.html#GLOSSARY-BOOTSTRAP-SUPERUSER bootstrap superuser 的用户名。这默认为运行 initdb 的操作系统用户的名称。

  • -W_—​pwprompt_ #

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

  • -X _directory—​waldir=_directory #

    • 此选项指定写前日志应存储的目录。

  • —​wal-segsize=_size_ #

    • 以兆字节为单位设置 WAL segment size 。这是 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 命令行参数的帮助,并退出。

Environment

  • PGDATA #

    • 指定数据库集群所在目录;可以使用 -D 选项覆盖。

  • PG_COLOR #

    • 指定是否在诊断消息中使用颜色。可能的值为 alwaysautonever

  • TZ #

    • 指定所创建数据库集群的默认时区。此值应为完整的时区名称(见 Section 8.5.3 )。

此实用程序与大多数其他 PostgreSQL 实用程序一样,还使用 libpq 支持的环境变量(请参阅 Section 34.15 )。

Notes

也可以通过 pg_ctl initdb 调用 initdb

See Also