23.2. 创建数据库 #
要创建数据库,PostgreSQL 服务器必须已经启动并正在运行(见第 19.3 节)。
数据库用 SQL 命令 CREATE DATABASE 创建:
CREATE DATABASE name;
其中 name 遵循 SQL 标识符的一般规则。当前角色会自动成为新数据库的拥有者。数据库拥有者有权在日后删除该数据库(这也会删除其中的全部对象,即使那些对象具有不同的拥有者)。
创建数据库是一项受限操作。关于如何授予该权限,见第 22.2 节。
由于执行 CREATE DATABASE 命令时必须先连接到数据库服务器,因此还会有一个问题:某个站点上的第一个数据库是如何创建的?第一个数据库总是由 initdb 命令在初始化数据存储区时创建的(见第 19.2 节)。这个数据库叫作 postgres。因此,要创建第一个“普通”数据库,可以连接到 postgres。
在初始化数据库集簇时,还会创建第二个数据库 template1。每当在集簇中创建一个新数据库时,新数据库本质上都是通过克隆 template1 得到的。这意味着你在 template1 中所做的任何更改,都会传播到后来创建的所有数据库中。因此,除非你希望这些对象出现在每一个新建数据库中,否则应避免在 template1 中创建对象。更多细节见第 23.3 节。
为了方便,还可以从 shell 中执行一个程序来创建新数据库,即 createdb。
createdb dbname
createdb 并没有什么特殊之处。它连接到 postgres 数据库并发出 CREATE DATABASE 命令,和上面描述的完全一样。关于调用细节见 createdb 参考页。注意,不带任何参数的 createdb 会创建一个与当前用户名同名的数据库。
注意
第 21 章包含关于如何限制谁能连接到给定数据库的信息。
有时你会想为其他人创建数据库,并让他们成为新数据库的拥有者,以便他们自行配置和管理它。要实现这一点,可使用下列命令之一:
CREATE DATABASEdbnameOWNERrolename;
这是在 SQL 环境中使用;或者:
createdb -Orolenamedbname
这是在 shell 中使用。只有超级用户才允许为其他人(即为一个你不是其成员的角色)创建数据库。
报告文档问题
阅读 上游文档. 通过 PostgreSQL 文档反馈表单.