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

22.2. 创建数据库 #

要创建数据库,PostgreSQL 服务器必须正在运行(参见 第 18.3 节)。

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

CREATE DATABASE name;

其中 name 遵循标识符的常规规则。SQL当前角色自动成为新数据库的所有者。数据库所有者有权在以后删除该数据库(这将删除其中所有对象,即使它们有其他所有者)。

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

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

在数据库集群初始化期间,还会创建另外两个数据库:template1template0 每当在集群中创建新数据库时,template1 实际上都会被克隆。这意味着您在 template1 中进行的任何更改都会传播到所有后续创建的数据库。因此,除非您希望这些对象传播到每个新创建的数据库,否则请避免在 template1 中创建对象。template0 被设计为 template1 原始内容的干净副本。当需要创建没有站点的本地添加内容的数据库时,可以克隆 template0 而不是 template1。有关更多详细信息,请参见 第 22.3 节

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

createdb dbname

createdb 并没有做什么神奇的事情。它连接到 postgres 数据库并发出 CREATE DATABASE 命令,这与上面描述的完全相同。createdb 参考页包含调用详情。请注意,不带任何参数的 createdb 将创建一个以当前用户名命名的数据库。

注意

关于如何限制谁可以连接到特定数据库的信息,请参见 第 20 章

有时您想为别人创建一个数据库,并让他们成为新数据库的所有者,以便他们可以自己配置和管理。要实现这一点,请在 SQL 环境中使用以下命令之一

CREATE DATABASE dbname OWNER rolename;

或在 shell 中使用

createdb -O rolename dbname

。只有超级用户才能为别人(即,为非您所属角色的角色)创建数据库。

提交更正

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