↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1 / 7.0 / 6.5 / 6.4
历史版本PostgreSQL 6.4 已于 2003 年 10 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

initdb

initdb — 创建一个新的 Postgres 数据库安装

大纲

initdb [ --pgdata=dbdir | -r dbdir ]
    [ --pglib=libdir | -l libdir ]
    [ --template=template | -t template ]
    [ --username=name | -u name ]
    [ --noclean | -n ] [ --debug | -d ]
  

输入

--pglib=libdir
-l libdir
PGLIB

构成 Postgres 的文件在哪里?除了那些因功能原因必须放在特定目录中的文件外,构成 Postgres软件的文件都安装在名为 libdir的目录中。initdb 需要的文件中有一个可以在那里找到的例子是 global1.bki.source,它包含进入共享目录表的全部信息。

--pgdata=dbdir
-r dbdir
PGDATA

你希望数据库数据放在 Unix 文件系统的什么位置?顶层目录称为 PGDATA目录。

--username=name
-u name
PGUSER

谁将成为这个数据库系统的 Postgres 超级用户?Postgres 超级用户是一个 Unix 用户,他拥有存储数据库系统的所有文件,也拥有访问这些文件的 postmaster 和后端进程。或者就让它默认为你(运行 initdb的 Unix 用户)。

注意

只有 Unix 超级用户(root)才能创建拥有者不同于 Postgres超级用户的数据库系统。

还有其他一些较少使用的参数:

--template=template
-t template

替换现有数据库系统中的 template1数据库,其他什么都不动。当你需要用来自更新版本 Postgres的 initdb升级你的template1数据库时,或者当你的template1数据库因某些系统问题而损坏时,这很有用。通常,template1的内容在数据库系统的整个生命期内保持不变。用 initdb加 --template 选项运行不会破坏任何东西。

--noclean
-n

默认情况下,当 initdb判定某个错误使它无法完全创建数据库 系统时,它会删除在判定无法完成工作之前可能已创建的所有文件。其中包括它调用的程序留下的任何 core 文件。这个选项抑制任何清理,因此对调试有用。

--debug
-d

打印引导后端的调试输出。引导后端是 initdb用来创建目录表的程序。这个选项会产生大量的输出。它还会关闭最终的 vacuum 步骤。

文件也是 initdb的输入:

postconfig

如果出现在 Unix 命令搜索路径(由 PATH 环境变量定义)中的话。这是一个为某些命令选项指定默认值的程序。见下文。

PGLIB/global1.bki.source

新数据库系统中共享目录表的内容。这个文件是 Postgres软件的一部分。

PGLIB/local1_template1.bki.source

新数据库系统中 template1 表的内容。这个文件是 Postgres软件的一部分。

输出

initdb会在 PGDATA 数据区域中创建作为完整安装的系统表和框架的文件。

描述

initdb创建一个新的 Postgres数据库系统。数据库系统是由同一个 Unix 用户管理、并由单个 postmaster 管理的一组数据库的集合。

创建数据库系统包括:创建存放数据库数据的目录,生成共享目录表(不属于任何特定数据库的表),以及创建 template1 数据库。template1 数据库是什么?当你创建数据库时,Postgres 是通过复制 template1 数据库中的所有内容来完成的。其中包含为内建类型等内容填好的目录表。

在 initdb 创建数据库之后,它会运行 vacuum来完成初始化,这会重置一些优化参数。

有三种方式向 initdb传递参数。 第一,可以使用 initdb 命令选项。 第二,可以在调用 initdb 之前设置环境变量。 第三,可以在 Unix 命令搜索路径中放一个名为 postconfig的程序。 initdb会调用该程序,该程序随后把 initdb参数写到它的标准输出流。不过第三种方式并不常见。

命令选项总是覆盖以其他任何方式指定的参数。postconfig 返回的值覆盖任何环境变量,但如果你希望使用环境变量的值,你的 postconfig 程序可以让它的输出基于环境变量。

postconfig 输出的值必须具有格式

var1=value1 var2=value2 ...
   

如果它不想提供任何参数,也可以什么都不输出。var的值与相应的环境变量名相同。例如,

PGDATA=/tmp/postgres_test
   

的效果与以一个名为 PGDATA、值为 /tmp/postgres_test的环境变量调用 initdb相同。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。