选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0
历史版本PostgreSQL 9.0 已于 2015 年 10 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本

initdb

initdb — create a new PostgreSQL database cluster

大纲

initdb [option...] [--pgdata ] | [-D ]directory

Description

initdb创建一个新的PostgreSQL数据库集簇。数据库集簇是由单个服务器实例管理的一组数据库。

创建数据库集簇包括创建用于存放数据库数据的目录,生成共享系统目录表(属于整个集簇而不是某个特定数据库的表),以及创建template1postgres数据库。以后创建新数据库时,会复制template1数据库中的所有内容。(因此,安装在template1中的任何东西都会自动复制到以后创建的每个数据库中。)postgres数据库是一个默认数据库,供用户、工具程序和第三方应用程序使用。

虽然initdb会尝试创建指定的数据目录,但如果所需数据目录的父目录归 root 所有,它可能没有足够的权限。要在这种环境中初始化,可先由 root 创建一个空的数据目录, 然后用chown将该目录的所有权赋予数据库用户账户,再用 su切换为该数据库用户来运行initdb

initdb必须以将拥有服务器进程的用户身份运行,因为服务器需要访问 initdb创建的文件和目录。由于服务器不能以 root 身份运行,因此 也绝不能以 root 身份运行initdb。(实际上它会拒绝这样做。)

initdb会初始化数据库集簇的默认区域设置和字符集编码。字符集编码、排序顺序(LC_COLLATE)和字符集分类(LC_CTYPE,例如大写、小写、数字)可以在创建数据库时单独设置。initdbtemplate1数据库确定这些设置,它们将作为所有其他数据库的默认值。

要更改默认排序顺序或字符集分类,请使用--lc-collate--lc-ctype选项。使用CPOSIX之外的排序顺序也会带来性能损失。因此,在运行initdb时选择正确的区域设置很重要。

其余区域设置类别可以在以后启动服务器时更改。还可以使用--locale设置所有区域设置类别的默认值,包括排序顺序和字符集分类。所有服务器区域设置值(lc_*)都可以通过SHOW ALL显示。更多细节见第 22.1 节

要修改默认编码,请使用--encoding。更多细节见 第 22.2 节

Options

-A authmethod
--auth=authmethod

此选项指定 pg_hba.conf 中用于本地用户的认证方法。除非你信任系统上的所有本地用户,否则不要使用 trust。为了便于安装,默认使用 trust

-D directory
--pgdata=directory

该选项指定数据库集簇应存放的目录。这是initdb所需的唯一信息, 但也可以通过设置PGDATA环境变量来省去显式写出它;这通常更方便,因为 数据库服务器(postgres)之后也可以通过同一变量找到数据目录。

-E encoding
--encoding=encoding

选择模板数据库的编码。这也会成为以后创建的任何数据库的默认编码,除非在创建时覆盖它。默认值由区域设置推导而来,如果无法推导,则使用SQL_ASCIIPostgreSQL服务器支持的字符集在第 22.2.1 节中介绍。

--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

-X directory
--xlogdir=directory

该选项指定事务日志应存放的目录。

-U username
--username=username

选择数据库超级用户的用户名。默认值是运行initdb的有效用户的名称。 超级用户的名称本身并不重要,不过即使操作系统用户名称不同,也可以选择沿用惯常的名称 postgres

-W
--pwprompt

使initdb提示输入要赋给数据库超级用户的密码。如果不打算使用密码认证, 这一点并不重要。否则,在设置密码之前将无法使用密码认证。

--pwfile=filename

使initdb从文件中读取数据库超级用户的密码。文件的第一行会被当作密码。

--text-search-config=CFG

设置默认文本检索配置。更多信息见 default_text_search_config

还可以使用以下较少用到的选项:

-d
--debug

打印引导后端的调试输出,以及少量普通用户通常不感兴趣的其他消息。引导后端是 initdb用来创建系统目录表的程序。该选项会产生大量极其乏味的输出。

-L directory

指定initdb初始化数据库集簇时应到哪里查找其输入文件。通常不需要这样做。 若需要显式指定其位置,系统会提示。

-n
--noclean

默认情况下,如果initdb发现某个错误使其无法完整创建数据库集簇, 就会删除它在发现无法完成任务之前可能已创建的所有文件。该选项会禁止这种清理,因此对调试有用。

-V
--version

打印 initdb 的版本并退出。

-?
--help

显示有关initdb命令行参数的帮助并退出。

Environment

PGDATA

指定数据库集簇应存放的目录;可使用-D选项覆盖。

与大多数其他PostgreSQL工具程序一样,此工具也使用libpq支持的环境变量(参见第 31.13 节)。

Notes

也可以通过pg_ctl initdb调用initdb

See Also

pg_ctl, postgres

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。