支持的版本:当前 (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的原始内容的原始副本。当需要创建一个不包含任何此类站点本地添加的数据库时,可以克隆它而不是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 中。只有超级用户才允许为其他人创建数据库(即,为您不是成员的角色创建数据库)。

提交更正

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