initdb — 创建一个新的PostgreSQL数据库集簇
initdb
[option
...] [ --pgdata
| -D
] directory
initdb
创建一个新的PostgreSQL数据库集簇。一个数据库集簇是由一个单一服务器实例管理的数据库的集合。
创建数据库集群包括创建数据库数据将存放的目录,生成共享目录表(属于整个集群而不是任何特定数据库的表),
并创建postgres
,template1
和template0
数据库。
postgres
数据库是一个默认数据库,供用户、工具和第三方应用程序使用。
template1
和template0
被用作后续CREATE DATABASE
命令复制的源数据库。
template0
不应该被修改,但可以向template1
添加对象,默认情况下这些对象将被复制到后续创建的数据库中。
更多详细信息请参见第 23.3 节。
尽管initdb
将尝试创建指定的数据目录,它可能没有权限(如果想要的数据目录的父目录被根用户拥有)。要在这样一种设置中初始化,作为 root 创建一个空数据目录,然后使用chown
将该目录赋予给数据库用户账户,再然后su
成为该数据库用户并运行initdb
。
initdb
必须以将拥有该服务器进程的用户运行,因为该服务器需要访问initdb
创建的文件和目录。因为该服务器不能作为 root 运行,你不能以 root 运行initdb
(事实上它会拒绝这样做)。
由于安全原因,由initdb
创建的新集簇默认将只能由集簇拥有者访问。--allow-group-access
选项允许与集簇拥有者同组的任何用户读取集簇中的文件。这对非特权用户执行备份很有用。
initdb
初始化数据库集群的默认区域设置和字符集编码。这些也可以在每个数据库创建时单独设置。
initdb
确定模板数据库的这些设置,这将作为所有其他数据库的默认设置。
默认情况下,initdb
使用区域设置提供程序libc
,从环境中获取区域设置,并根据区域设置确定编码。
这几乎总是足够的,除非有特殊要求。
要为集群选择不同的区域设置,请使用选项
--locale
。还有一些单独的选项
--lc-*
(见下文)用于设置各个区域设置的值。
请注意,不同区域设置的不一致可能导致荒谬的结果,因此应谨慎使用。
或者,ICU库可以用来提供区域设置服务。
(同样,这仅设置随后创建的数据库的默认值。)要选择此选项,请指定--locale-provider=icu
。
要选择要应用的特定ICU区域设置ID,请使用选项--icu-locale
。请注意,
出于实现原因和支持旧代码,
当使用ICU区域提供程序时,initdb
仍将选择并初始化libc区域设置。
当initdb
运行时,它会打印出所选择的区域设置。如果您有复杂的要求或指定了多个选项,
建议检查结果是否符合预期。
更多有关区域设置的详细信息可以在第 24.1 节中找到。
要修改默认编码,使用--encoding
。详见第 24.3 节.
-A authmethod
--auth=authmethod
这个选项指定了用于pg_hba.conf
(host
和local
行)中使用的本地用户的默认身份验证方法。
有关有效值的概述,请参阅第 21.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
选择模板数据库的编码。这也将是以后创建的任何数据库的默认编码,除非您在那时覆盖它。
如果使用libc区域提供程序,默认值是从区域设置派生的;如果使用ICU区域提供程序,则为UTF8
。
PostgreSQL服务器支持的字符集在第 24.3.1 节中描述。
-g
--allow-group-access
允许与集群所有者在同一组中的用户读取由initdb
创建的所有集群文件。
此选项在Windows上被忽略,因为它不支持POSIX风格的组权限。
--icu-locale=locale
指定ICU区域设置ID,如果使用ICU区域设置提供程序。
-k
--data-checksums
使用数据页上的校验和来帮助检测I/O系统可能会默默发生的损坏。启用校验和可能会导致明显的性能损失。如果设置了校验和,将为所有对象在所有数据库中计算校验和。所有校验失败将在
pg_stat_database
视图中报告。详细信息请参见第 30.2 节。
--locale=locale
设置数据库集群的默认区域设置。如果未指定此选项,则区域设置将从initdb
运行的环境继承。
区域设置支持在第 24.1 节中描述。
--lc-collate=locale
--lc-ctype=locale
--lc-messages=locale
--lc-monetary=locale
--lc-numeric=locale
--lc-time=locale
类似于--locale
,但仅在指定的类别中设置区域设置。
--no-locale
等同于--locale=C
。
--locale-provider={libc
|icu
}
这个选项设置了新集群中创建的数据库的区域设置提供程序。在后续创建新数据库时,
可以在CREATE DATABASE
命令中覆盖它。默认值是libc
。
-N
--no-sync
默认情况下,initdb
将等待所有文件被安全写入磁盘。
此选项导致initdb
在不等待的情况下返回,这样更快,
但意味着随后的操作系统崩溃可能会使数据目录损坏。通常,此选项在测试时很有用,
但在创建生产安装时不应使用。
--no-instructions
默认情况下,initdb
会在输出的末尾写入启动集群的说明。
此选项会导致省略这些说明。这主要是为了供将initdb
包装在特定平台行为中的工具使用,
在那些说明可能不正确的情况下。
--pwfile=filename
使initdb
从文件中读取数据库超级用户的密码。文件的第一行被作为密码。
-S
--sync-only
安全地将所有数据库文件写入磁盘并退出。这不执行任何正常的initdb操作。
通常,此选项对于在将fsync从off
更改为on
后确保可靠恢复很有用。
-T config
--text-search-config=config
设置默认的文本搜索配置。 有关更多信息,请参见default_text_search_config。
-U username
--username=username
选择数据库超级用户的用户名。默认情况下,这是运行initdb
的有效用户的名称。
超级用户的名称并不重要,但可以选择保留惯用名称postgres,即使操作系统用户的名称不同。
-W
--pwprompt
使initdb
提示输入密码,以赋予数据库超级用户权限。如果您不打算使用密码验证,这并不重要。
否则,您将无法使用密码验证,直到设置了密码为止。
-X directory
--waldir=directory
这个选项指定了预写日志应该存储的目录。
--wal-segsize=size
设置WAL段大小,单位为兆字节。这是WAL日志中每个单独文件的大小。 默认大小为16兆字节。该值必须是1到1024(兆字节)之间的2的幂。此选项只能在初始化期间设置, 以后不能更改。
调整这个大小可能是有用的,以控制WAL日志传送或归档的粒度。此外,在具有大量WAL的数据库中,每个目录中的WAL文件数量之多可能会成为性能和管理问题。增加WAL文件大小将减少WAL文件数量。
其他较少使用的选项:
-d
--debug
打印来自引导后端的调试输出以及普通大众不那么感兴趣的一些消息。引导后端被程序initdb
用来创建目录表。这个选项会生成大量极端无聊的输出。
-−discard-caches
使用debug_discard_caches=1
选项运行引导程序后端。
这需要很长时间并且只适用于深度调试。
-L directory
指定initdb
应从哪里寻找它的输入文件来初始化数据库集簇。这通常没有必要。如果你需要显式指定它们的位置,你应该被告知。
-n
--no-clean
默认情况下,当initdb
确定有一个错误阻止它完整地创建数据库集簇,它会移除在它发现无法完成任务之前创建的任何文件。这个选项会抑制这种整理并且对调试有用。
其他选项:
-V
--version
打印initdb版本并退出。
-?
--help
显示有关initdb命令行参数的帮助并退出。
PGDATA
指定数据库集簇应该被存放的目录,可以使用-D
选项覆盖。
PG_COLOR
规定在诊断消息中是否使用颜色。可能的值为always
、 auto
、never
。
TZ
指定创建的数据集簇的默认时区。值应该是一个完整的时区名称(见第 8.5.3 节)。
和大部分其他PostgreSQL工具相似,这个工具也使用libpq(见第 34.15 节)支持的环境变量。
initdb
可以通过pg_ctl initdb
被调用。