2024 年 9 月 26 日: PostgreSQL 17 发布!
支持版本:当前 (17) / 16 / 15 / 14 / 13 / 12
开发版本:devel
不支持版本: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

22.2. 创建数据库 #

为了创建数据库,PostgreSQL 服务器必须处于运行状态(参见 第 18.3 节)。

数据库是使用 SQL 命令 CREATE DATABASE 创建的

CREATE DATABASE name;

其中 name 遵循 SQL 标识符的常用规则。SQL标识符。当前角色会自动成为新数据库的拥有者。数据库拥有者拥有删除数据库的权限(这也将删除其中的所有对象,即使它们有不同的拥有者)。

创建数据库是一项受限操作。有关如何授予权限的信息,请参见 第 21.2 节

由于您需要连接到数据库服务器才能执行 CREATE DATABASE 命令,因此如何创建任何给定站点上的第一个数据库仍然是一个问题。第一个数据库始终由 initdb 命令在初始化数据存储区时创建。(参见 第 18.2 节)。该数据库称为 postgres 因此,要创建第一个 普通 数据库,您可以连接到 postgres

另外两个数据库,template1template0 也是在数据库集群初始化期间创建的。每当在集群中创建新数据库时,都会克隆 template1。这意味着您在 template1 中所做的任何更改都会传播到随后创建的所有数据库。因此,请避免在 template1 中创建对象,除非您希望它们传播到每个新创建的数据库。 template0 是作为 template1 的原始内容的原始副本。当需要创建没有这种站点本地添加的数据库时,可以克隆它而不是 template1。有关更多详细信息,请参见 第 22.3 节

为了方便起见,您可以从 shell 中执行一个程序来创建新数据库,即 createdb

createdb dbname

createdb 没有任何神奇之处。它连接到 postgres 数据库并发出 CREATE DATABASE 命令,就像上面描述的那样。 createdb 参考页面包含调用详细信息。请注意,不带任何参数的 createdb 将创建一个使用当前用户名命名的数据库。

注意

第 20 章 包含有关如何限制谁可以连接到给定数据库的信息。

有时您想为其他人创建数据库,并让他们成为新数据库的拥有者,以便他们可以自行配置和管理它。要实现这一点,请使用以下命令之一

CREATE DATABASE dbname OWNER rolename;

从 SQL 环境中,或

createdb -O rolename dbname

从 shell 中。只有超级用户被允许为其他人(即您不是成员的角色)创建数据库。

提交更正

如果您在文档中看到任何不正确的内容、与您对特定功能的体验不符或需要进一步澄清,请使用 此表格 报告文档问题。