initdb创建一个新的 PostgreSQL数据库簇(cluster)。 一个数据库簇(cluster)是由单个服务端实例管理的多个数据库的集合。
创建数据库系统包括创建数据库数据的宿主目录,生成共享的系统表 (不属于任何特定数据库的表)和创建template1 和postgres数据库。 当你以后再创建一个新数据库时,template1 数据库里所有内容都会拷贝过来。(因此,任何在template1 里面安装的东西都自动拷贝到以后创建的数据库中。) postgres数据库是一个缺省数据库,用于给用户、工具、第三方应用提供缺省数据库。
尽管initdb会尝试创建相应的数据目录, 但经常会没有权限做这件事。因为所要创建目录的父目录通常被 root所拥有。要初始化这种设置,用root创建一个空数据目录,然后用 chown把该目录的所有权交给数据库用户帐号,然后 su成数据库用户,最后以数据库用户身份运行 initdb。
initdb必须以运行数据库服务端的用户身份运行, 因为服务端需要访问initdb创建的目录和文件。 因为服务端通常是以非root身份运行的,因此一般也就不以root用户运行 initdb(事实上将拒绝你以root用户运行它)。
initdb初始化该数据库簇(cluster)的缺省区域和字符集编码。 字符编码排序(LC_COLLATE)和字符集类 (LC_CTYPE, 也就是大写、小写、数字等)可以在数据库创建的时候独立设置。 initdb决定了template1数据库, 这个设置将成为所有其它(以后新建)数据库的缺省。
要更改默认的排序顺序或字符集分类,使用 --lc-collate和--lc-ctype选项。 使用C或POSIX之外的字符编码排序还会有性能影响。 因此在运行initdb的时候就做出正确的选择是非常重要的。
在服务端启动时,你可以使用--locale 设置缺省的所有语言环境类别,包括排序顺序和字符集种类。 其余的语言环境类别以后可以修改。所有服务器区域值(lc_*) 可以用SHOW ALL显示。 更多细节可以在Section 22.1找到。
要修改缺省编码,可以使用--encoding选项。 更多细节可以在Section 22.3找到。
这个选项指定本地用户在pg_hba.conf里面设置的认证方法。 (host 和local 所在行)。 除非你信任所有本地系统用户。 否则不要使用 trust。trust是缺省的。
这个选项指定本地TCP/IP联接用户在pg_hba.conf里面设置的认证方法。 (host 所在行)。
这个选项指定本地Unix-domain socket联接用户在pg_hba.conf里面设置的认证方法。 (local 所在行)。
这个选项声明数据库簇(cluster)应该存放在哪个目录。这是 initdb惟一(必须)需要的信息,但是你可以通过设置 PGDATA环境变量来避免键入,这样做可能方便一些,因为稍后数据库服务器 (postgres) 可以通过同一个变量找到数据库目录。
选择模板数据库的编码方式。这将是你以后创建的数据库的缺省编码方式, 除非你创建数据库时覆盖了它。缺省是从区域设置中获得的,如果没有区域设置,就是 SQL_ASCII。PostgreSQL 服务器支持的字符集在Section 22.3.1里描述。
使用数据页产生校验和,以帮助I/O系统,否则将静音检测损坏。 启用校验和可能产生明显的性能损失。 此选项只能在初始化过程中设置,并且以后不能更改。 如果设置,那么在所有数据库中计算所有对象的校验和。
为数据库簇(cluster)设置缺省的区域。如果没有指定这个选项, 那么区域是从initdb 运行的环境中继承过来的。 区域设置在Section 22.1里描述。
类似--locale,但是只设置特殊范畴的区域。
相当于--locale=C。
缺省情况下initdb会等待所有的文件被安全地写入到磁盘中。 此选项会导致initdb不进行等待,这样更快, 但意味着随后的操作系统崩溃可能把数据目录损坏。
令initdb从文件中读取数据库超级用户的密码。该文件的第一行被作为密码。
安全地写入所有数据库文件到磁盘然后退出。这并不进行任何普通initdb操作。
设置缺省的文本搜索配置。 见default_text_search_config了解更多信息。
选择数据库超级用户的用户名。缺省是运行 initdb的用户的有效用户。超级用户的名字是什么并不重要, 但是可以选择习惯的名字postgres,即使和操作系统的用户名不一样也没关系。
令initdb提示输入数据库超级用户的口令。 如果你不准备使用口令认证,这个选项并不重要。否则你将不能使用口令认证,直到你设置了口令。
此选项指定事务日志应该存放在哪个目录。
其它不常用的参数还有:
从初始化后端打印调试输出以及一些其它的一些普通用户不太感兴趣的信息。 初始化后端是initdb 用于创建系统表的程序。这个选项生成大量非常枯燥的输出。
告诉initdb初始化数据库时所需要的输入文件的位置。 通常不需要。如果需要你明确指定的话,程序会提示你输入。
缺省时,当initdb创建数据库簇(cluster)时出错, 它将在检测到不能结束工作之前将其创建的所有文件删除。 这个选项禁止任何清理动作,因而对调试很有用。
其它参数:
输出initdb命令的版本信息,然后退出。
显示initdb命令的帮助信息,然后退出。
指定数据库簇(cluster)存储的目录; 可以使用-D选项覆盖。
此实用工具,像大多其他的PostgreSQL 实用工具, 还使用libpq支持的环境变量libpq (见 Section 31.14)。