initdb

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

Synopsis

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

Description

initdb创建一个新的 PostgreSQL 数据库集群。数据库集群是由单个服务器实例 Management 的数据库的集合。

创建数据库集群包括以下步骤:创建数据库数据将驻留在其中的目录;生成共享目录表(属于整个集群而不是任何特定数据库的表);以及创建template1postgres数据库。以后创建新数据库时,将复制template1数据库中的所有内容。 (因此,安装在template1中的所有内容都会自动复制到以后创建的每个数据库中.)postgres数据库是默认数据库,供用户,Util 和第三方应用程序使用。

尽管initdb会尝试创建指定的数据目录,但是如果所需数据目录的父目录是 root 拥有的,它可能没有权限。要在这种设置中进行初始化,请创建一个空数据目录作为 root 用户,然后使用chown将该目录的所有权分配给数据库用户帐户,然后使用su成为要运行initdb的数据库用户。

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

出于安全原因,默认情况下,只有initdb创建的新集群才可由集群所有者访问。 --allow-group-access选项允许与群集所有者位于同一组的任何用户读取群集中的文件。这对于以非特权用户身份执行备份很有用。

initdb初始化数据库集群的默认语言环境和字符集编码。创建数据库时,可以分别为数据库设置字符集编码,排序 Sequences(LC_COLLATE)和字符集类(LC_CTYPE,例如大写,小写,数字)。 initdb确定template1数据库的那些设置,这些设置将用作所有其他数据库的默认设置。

要更改默认的排序规则 Sequences 或字符集类别,请使用--lc-collate--lc-ctype选项。除CPOSIX以外的排序规则也有性能损失。由于这些原因,在运行initdb时选择正确的语言环境很重要。

服务器启动以后,可以更改其余的区域设置类别。您还可以使用--locale设置所有语言环境类别的默认值,包括排序规则和字符集类。可以通过SHOW ALL显示所有服务器的语言环境值(lc_*)。可以在Section 23.1中找到更多详细信息。

要更改默认编码,请使用--encoding。可以在Section 23.3中找到更多详细信息。

Options

  • -A authmethod
    --auth=authmethod

    • 此选项为在pg_hba.conf(hostlocal行)中使用的本地用户指定默认的身份验证方法。 initdb将使用指定的身份验证方法针对非复制以及复制连接预填充pg_hba.conf条目。

除非您信任系统上的所有本地用户,否则请不要使用trusttrust是易于安装的默认值。

  • --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_ASCIISection 23.3.1中描述了 PostgreSQL 服务器支持的字符集。
  • -g
    --allow-group-access

    • 允许与群集所有者在同一组中的用户读取initdb创建的所有群集文件。在 Windows 上,此选项将被忽略,因为它不支持 POSIX 样式的组权限。
  • -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

  • -U username
    --username=username

    • 选择数据库超级用户的用户名。默认为运行initdb的有效用户的名称。超级用户名到底是什么并不重要,但是即使 os 用户名不同,也可以选择保留惯用名称 postgres。
  • -W
    --pwprompt

    • 发出initdb提示 Importing 密码以授予数据库超级用户。如果您不打算使用密码身份验证,那么这并不重要。否则,在设置密码之前,您将无法使用密码身份验证。
  • -X directory
    --waldir=directory

    • 此选项指定应在其中存储预写日志的目录。
  • --wal-segsize=size

    • 设置* WAL 段大小*,以兆字节为单位。这是 WAL 日志中每个文件的大小。默认大小为 16 MB。该值必须是 1 到 1024(兆字节)之间的 2 的幂。此选项只能在初始化期间设置,以后不能更改。

调整此大小以控制 WAL 日志传送或归档的粒度可能很有用。同样,在具有大量 WAL 的数据库中,每个目录中大量的 WAL 文件可能会成为性能和 Management 问题。增加 WAL 文件大小将减少 WAL 文件的数量。

其他不常用的选项也可用:

  • -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 34.14)。

Notes

initdb也可以通过pg_ctl initdb调用。

See Also

pg_ctl, postgres