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会初始化数据库集簇的默认区域设置和字符集编码。字符集编码、排序顺序(LC_COLLATE)和字符集分类(LC_CTYPE,例如大写、小写、数字)可以在创建数据库时单独设置。initdb为template1数据库确定这些设置,它们将作为所有其他数据库的默认值。
要更改默认排序顺序或字符集分类,请使用--lc-collate和--lc-ctype选项。使用C或POSIX之外的排序顺序也会带来性能损失。因此,在运行initdb时选择正确的区域设置很重要。
其余区域设置类别可以在以后启动服务器时更改。还可以使用--locale设置所有区域设置类别的默认值,包括排序顺序和字符集分类。所有服务器区域设置值(lc_*)都可以通过SHOW ALL显示。更多细节见第 22.1 节。
要修改默认编码,请使用--encoding。更多细节见第 22.3 节。
选项
-Aauthmethod--auth=authmethod此选项指定
pg_hba.conf中本地用户使用的认证方法(host和local行)。除非信任系统上的所有本地用户,否则不要使用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服务器支持的字符集在第 22.3.1 节中介绍。-k--data-checksums#在数据页上使用校验和,帮助检测 I/O 系统造成的、否则可能悄无声息的数据损坏。启用校验和可能会带来明显的性能损失。此选项只能在初始化时设置,以后不能更改。如果启用,就会为所有数据库中的所有对象计算校验和。
--locale=locale设置数据库集簇的默认区域设置。如果未指定该选项,区域设置将继承自
initdb运行时所在的环境。区域设置支持见第 22.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--nosync默认情况下,
initdb会等待所有文件安全写入磁盘。此选项使initdb不等待就返回,速度更快,但意味着此后操作系统崩溃可能会造成数据目录损坏。通常,此选项适用于测试,但不应在创建生产安装时使用。--pwfile=filename使
initdb从文件中读取数据库超级用户的密码。文件的第一行会被当作密码。-S--sync-only将所有数据库文件安全写入磁盘,然后退出。这不会执行任何常规initdb操作。
-TCFG--text-search-config=CFG设置默认文本检索配置。更多信息见default_text_search_config。
-Uusername--username=username选择数据库超级用户的用户名。默认值是运行
initdb的有效用户的名称。超级用户的名称本身并不重要,不过即使操作系统用户名称不同,也可以选择沿用惯常的名称 postgres。-W--pwprompt使
initdb提示输入要赋给数据库超级用户的密码。如果不打算使用密码认证,这一点并不重要。否则,在设置密码之前将无法使用密码认证。-Xdirectory--xlogdir=directory该选项指定事务日志应存放的目录。
还可以使用以下较少用到的选项:
-d--debug打印引导后端的调试输出,以及少量普通用户通常不感兴趣的其他消息。引导后端是
initdb用来创建系统目录表的程序。该选项会产生大量极其乏味的输出。-Ldirectory指定
initdb初始化数据库集簇时应到哪里查找其输入文件。通常不需要这样做。若需要显式指定其位置,系统会提示。-n--noclean默认情况下,如果
initdb发现某个错误使其无法完整创建数据库集簇,就会删除它在发现无法完成任务之前可能已创建的所有文件。该选项会禁止这种清理,因此对调试有用。
其他选项:
-V--version打印initdb版本并退出。
-?--help显示有关initdb命令行参数的帮助并退出。
环境
PGDATA指定数据库集簇应存放的目录;可使用
-D选项覆盖。TZ指定所创建数据库集簇的默认时区。该值应为完整的时区名称(见第 8.5.3 节)。
与大多数其他PostgreSQL工具程序一样,此工具也使用libpq支持的环境变量(参见第 31.14 节)。
注解
也可以通过pg_ctl initdb调用initdb。