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

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.5 已于 2021 年 2 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本

initdb

initdb — 创建一个新的PostgreSQL数据库集簇

大纲

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

描述

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.3 节

选项

-A authmethod
--auth=authmethod

此选项指定pg_hba.conf中本地用户使用的认证方法(hostlocal行)。除非信任系统上的所有本地用户,否则不要使用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_ASCIIPostgreSQL服务器支持的字符集在第 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操作。

-T CFG
--text-search-config=CFG

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

-U username
--username=username

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

-W
--pwprompt

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

-X directory
--xlogdir=directory

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

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

-d
--debug

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

-L directory

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

-n
--noclean

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

其他选项:

-V
--version

打印initdb版本并退出。

-?
--help

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

环境

PGDATA

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

TZ

指定所创建数据库集簇的默认时区。该值应为完整的时区名称 (见第 8.5.3 节)。

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

注解

也可以通过pg_ctl initdb调用initdb

参见

pg_ctl, postgres

提交更正

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