Skip to content

23.2. 创建数据库#

要创建数据库,PostgreSQL服务器必须启动并运行(请参阅第 19.3 节)。

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

CREATE DATABASE name;

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

创建数据库是一项受限操作。请参阅第 22.2 节,了解如何授予权限。

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

在数据库集群初始化期间,还创建了另外两个数据库template1template0。每当在集群中创建新数据库时,template1基本上会被克隆。这意味着您在template1中所做的任何更改都会传播到所有随后创建的数据库。因此,请避免在template1中创建对象,除非您希望将它们传播到每个新创建的数据库。template0被认为是template1的原始内容的原始副本。当务必创建一个没有任何此类站点本地附加项的数据库时,可以克隆它而不是template1。更多详细信息请参见第 23.3 节

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

createdb dbname

createdb不会执行任何神奇操作。它会连接到postgres数据库并发出CREATE DATABASE命令,与上面描述的完全相同。createdb参考页面包含调用详细信息。请注意,不带任何参数的createdb将使用当前用户名创建一个数据库。

注意

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

有时,您希望为其他人创建一个数据库,并让他们成为新数据库的所有者,以便他们可以自行配置和管理数据库。要实现此目的,请使用以下命令之一

CREATE DATABASE dbname OWNER rolename;

来自 SQL 环境,或

createdb -O rolename dbname

来自 shell。只有超级用户才能为其他人(即您不是其成员的角色)创建一个数据库。