initdb

Name

initdb — 创建一个新的 Postgres数据库节点

initdb --pgdata | -D dbdir [--sysid | -i sysid] [--pwprompt | -W] [--encoding | -E encoding] [-L directory] [--noclean | -n] [--debug | -d]

描述

initdb 创建一个新的 Postgres 数据库集群或系统. 一个数据库系统是由单个 postmaster 管理的数据库集合.

创建数据库系统包括创建数据库数据的宿主目录, 生成共享的系统表(不属于任何特定数据库的表)和创建 template1 数据库.当你创建一个数据库时, template1 数据库里所有内容都会拷贝过来。 它包括填充了象内建类型这样的系统表.

你决不能以 root 身份运行 initdb。而是必须以运行数据库服务器的 用户身份运行它. 这是因为你也不能以 root 身份运行数据库服务器,但是服务器需要能够访问 initdb 创建的文件。还有,在初始化阶段, 还没有安装用户和访问控制的时候,Postgres 将只是用当前的 Unix 用户名进行联接, 所以你必须以拥有服务器进程的帐号登录。

尽管initdb会尝试创建相应的数据目录, 但经常会发生它没有权限做这些事情的情况。因为所需要的目录的父目录 通常是 root 所有的目录.要为此安排做一个设置,用 root 创建一个空 数据目录,然后用 chown 把该目录的 所有权交给数据库用户帐号,然后 su 成数据库用户,最后以数据库用户身份运行 initdb

选项

--pgdata=dbdir, -D dbdir

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

--sysid=sysid, -i sysid

选择数据库超级用户的系统标识(system id)。 缺省是运行 initdb的用户的有效用户标识(user id)。 超级用户的系统标识是什么并不重要, 但是我们可以选择从象 1 这样的数字开始。

--pwprompt, -W

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

--encoding=encoding, -E encoding

选择模板数据库的多字节编码方式。这将是你以后创建的数据库的缺省编码方式, 除非你创建数据库时覆盖了它。 要使用多字节编码特性,你必须在制作的时候声明, 那时你还要为这个选项选择缺省值。

其他不常用的参数还有:

-L directory

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

--noclean, -n

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

--debug, -d

打印初始后端上的调试输出和一些其他普通用户不太感兴趣的信息。 初始后端是initdb 用于创建目录表的进程.这个选项生成一大无聊的堆输出.

又见

PostgreSQL 管理员手册