On this page
initdb
initdb —创建一个新的 PostgreSQL 数据库集群
Synopsis
initdb
[ option
...] [ --pgdata
| -D
] directory
Description
initdb
创建一个新的 PostgreSQL 数据库集群。数据库集群是由单个服务器实例 Management 的数据库的集合。
创建数据库集群包括以下步骤:创建数据库数据将驻留在其中的目录;生成共享目录表(属于整个集群而不是任何特定数据库的表);以及创建template1
和postgres
数据库。以后创建新数据库时,将复制template1
数据库中的所有内容。 (因此,安装在template1
中的所有内容都会自动复制到以后创建的每个数据库中.)postgres
数据库是默认数据库,供用户,Util 和第三方应用程序使用。
尽管initdb
会尝试创建指定的数据目录,但是如果所需数据目录的父目录是 root 拥有的,它可能没有权限。要在这种设置中进行初始化,请创建一个空数据目录作为 root 用户,然后使用chown
将该目录的所有权分配给数据库用户帐户,然后使用su
成为要运行initdb
的数据库用户。
initdb
必须以拥有服务器进程的用户身份运行,因为服务器需要有权访问initdb
创建的文件和目录。由于服务器不能以 root 用户身份运行,因此也不能以 root 用户身份运行initdb
。 (实际上它将拒绝这样做.)
initdb
初始化数据库集群的默认语言环境和字符集编码。创建数据库时,可以分别为数据库设置字符集编码,排序规则(LC_COLLATE
)和字符集类(LC_CTYPE
,例如大写,小写,数字)。 initdb
确定template1
数据库的那些设置,这些设置将用作所有其他数据库的默认设置。
要更改默认的排序规则 Sequences 或字符集类别,请使用--lc-collate
和--lc-ctype
选项。除C
或POSIX
以外的排序规则也有性能损失。由于这些原因,在运行initdb
时选择正确的语言环境很重要。
服务器启动以后,可以更改其余的区域设置类别。您还可以使用--locale
设置所有语言环境类别的默认值,包括排序规则和字符集类。可以通过SHOW ALL
显示所有服务器的语言环境值(lc_*
)。可以在Section 23.1中找到更多详细信息。
要更改默认编码,请使用--encoding
。可以在Section 23.3中找到更多详细信息。
Options
-A authmethod
--auth=authmethod
- 此选项为在
pg_hba.conf
(host
和local
行)中使用的本地用户指定默认的身份验证方法。initdb
将使用指定的身份验证方法针对非复制以及复制连接预填充pg_hba.conf
条目。
- 此选项为在
除非您信任系统上的所有本地用户,否则请不要使用trust
。 trust
是易于安装的默认值。
--auth-host=authmethod
- 该选项为通过
pg_hba.conf
(host
行)中使用的 TCP/IP 连接的本地用户指定身份验证方法。
- 该选项为通过
--auth-local=authmethod
- 此选项为通过
pg_hba.conf
(local
行)中使用的 Unix 域套接字连接指定本地用户的身份验证方法。
- 此选项为通过
-D directory
--pgdata=directory
- 此选项指定数据库集群应存储的目录。这是
initdb
所需的唯一信息,但是您可以避免通过设置PGDATA
环境变量来编写它,这很方便,因为数据库服务器(postgres
)以后可以通过相同的变量找到数据库目录。
- 此选项指定数据库集群应存储的目录。这是
-E encoding
--encoding=encoding
- 选择模板数据库的编码。这也是以后创建的任何数据库的默认编码,除非您在此处覆盖它。默认值是从区域设置派生的;如果不起作用,则返回
SQL_ASCII
。 Section 23.3.1中描述了 PostgreSQL 服务器支持的字符集。
- 选择模板数据库的编码。这也是以后创建的任何数据库的默认编码,除非您在此处覆盖它。默认值是从区域设置派生的;如果不起作用,则返回
-k
--data-checksums
- 在数据页上使用校验和,以帮助检测 I/O 系统的损坏,否则这些损坏将是静默的。启用校验和可能会导致明显的性能损失。此选项只能在初始化期间设置,以后不能更改。如果设置,将为所有数据库中的所有对象计算校验和。
--locale=locale
- 设置数据库集群的默认语言环境。如果未指定此选项,则从
initdb
运行的环境中继承区域设置。Section 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
将 await 所有文件安全地写入磁盘。此选项使initdb
无需 await 就返回,这更快,但是这意味着随后的 os 崩溃可能会使数据目录损坏。通常,此选项对于测试很有用,但在创建生产安装时不应使用。
- 默认情况下,
--pwfile=filename
- 使
initdb
从文件中读取数据库超级用户的密码。文件的第一行用作密码。
- 使
-S
--sync-only
- 将所有数据库文件安全地写入磁盘并退出。这不会执行任何常规的 initdb 操作。
-T config
--text-search-config=config
- 设置默认的文本搜索配置。有关更多信息,请参见default_text_search_config。
-U username
--username=username
- 选择数据库超级用户的用户名。默认为运行
initdb
的有效用户的名称。超级用户名到底是什么并不重要,但是即使 os 用户名不同,也可以选择保留惯用名称 postgres。
- 选择数据库超级用户的用户名。默认为运行
-W
--pwprompt
- 发出
initdb
提示 Importing 密码以授予数据库超级用户。如果您不打算使用密码身份验证,那么这并不重要。否则,在设置密码之前,您将无法使用密码身份验证。
- 发出
-X directory
--waldir=directory
- 此选项指定应在其中存储预写日志的目录。
其他不常用的选项也可用:
-d
--debug
- 打印来自引导后端的调试输出和其他一些公众不太感兴趣的消息。引导程序后端是
initdb
用于创建目录表的程序。此选项会产生大量非常无聊的输出。
- 打印来自引导后端的调试输出和其他一些公众不太感兴趣的消息。引导程序后端是
-L directory
- 指定
initdb
应该在哪里找到其 Importing 文件以初始化数据库集群。通常这不是必需的。系统将告知您是否需要明确指定其位置。
- 指定
-n
--no-clean
- 默认情况下,当
initdb
确定某个错误导致其无法完全创建数据库集群时,它会在发现无法完成作业之前删除可能已创建的所有文件。此选项禁止整理,因此对于调试很有用。
- 默认情况下,当
Other options:
-V
--version
- 打印 initdb 版本并退出。
-?
--help
- 显示有关 initdb 命令行参数的帮助,然后退出。
Environment
PGDATA
- 指定要存储数据库集群的目录;可以使用
-D
选项覆盖。
- 指定要存储数据库集群的目录;可以使用
TZ
- 指定创建的数据库集群的默认时区。该值应为完整的时区名称(请参见Section 8.5.3)。
与大多数其他 PostgreSQLUtil 一样,该 Util 也使用 libpq 支持的环境变量(请参见Section 33.14)。
Notes
initdb
也可以通过pg_ctl initdb
调用。