initdb
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 显示。更多细节见第 23.1 节。
要修改默认编码,请使用 --encoding。更多细节见第 23.3 节。
选项
-Aauthmethod--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行)使用的认证方法。-Ddirectory--pgdata=directory该选项指定数据库集簇应存放的目录。这是
initdb所需的唯一信息,但也可以通过设置PGDATA环境变量来省去显式写出它;这通常更方便,因为数据库服务器(postgres)之后也可以通过同一变量找到数据目录。-Eencoding--encoding=encoding选择模板数据库的编码。这也会成为以后创建的任何数据库的默认编码,除非在创建时覆盖它。默认值由区域设置推导而来,如果无法推导,则使用
SQL_ASCII。PostgreSQL 服务器支持的字符集在第 23.3.1 节中介绍。-g--allow-group-access#允许与集簇拥有者同组的用户读取由
initdb创建的所有集簇文件。该选项在 Windows 上会被忽略,因为它不支持 POSIX 风格的组权限。-k--data-checksums#在数据页上使用校验和,帮助检测 I/O 系统造成的、否则可能悄无声息的数据损坏。启用校验和可能会带来明显的性能损失。如果启用,就会为所有数据库中的所有对象计算校验和。所有校验和失败都会在 pg_stat_database 视图中报告。
--locale=locale设置数据库集簇的默认区域设置。如果未指定该选项,区域设置将继承自
initdb运行时所在的环境。区域设置支持见第 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 操作。
-Tconfig--text-search-config=config设置默认文本检索配置。更多信息见 default_text_search_config。
-Uusername--username=username选择数据库超级用户的用户名。默认值是运行
initdb的有效用户的名称。超级用户的名称本身并不重要,不过即使操作系统用户名称不同,也可以选择沿用惯常的名称 postgres。-W--pwprompt使
initdb提示输入要赋给数据库超级用户的密码。如果不打算使用密码认证,这一点并不重要。否则,在设置密码之前将无法使用密码认证。-Xdirectory--waldir=directory该选项指定预写式日志(WAL)应存放的目录。
--wal-segsize=size设置 WAL 段大小,单位为兆字节。这是 WAL 日志中每个单独文件的大小。默认大小为 16 兆字节。该值必须是 1 到 1024(兆字节)之间的 2 的幂。此选项只能在初始化期间设置,以后不能更改。
调整该大小可能有助于控制 WAL 日志传送或归档的粒度。此外,在 WAL 量很大的数据库中,每个目录中的 WAL 文件数量可能会成为性能和管理问题。增大 WAL 文件大小会减少 WAL 文件数量。
还可以使用以下较少用到的选项:
-d--debug打印引导后端的调试输出,以及少量普通用户通常不感兴趣的其他消息。引导后端是
initdb用来创建系统目录表的程序。该选项会产生大量极其乏味的输出。-Ldirectory指定
initdb初始化数据库集簇时应到哪里查找其输入文件。通常不需要这样做。若需要显式指定其位置,系统会提示。-n--no-clean默认情况下,如果
initdb发现某个错误使其无法完整创建数据库集簇,就会删除它在发现无法完成任务之前可能已创建的所有文件。该选项会禁止这种清理,因此对调试有用。
其他选项:
-V--version打印 initdb 版本并退出。
-?--help显示有关 initdb 命令行参数的帮助并退出。
环境
PGDATA指定数据库集簇应存放的目录;可使用
-D选项覆盖。PG_COLOR指定是否在诊断消息中使用颜色。可能的值为
always、auto和never。TZ指定所创建数据库集簇的默认时区。该值应为完整的时区名称(见第 8.5.3 节)。
注解
也可以通过 pg_ctl initdb 调用 initdb。