pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
initdb — 创建一个新的 PostgreSQL 数据库集簇
initdb [options...] [--pgdata ] | [-D ]directory
initdb创建一个新的 PostgreSQL数据库集簇(或数据库系统)。数据库集簇是由单个服务器实例管理的一组数据库的集合。
创建数据库系统包括:创建存放数据库数据的目录,生成共享目录表(属于整个集簇而不是任何特定数据库的表),以及创建 template1 数据库。当你创建新数据库时,template1 数据库中的所有内容都会被复制。其中包含为内建类型等内容填好的目录表。
initdb初始化数据库集簇的默认区域设置和字符集编码。某些区域类别在集簇的整个生命期内是固定的,因此在运行initdb时做出正确选择很重要。其他区域类别可以在以后启动服务器时更改。initdb会把这些区域设置写入 postgresql.conf 配置文件作为默认值,但可以通过编辑该文件来更改。要设置 initdb使用的区域,见--locale选项的描述。字符集编码可以在创建每个数据库时单独设置。initdb决定template1数据库的编码,它将作为所有其他数据库的默认值。要更改默认编码,使用--encoding选项。
initdb必须以将拥有服务器进程的用户身份运行,因为服务器需要访问initdb创建的文件和目录。由于服务器不能以 root 身份运行,你也不能以 root 身份运行initdb。(事实上它会拒绝这样做。)
虽然initdb会尝试创建指定的数据目录,但它往往没有权限这样做,因为所需数据目录的父目录常常是 root 所有的目录。要设置这样的安排,可以先以 root 身份创建一个空的数据目录,然后用chown把该目录的所有权移交给数据库用户账户,再su成为数据库用户,最后以数据库用户身份运行initdb。
-D directory--pgdata=directory这个选项指定数据库系统的存放目录。这是 initdb所需的唯一信息,但你可以通过设置 PGDATA环境变量来免于写出它,这样很方便,因为数据库服务器(postmaster)之后可以通过同一个变量找到数据库目录。
-E encoding--encoding=encoding选择模板数据库的编码。这也会是你以后创建的任何数据库的默认编码,除非在那里另行覆盖。要使用编码特性,必须在构建时启用它,同时你还要选择这个选项的默认值。
--locale=locale设置数据库集簇的默认区域。如果未指定这个选项,则从initdb运行的环境中继承区域。
--lc-collate=locale--lc-ctype=locale--lc-messages=locale--lc-monetary=locale--lc-numeric=locale--lc-time=locale类似--locale,但只设置指定类别中的区域。
-U username--username=username选择数据库超级用户的用户名。默认为运行 initdb的有效用户的名称。超级用户叫什么其实并不重要,但即使操作系统用户的名称不同,人们也可能选择保留惯用名 postgres。
-W--pwprompt让initdb提示输入要赋予数据库超级用户的口令。如果你不打算使用口令认证,这无关紧要。否则,在设置好口令之前,你将无法使用口令认证。
还有其他一些较少使用的参数:
-d--debug打印引导后端的调试输出以及一些公众较少感兴趣的其他消息。引导后端是 initdb用来创建目录表的程序。这个选项会产生大量极其无聊的输出。
-L directory指定initdb到哪里寻找它初始化数据库系统所需的输入文件。这通常是不必要的。如果需要显式指定它们的位置,系统会告诉你。
-n--noclean默认情况下,当 initdb判定某个错误使它无法完全创建数据库系统时,它会删除在发现无法完成工作之前可能已创建的所有文件。这个选项抑制清理,因此对调试有用。
PGDATA指定数据库系统的存放目录;可以用-D选项覆盖。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。