Postgresql 中文操作指南
Description
initdb 创建新的 PostgreSQL [role="bare"]glossary.html#GLOSSARY-DB-CLUSTER database cluster 。
创建数据库集群包括创建将存储集群数据的 [role="bare"]glossary.html#GLOSSARY-DATA-DIRECTORY directories ,生成共享目录表(属于整个集群而非特定数据库的表),以及创建 postgres 、 template1 和 template0 数据库。 postgres 数据库是默认数据库,供用户、实用程序和第三方应用使用。 template1 和 template0 作为源数据库,以后由 CREATE DATABASE 命令进行复制。永远不要修改 template0 ,但可以添加对象到 template1 ,默认情况下,这些对象将被复制到以后创建的数据库。有关详细信息,请参见 Section 23.3 。
尽管 initdb 将尝试创建指定的数据目录,但如果所需数据目录的父目录为 root 所有,它可能没有权限。要在这种情况下初始化,请以 root 权限创建一个空数据目录,然后使用 chown 为数据库用户帐户分配该目录的所有权,然后 su 成为运行 initdb 的数据库用户。
必须以将拥有服务器进程的用户的身份来运行 initdb ,因为服务器需要访问 initdb 创建的文件和目录。由于无法以 root 权限来运行服务器,因此也不得以 root 权限来运行 initdb 。(事实上它将拒绝这样做。)
由于安全原因, initdb 创建的新集群默认情况下仅由集群所有者可以访问。 —allow-group-access 选项允许与集群所有者在相同组中的任何用户读集群中的文件。这对非特权用户执行备份非常有用。
initdb 初始化数据库集群的默认语言环境和字符集编码。当创建每个数据库时也可以单独为其设置这些内容。 initdb 为模板数据库确定这些设置,这些设置将作为所有其他数据库的默认设置。
默认情况下, initdb 使用语言环境提供程序 libc (参见 Section 24.1.4 )。 libc 语言环境提供程序从环境中获取语言环境设置,并从语言环境设置中确定编码。
要为集群选择另一种语言环境,请使用选项 —locale 。此外还有单独的选项 —lc-* 和 —icu-locale (参见下文)来设置各个语言环境类别的值。请注意,不同语言环境类别的设置不一致会导致无意义的结果,因此应谨慎使用。
另外, initdb 可以使用 ICU 库通过指定 —locale-provider=icu 来提供语言环境服务。必须使用 ICU 支持来构建服务器。要选择要应用的特定 ICU 语言环境 ID,请使用选项 —icu-locale 。请注意,由于实现原因以及为了支持旧代码, initdb 在使用 ICU 语言环境提供程序时仍然会选择和初始化 libc 语言环境设置。
当 initdb 运行时,它将打印出已选择设置的语言环境。如果您有复杂的要求或指定了多个选项,建议检查结果是否与预期相符。
可在 Section 24.1 中找到有关区域设置的更多详情。
如需更改默认编码,请使用 —encoding 。可在 Section 24.3 中找到更多详情。
Options
-
-A _authmethod—auth=_authmethod #
-
此选项指定在 pg_hba.conf ( host 和 local 行中) 中使用的本地用户默认验证方法。请查看 Section 21.1 了解有效值的概览。
-
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 #
-
选择模板数据库的编码。这还将是稍后创建的任何数据库的默认编码,但您在创建时可以覆盖此编码。PostgreSQL 服务器支持的字符集在 Section 24.3.1 中描述。
-
默认情况下,模板数据库编码是从区域派生的。如果指定 —​no-locale (或等效地,如果区域是 C 或 POSIX ),则 ICU 提供程序的默认值是 UTF8 ,而 libc 提供程序的默认值是 SQL_ASCII 。
-
-
-g_—allow-group-access_ #
-
允许与集群所有者同组的用户读取 initdb 创建的所有集群文件。此选项在 Windows 中被忽略,因为它不支持 POSIX 样式的组权限。
-
-
—icu-locale=_locale_ #
-
当使用 ICU 提供程序时,指定 ICU 区域。区域支持在 Section 24.1 中说明。
-
-
—icu-rules=_rules_ #
-
指定其他校对规则,以自定义默认校对的行为。仅支持 ICU 使用此功能。
-
-
-k_—data-checksums_ #
-
在数据页上使用校验和有助于检测 I/O 系统对数据进行的损坏,否则将不会发现。启用校验和可能会影响明显的性能。如果设置,则将计算所有数据库中所有对象的所有校验和。所有校验和故障在 pg_stat_database 视图中报告。请参阅 Section 30.2 了解详情。
-
-
—locale=_locale_ #
-
设置数据库集群的默认区域。如果未指定此选项,则将从 initdb 运行所在的环境继承此区域。区域支持在 Section 24.1 中说明。
-
-
—lc-collate=_locale—lc-ctype=_locale—lc-messages=locale—lc-monetary=locale—lc-numeric=locale—lc-time=locale #
-
与 —​locale 类似,但只能设置指定类别中的区域。
-
-
—no-locale #
-
Equivalent to —locale=C.
-
-
—locale-provider={_libc|icu}_ #
-
此选项设置在新的集群中创建的数据库的区域提供程序。稍后创建新的数据库时可以在 CREATE DATABASE 命令中覆盖此设置。默认原则是 libc (请参阅 Section 24.1.4 )。
-
-
-N_—no-sync_ #
-
默认情况下, initdb 将等待直到所有文件安全写入磁盘。此选项导致 initdb 无需等待即可返回,速度更快,但表示紧随其后的操作系统崩溃会导致数据目录损坏。通常,此选项对于测试很有用,但不应在创建生产安装时使用。
-
-
—no-instructions #
-
默认情况下, initdb 会在输出结束时编写有关如何启动集群的说明。此选项导致不留下这些说明。这主要是供将 initdb 封装在特定于平台的行为中的工具使用,这些说明在此类工具中很可能不正确。
-
-
—pwfile=_filename_ #
-
使 initdb 从文件中读取引导超级用户的密码。该文件的首行将作为密码。
-
-
-S_—sync-only_ #
-
安全地将所有数据库文件写入磁盘并退出。这不会执行任何常规的 initdb 操作。通常,此选项对于确保 fsync 从 off 更改到 on 之后实现可靠的恢复很有用。
-
-
-T _config—text-search-config=_config #
-
设置默认文本搜索配置。欲了解更多信息,请见 default_text_search_config 。
-
-
-U _username—username=_username #
-
设置 [role="bare"]glossary.html#GLOSSARY-BOOTSTRAP-SUPERUSER bootstrap superuser 的用户名。这默认为运行 initdb 的操作系统用户的名称。
-
-
-W_—pwprompt_ #
-
使 initdb 提示输入密码以提供给引导超级用户。如果你不打算使用密码认证,这并不重要。否则,在设置密码之前,你将无法使用密码认证。
-
-
-X _directory—waldir=_directory #
-
此选项指定写前日志应存储的目录。
-
-
—wal-segsize=_size_ #
-
以兆字节为单位设置 WAL segment size 。这是 WAL 日志中每个单独文件的大小。默认大小为 16 兆字节。值必须在 1 到 1024(兆字节)之间的 2 的幂。此选项只能在初始化期间设置,并且无法在之后更改。
-
调整此大小以控制 WAL 日志传送或归档的粒度可能很有用。此外,在 WAL 量很大的数据库中,每个目录的 WAL 文件数量可能会成为一个性能和管理问题。增加 WAL 文件大小将减少 WAL 文件的数量。
-
还提供其他一些不太常用的选项:
-
-c _name=value—set _name=value #
-
在 initdb 期间,强行将服务器参数 name 设置为 value ,并且还将该设置安装在生成的 postgresql.conf 文件中,以便将其应用于将来的服务器运行中。可以多次给出此选项以设置多个参数。当环境使得服务器根本无法使用默认参数启动时,这尤其有用。
-
-
-d_—debug_ #
-
打印引导后端的调试输出以及公众不太感兴趣的其他一些消息。引导后端是 initdb 用于创建目录表的程序。此选项会生成大量极其无聊的输出。
-
-
—discard-caches #
-
使用 debug_discard_caches=1 选项运行引导后端。这会花很长时间,并且仅可用于深入调试。
-
-
-L _directory_ #
-
指定 initdb 从何处查找其输入文件来初始化数据库集群。此操作通常不必要。如果需要明确指定其位置,我们会告知你。
-
-
-n_—no-clean_ #
-
默认情况下,当 initdb 确定错误阻止其完全创建数据库集群时,它会删除在发现无法完成作业之前可能创建的任何文件。此选项禁止整理,因此对于调试很有用。
-
其他选项:
Environment
-
PGDATA #
-
指定数据库集群所在目录;可以使用 -D 选项覆盖。
-
-
PG_COLOR #
-
指定是否在诊断消息中使用颜色。可能的值为 always 、 auto 和 never 。
-
-
TZ #
-
指定所创建数据库集群的默认时区。此值应为完整的时区名称(见 Section 8.5.3 )。
-
此实用程序与大多数其他 PostgreSQL 实用程序一样,还使用 libpq 支持的环境变量(请参阅 Section 34.15 )。