initdb

名称

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

语法

initdb [ --pgdata|-D dbdir ]
    [ --sysid|-i sysid ]
    [ --pwprompt|-W ]
    [ --encoding|-E encoding ]
    [ --pglib|-L libdir ]
    [ --noclean | -n ] [ --debug | -d ] [ --template | -t ]

输入

--pgdata=dbdir, -D dbdir, PGDATA
这个选项声明数据库应该存放在文件系统的哪个位置。这是 initdb 需要的唯一信息,但是你可以通过设置 PGDATA 环境变量来避免键入,这样做可能方便一些,因为稍后数据库服务器(postmaster)可以通过同一个变量找到数据库目录。
--sysid=sysid, -i sysid
选择数据库超级用户的系统标识(system id)。缺省是运行 initdb 的用户的有效用户标识(user id)。超级用户的系统标识是什么并不重要,但是我们可以选择从象 0 或 1 这样的数字开始。
--pwprompt, -W
令 initdb 提示输入数据库超级用户的口令。如果你不准备使用口令认证,这个东西并不重要。否则你将不能使用口令认证直到你设置了口令。
--encoding=encoding, -E encoding
选择模板数据库的多字节编码方式。这将是你以后创建的数据库的缺省编码方式,除非你创建数据库时覆盖了它。要使用多字节编码特性,你必须在制作的时候声明,那时你还要为这个选项选择缺省值。
其他不常用的参数还有:
 
--pglib=libdir, -l libdir
initdb 需要几个输入文件初始化数据库。这个选项告诉它到哪里能找到这些文件。通常你不必担心这些,因为 initdb 知道最常见的安装布局而且能够自己找到这些文件。如果需要你显式声明这些文件的路径的话,你会被告之的。如出现这种情况,有一个文件叫 global1.bki.source,并且它通常和其他文件一起安装到库目录里(例如, /usr/local/pgsql/lib)。
--template, -t
在不改变其他任何东西的前提下替换现存数据库系统中的 template1 数据库.当你需要使用initdb 从一个新的 PostgreSQL 版本中升级你的template1 数据库或者你的 template1 数据库因为一些系统问题崩溃了时非常有用通常 template1 的内容在整个数据库系统的生存周期中保持一致.你带 --template 参数运行 initdb 不能破坏任何数据.
--noclean, -n
缺省时,当 initdb 发现一些错误妨碍它完成创建数据库系统的工作时,它将在检测到不能结束工作之前将其创建的所有文件删除.这个选项禁止任何清理动作,因而对调试很有用.
--debug, -d
打印初始后端上的调试输出和一些其他普通用户不太感兴趣的信息。初始后端是 initdb 用于创建目录表的进程.这个选项生成一大堆输出.

输出

initdb 将在声明的数据区里创建完成安装所需的系统表文件和框架文件。

描述

initdb 创建一个新的 PostgreSQL 数据库系统.一个数据库系统是由一个Unix 用户配置的并由单个 postmaster 管理的数据库集合.

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

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

尽管 initdb 会尝试创建相应的数据目录,还是有可能发生它没有权限做这些事情的情况。因此在运行initdb 前创建数据目录并且把所有权赋予数据库超级用户是一个很好的习惯。