pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
initdb — 创建一个新的 Postgres 数据库安装
initdb [ --pgdata|-Ddbdir] [ --sysid|-isysid] [ --pwprompt|-W ] [ --encoding|-Eencoding] [ --pglib|-Llibdir] [ --noclean | -n ] [ --debug | -d ] [ --template | -t ]
dbdirdbdirPGDATA这个选项指定在文件系统中何处存放数据库。这是 initdb 所需的唯一信息,但你可以通过设置 PGDATA环境变量来省去它,这样很方便,因为数据库服务器(postmaster)之后可以通过同一个变量找到数据库目录。
sysidsysid选择数据库超级用户的系统 ID。默认为运行 initdb 的用户的有效用户 ID。超级用户的 sysid 是什么其实并不重要,但人们可能会选择从某个数字(如 0 或 1)开始编号。
让 initdb 提示输入数据库超级用户的口令。如果你不打算使用口令认证,这无关紧要。否则,在设置好口令之前,你将无法使用口令认证。
encodingencoding选择模板数据库的多字节编码。这也会是你以后创建的任何数据库的默认编码,除非在那里另行覆盖。要使用多字节编码特性,必须在构建时指定,同时你还要选择这个选项的默认值。
还有其他一些较少使用的参数:
libdirlibdirinitdb 需要一些输入文件来初始化数据库。这个选项告诉它到哪里去找这些文件。通常你不必操心这一点,因为 initdb 知道最常见的安装布局,会自己找到这些文件。如果需要显式指定它们的位置,系统会告诉你。如果发生这种情况,其中一个文件名为 global1.bki.source,传统上与其他文件一起安装在库目录(例如 /usr/local/pgsql/lib)中。
替换现有数据库系统中的 template1数据库,其他什么都不动。当你需要用来自更新版本 Postgres的 initdb升级你的template1数据库时,或者当你的template1数据库因某些系统问题而损坏时,这很有用。通常,template1的内容在数据库系统的整个生命期内保持不变。用 initdb加 --template 选项运行不会破坏任何东西。
默认情况下,当 initdb判定某个错误使它无法完全创建数据库 系统时,它会删除在判定无法完成工作之前可能已创建的所有文件。这个选项抑制任何清理,因此对调试有用。
打印引导后端的调试输出以及一些公众较少感兴趣的其他消息。引导后端是 initdb用来创建目录表的程序。这个选项会产生大量的输出。
initdb会在指定的数据区域中创建作为完整安装的系统表和框架的文件。
initdb创建一个新的 Postgres数据库系统。数据库系统是由同一个 Unix 用户管理、并由单个 postmaster 管理的一组数据库的集合。
创建数据库系统包括:创建存放数据库数据的目录,生成共享目录表(不属于任何特定数据库的表),以及创建 template1 数据库。当你创建新数据库时,template1 数据库中的所有内容都会被复制。其中包含为内建类型等内容填好的目录表。
你不能以 root 身份执行initdb。这是因为你同样不能以 root 身份运行数据库服务器,而服务器需要访问initdb创建的文件。此外,在初始化阶段,还没有用户和访问控制被安装,postgres 只会以当前 Unix 用户的名称连接,因此你必须在将拥有服务器进程的账户下登录。
虽然initdb会尝试创建相应的数据目录,但它很可能没有权限这样做。因此,最好在运行initdb之前先创建数据目录,并把它的所有权移交给数据库超级用户。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。