Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17

initdb

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

语法

initdb [option...] [ --pgdata | -D ] 目录

描述

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

创建数据库集群包括为集群数据创建目录(这些目录将容纳集群数据)、生成共享目录表(属于整个集群而不是任何特定数据库的表)以及创建postgrestemplate1template0数据库。postgres数据库是一个默认数据库,旨在供用户、实用程序和第三方应用程序使用。template1template0旨在作为源数据库,供以后的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 身份验证方法
--auth=身份验证方法 #

该选项指定 pg_hba.confhostlocal 行)中本地用户使用的默认身份验证方法。请参见 第 20.1 节,以获取有效值的概述。

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

除非您信赖系统上的所有本地用户,否则请勿使用 trust。为了便于安装,trust 是默认设置。

--auth-host=authmethod #

该选项指定在 pg_hba.confhost 行)中使用 TCP/IP 连接的本地用户的身份验证方法。

--auth-local=authmethod #

该选项指定在 pg_hba.conflocal 行)中使用 Unix 域套接字连接的本地用户的身份验证方法。

-D 目录
--pgdata=目录 #

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

-E 编码
--encoding=编码 #

选择模板数据库的编码。除非以后进行覆盖,否则这也是您以后创建的任何数据库的默认编码。 PostgreSQL 服务器支持的字符集已在 第 23.3.1 节 中进行了说明。

默认情况下,模板数据库编码是从语言环境派生的。如果指定了 --no-locale(或者,如果语言环境是 CPOSIX),那么对于 ICU 提供程序,默认值为 UTF8,对于 libc 提供程序,默认值为 SQL_ASCII

-g
--allow-group-access #

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

--icu-locale=语言环境 #

当使用 ICU 提供程序时,指定 ICU 语言环境。语言环境支持已在 第 23.1 节 中进行了说明。

--icu-rules=规则 #

指定其他对照规则以自定义默认对照行为。仅对 ICU 提供支持。

-k
--data-checksums #

对数据页面上的校验和进行使用,以便有助于检测 I/O 系统不会发出警报而导致的损坏。启用校验和可能会产生明显的性能损失。如果已设置,则在所有数据库中的所有对象都会计算校验和。所有校验和故障都将在 pg_stat_database 视图中进行报告。有关详细信息,请参见 第 28.2 节

--locale=locale #

设置数据库集群的默认区域设置。如果未指定此选项,则区域设置会从运行 initdb 的环境中继承。区域设置说明在 第 23.1 节 中进行了描述。

如果 --locale-providerbuiltin,则必须指定并设置 --locale--builtin-localeCC.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 段大小(以 MB 为单位)。这是 WAL 日志中每个单独文件的大小。默认大小为 16 MB。值必须为介于 1 和 1024(MB)之间的 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 目录 #

指定 initdb 应在何处查找其输入文件以初始化数据库集群。这通常是没有必要的。如果您需要明确指定其位置,将会得到提示。

-n
--no-clean #

默认情况下,当 initdb 确定错误阻止其完全创建数据库集群时,它将删除在发现无法完成任务之前可能创建的任何文件。此选项禁止清理,因此对于调试很有用。

-N
--no-sync #

默认情况下,initdb 将等待所有文件安全地写入磁盘。此选项导致 initdb 在不等待的情况下返回,速度更快,但意味着操作系统后续崩溃可能会导致数据目录损坏。通常,此选项对于测试来说很有用,但创建生产安装时不应使用。

--no-instructions #

默认情况下,initdb 会在其输出的末尾写下有关如何启动集群的说明。此选项导致省略这些说明。这主要用于包装 initdb 的工具中,这些工具在特定于平台的行为中,其中这些说明可能是错误的。

-s
--show #

显示内部设置并退出,而不执行任何其他操作。这可用于调试 initdb 安装。

--sync-method=方法 #

设置为 fsync(这是默认值)时,initdb 将递归打开并同步数据目录中的所有文件。对文件的搜索将遵循 WAL 目录的符号链接和每个已配置表空间的符号链接。

在 Linux 上,可以使用 syncfs 要求操作系统同步包含数据目录、WAL 文件和每个表空间的文件系统。请参阅 recovery_init_sync_method 以了解在使用 syncfs 时需要注意的注意事项。

使用 --no-sync 时,此选项没有效果。

-S
--sync-only #

将所有数据库文件安全地写入磁盘,然后退出。这不会执行任何正常的 initdb 操作。通常情况下,这个选项对于确保可靠的恢复功能很有用,在 章节 18.3.7 中将 fsyncoff 改为 on 之后。

其他选项

-V
--version #

打印 initdb 版本,然后退出。

-?
--help #

显示 initdb 命令行参数的帮助,然后退出。

环境

PGDATA #

指定存储数据库集群的目录;可以使用 -D 选项来覆盖。

PG_COLOR #

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

TZ #

指定创建的数据库集群的默认时区。这个值应当是一个完整的时区名称(参见 章节 8.5.3)。

备注

还可以通过 pg_ctl initdb 调用 initdb

另请参见

pg_ctlpostgres章节 20.1