initdb 创建一个新的 PostgreSQL 数据库集群。 一个数据库集群是由单个服务器实例管理的数据库集合。
创建数据库系统包括创建数据库数据的宿主目录, 生成共享的系统表(不属于任何特定数据库的表)和创建 template1 和 postgres 数据库。当你以后再创建一个新数据库时, template1 数据库里所有内容都会拷贝过来。 (因此,任何在 template1 里面安装的东西都自动拷贝到之后创建的数据库中。) postgres 数据库是一个缺省数据库,用于给用户、工具或者第三方应用提供缺省数据库。
尽管initdb会尝试创建相应的数据目录, 但经常会发生它没有权限做这些事情的情况。因为所需要的目录的父目录通常是 root 所有的目录。 要初始化这种设置,用 root 创建一个空数据目录, 然后用 chown 把该目录的所有权交给数据库用户帐号, 然后 su 成数据库用户,最后以数据库用户身份运行 initdb。
initdb 初始化该数据库集群的缺省区域和字符集编码。 字符编码排序(LC_COLLATE)和字符集表(LC_CTYPE, 也就是,大写,小写,数字等)是对所有数据库估定的,不能改变。 使用 C 或 POSIX 之外的字符编码排序还会有性能影响。因此在运行 initdb 的时候选取正确的是非常重要的。 其它区域范畴可以在之后服务器启动的时候的时间里改变。 所有服务器区域值(lc_*)都可以用 SHOW ALL 显示。 更多细节可以在 Section 21.1 找到。
字符集编码可以在数据库创建的时候独立设置。 initdb 决定 template1 数据库的编码,而该编码将成为所有其它数据库的缺省。 要修改缺省编码,我们可以使用 --encoding 选项。 更多细节可以在 Section 21.2 找到。
这个选项声明本地用户在 pg_hba.conf 里面使用的认证方法。 除非你相信所有你的系统上的本地用户,否则不要使用 trust。 Trust 是所有安装的缺省。
这个选项声明数据库集群应该存放在哪个目录。 这是initdb需要的唯一信息,但是你可以通过设置 PGDATA 环境变量来避免键入, 这样做可能方便一些,因为稍后数据库服务器(postmaster)可以通过同一个变量找到数据库目录。
选择模板数据库的编码方式。这将是你以后创建的数据库的缺省编码方式, 除非你创建数据库时覆盖了它。缺省是从区域设置中获得的,如果没有区域设置,就是 SQL_ASCII。 PostgreSQL 服务器支持的字符集在 Section 21.2.1 里描述。
为数据库集群设置缺省的区域。如果没有声明这个选项,那么区域 是从 initdb 运行的环境中继承过来的。 区域设置在 Section 21.1 里描述。
类似 --locale,但是只设置特殊范畴的区域。
选择数据库超级用户的用户名。 缺省是运行 initdb 的用户的有效用户。 超级用户的名字是什么并不重要, 但是我们可以选择习惯的名字 postgres,即使操作系统的用户名字不一样也无所谓。
令 initdb 提示输入数据库超级用户的口令。 如果你不准备使用口令认证,这个东西并不重要。 否则你将不能使用口令认证直到你设置了口令。
令 initdb 从一个文件里读取数据库超级用户的口令。 该文件的第一行将被当作口令使用。
其他不常用的参数还有:
从初始化后端打印调试输出以及一些其它的一些普通用户不太感兴趣的信息。 初始化后端是 initdb 用于创建系统表的程序。 这个选项生成大量非常烦人的输出。
告诉 initdb 到哪里找初始化数据库所需要的输入文件。 通常是不必要的。如果需要你明确声明的话,程序会提示你输入。
缺省时,当initdb 发现一些错误妨碍它完成创建数据库集群的工作时, 它将在检测到不能结束工作之前将其创建的所有文件删除。 这个选项禁止任何清理动作,因而对调试很有用。