initdb

Name

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

Synopsis

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

Description

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

创建数据库系统包括创建数据库数据的宿主目录,生成共享的系统表(不属于任何特定数据库的表) 和创建template1postgres数据库。当你以后再创建 一个新数据库时,template1数据库里所有内容都会拷贝过来。因此,任何在 template1里面安装的东西都自动拷贝到之后创建的数据库中。 postgres数据库是一个缺省数据库,用于给用户、工具、第三方应用提供缺 省数据库。

尽管initdb会尝试创建相应的数据目录,但经常会没有权限做这件事。 因为所要创建目录的父目录通常被root所拥有。要初始化这种设置,用root创建一个空数据目录, 然后用chown把该目录的所有权交给数据库用户帐号,然后su 成数据库用户,最后以数据库用户身份运行initdb

initdb必须以运行数据库服务器的用户身份运行,因为服务器需要访问 initdb创建的目录和文件。因为服务器通常是以非root身份运行的,因 此一般也就不以 root 用户运行initdb。(事实上initdb 将拒绝你以root用户运行它。)

 initdb 初始化数据库集群的默认语言环境和字符集编码。 字符集编码,排序顺序(LC_COLLATE)和字符集类(LC_CTYPE,如: 大写字母、小写字母和数字)可以在创建时单独对一个数据库设置。initdb 决定对template1数据库的设置,这将作为所有其他数据库的默认设置。

更改默认排序顺序或字符集类,要使用--lc-collate--lc-ctype 选项。排序命令除了C或者POSIX也有性能损失。由于这些原因, 在运行initdb时选择正确的语言环境是很重要的。

剩下的locale类可以稍后在服务器启动时被改变。您也可以使用--locale 来为所有的locale类设置默认,包括排序顺序和字符集类。所有的服务器locale值 (lc_*)可以通过SHOW ALL被显示。 更多详细信息敬请关注Section 22.1

为了改变默认编码,要使用--encoding。 更多详细信息敬请关注Section 22.2

选项

-A authmethod
--auth=authmethod

这个选项声明本地用户在pg_hba.conf里面使用的认证方法。除非你相信 所有本地用户,否则不要使用trust(缺省)。

-D directory
--pgdata=directory

这个选项声明数据库集群应该存放在哪个目录。这是initdb需要的 唯一信息,但是你可以通过设置PGDATA环境变量来避免键入,这样做可 能方便一些,因为稍后数据库服务器(postgres)可以通过同一个变 量找到数据库目录。

-E encoding
--encoding=encoding

选择模板数据库的编码方式。这将是你以后创建的数据库的缺省编码方式,除非你创建数 据库时覆盖了它。缺省是从区域设置中获得的,如果没有区域设置,就是 SQL_ASCIIPostgreSQL服务器支持的 字符集在节Section 22.2.1里描述。

--locale=locale

为数据库集群设置缺省的区域。如果没有声明这个选项,那么区域是从initdb 运行的环境中继承过来的。区域设置在节Section 22.1里描述。

--lc-collate=locale
--lc-ctype=locale
--lc-messages=locale
--lc-monetary=locale
--lc-numeric=locale
--lc-time=locale

类似--locale,但是只设置特殊范畴的区域。

-X directory
--xlogdir=directory

该选项指定事务日志应该被存储的目录。

-U username
--username=username

选择数据库超级用户的用户名。缺省是运行initdb的用户的有效用户。 超级用户的名字是什么并不重要,但是可以选择习惯的名字postgres, 即使操作系统的用户名字不一样也没关系。

-W
--pwprompt

initdb提示输入数据库超级用户的口令。如果你不准备使用口令认证, 这个东西并不重要。否则你将不能使用口令认证,直到你设置了口令。

--pwfile=filename

initdb从一个文件里读取数据库超级用户的口令。该文件的第一行 将被当作口令使用。

其它不常用的参数还有:

-d
--debug

从初始化后端打印调试输出以及一些其它的一些普通用户不太感兴趣的信息。初始化后端是 initdb用于创建系统表的程序。这个选项生成大量非常枯燥的输出。

-L directory

告诉initdb到哪里找初始化数据库所需要的输入文件。通常是不必要的。 如果需要你明确声明的话,程序会提示你输入。

-n
--noclean

默认地,当initdb发现一些错误妨碍它完成创建数据库集群的工作时, 它将在检测到不能结束工作之前将其创建的所有文件删除。这个选项禁止任何清理动作, 因而对调试很有用。

-V
--version

输出initdb版本并退出。

-?
--help

显示关于initdb命令行参数的帮助并退出。

环境

PGDATA

声明数据库集群存储的目录;可以用-D选项覆盖。

该应用,同大部分其他PostgreSQL应用一样,也使用libpq 支持的环境变量(请参阅Section 31.13)。

Notes

initdb也可以通过pg_ctl initdb被调用。

又见

pg_ctl, postgres