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
调用。
如果您在文档中发现任何不正确、与您使用特定功能的体验不符或需要进一步澄清的内容,请使用此表单来报告文档问题。