initdb — 创建一个新的PostgreSQL数据库集簇
initdb [option...] [ --pgdata | -D ] directory
initdb创建一个新的PostgreSQL数据库集簇。数据库集簇是由单个服务器实例管理的一组数据库。
创建数据库集簇包括创建用于存放数据库数据的目录,生成共享系统目录表(属于整个集簇而不是某个特定数据库的表),以及创建template1和postgres数据库。以后创建新数据库时,会复制template1数据库中的所有内容。(因此,安装在template1中的任何东西都会自动复制到以后创建的每个数据库中。)postgres数据库是一个默认数据库,供用户、工具程序和第三方应用程序使用。
虽然initdb会尝试创建指定的数据目录,但如果所需数据目录的父目录归 root 所有,它可能没有足够的权限。要在这种环境中初始化,可先由 root 创建一个空的数据目录, 然后用chown将该目录的所有权赋予数据库用户账户,再用 su切换为该数据库用户来运行initdb。
initdb必须以将拥有服务器进程的用户身份运行,因为服务器需要访问 initdb创建的文件和目录。由于服务器不能以 root 身份运行,因此 也绝不能以 root 身份运行initdb。(实际上它会拒绝这样做。)
出于安全原因,initdb创建的新集簇默认只有集簇拥有者可以访问。 --allow-group-access 选项允许与集簇拥有者同组的任何用户读取集簇中的文件。 这对由非特权用户执行备份很有用。
initdb会初始化数据库集簇的默认区域设置和字符集编码。字符集编码、排序顺序(LC_COLLATE)和字符集分类(LC_CTYPE,例如大写、小写、数字)可以在创建数据库时单独设置。initdb为template1数据库确定这些设置,它们将作为所有其他数据库的默认值。
要更改默认排序顺序或字符集分类,请使用--lc-collate和--lc-ctype选项。使用C或POSIX之外的排序顺序也会带来性能损失。因此,在运行initdb时选择正确的区域设置很重要。
其余区域设置类别可以在以后启动服务器时更改。还可以使用--locale设置所有区域设置类别的默认值,包括排序顺序和字符集分类。所有服务器区域设置值(lc_*)都可以通过SHOW ALL显示。更多细节见Section 23.1。
要修改默认编码,请使用--encoding。更多细节见 Section 23.3。
-A authmethod--auth=authmethod此选项指定pg_hba.conf中本地用户使用的默认认证方法(host和local行)。initdb会使用指定的认证方法,为非复制连接和复制连接预先填充pg_hba.conf条目。
除非信任系统上的所有本地用户,否则不要使用trust。为便于安装,默认值为trust。
--auth-host=authmethod该选项指定pg_hba.conf中本地用户通过 TCP/IP 连接时 (host 行)使用的认证方法。
--auth-local=authmethod该选项指定pg_hba.conf中本地用户通过 Unix 域套接字连接时 (local 行)使用的认证方法。
-D directory--pgdata=directory该选项指定数据库集簇应存放的目录。这是initdb所需的唯一信息, 但也可以通过设置PGDATA环境变量来省去显式写出它;这通常更方便,因为 数据库服务器(postgres)之后也可以通过同一变量找到数据目录。
-E encoding--encoding=encoding选择模板数据库的编码。这也会成为以后创建的任何数据库的默认编码,除非在创建时覆盖它。默认值由区域设置推导而来,如果无法推导,则使用SQL_ASCII。PostgreSQL服务器支持的字符集在Section 23.3.1中介绍。
-g--allow-group-access #允许与集簇拥有者同组的用户读取由initdb创建的所有集簇文件。 该选项在Windows上会被忽略,因为它不支持 POSIX 风格的组权限。
-k--data-checksums #在数据页上使用校验和,帮助检测 I/O 系统造成的、否则可能悄无声息的数据损坏。启用校验和可能会带来明显的性能损失。此选项只能在初始化时设置,以后不能更改。如果启用,就会为所有数据库中的所有对象计算校验和。
--locale=locale设置数据库集簇的默认区域设置。如果未指定该选项,区域设置将继承自 initdb运行时所在的环境。区域设置支持见 Section 23.1。
--lc-collate=locale--lc-ctype=locale--lc-messages=locale--lc-monetary=locale--lc-numeric=locale--lc-time=locale类似于--locale,但只在指定的类别中设置区域设置。
--no-locale等价于--locale=C。
-N--no-sync默认情况下,initdb会等待所有文件安全写入磁盘。此选项使initdb不等待就返回,速度更快,但意味着此后操作系统崩溃可能会造成数据目录损坏。通常,此选项适用于测试,但不应在创建生产安装时使用。
--pwfile=filename使initdb从文件中读取引导超级用户的密码。文件的第一行会被当作密码。
-S--sync-only将所有数据库文件安全写入磁盘,然后退出。这不会执行任何常规initdb操作。
-T config--text-search-config=config设置默认文本搜索配置。更多信息见 default_text_search_config。
-U username--username=username选择数据库超级用户的用户名。默认值是运行 initdb的实际用户名称。超级用户的名称本身 并不重要,不过即使操作系统用户名称不同,人们也可能选择沿用惯常 的名称postgres。
-W--pwprompt使initdb提示输入要赋给引导超级用户的密码。如果不打算使用密码认证, 这一点并不重要。否则,在设置密码之前将无法使用密码认证。
-X directory--waldir=directory该选项指定预写式日志(WAL)应存放的目录。
--wal-segsize=size设置WAL 段大小,单位为兆字节。这是 WAL 日志中每个单独文件的大小。 默认大小为 16 兆字节。该值必须是 1 到 1024(兆字节)之间的 2 的幂。 此选项只能在初始化期间设置,以后不能更改。
调整该大小可能有助于控制 WAL 日志传送或归档的粒度。此外,在 WAL 量很大的数据库中, 每个目录中的 WAL 文件数量可能会成为性能和管理问题。增大 WAL 文件大小会减少 WAL 文件数量。
还可以使用以下较少用到的选项:
-d--debug打印引导后端的调试输出,以及少量普通用户通常不感兴趣的其他消息。引导后端是 initdb用来创建系统目录表的程序。该选项会产生大量极其乏味的输出。
-L directory指定initdb初始化数据库集簇时应到哪里查找其输入文件。通常不需要这样做。 若需要显式指定其位置,系统会提示。
-n--no-clean默认情况下,如果initdb发现某个错误使其无法完整创建数据库集簇, 就会删除它在发现无法完成任务之前可能已创建的所有文件。该选项会禁止这种清理,因此对调试有用。
其他选项:
-V--version打印initdb版本并退出。
-?--help显示有关initdb命令行参数的帮助并退出。
PGDATA指定数据库集簇应存放的目录;可使用-D选项覆盖。
TZ指定所创建数据库集簇的默认时区。该值应为完整的时区名称 (见Section 8.5.3)。
与大多数其他PostgreSQL工具程序一样,此工具也使用libpq支持的环境变量(参见Section 34.14)。
也可以通过pg_ctl initdb调用initdb。