Postgresql 中文操作指南

23.2. Creating a Database #

为了创建数据库,PostgreSQL 服务器必须处于启动并运行状态(请参阅 Section 19.3)。

使用 SQL 命令创建数据库:

CREATE DATABASE name;

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

创建数据库是一种受限操作。有关如何授予权限的信息,请参阅 Section 22.2

由于您需要连接到数据库服务器才能执行_CREATE DATABASE_命令,那么问题是如何在任何给定站点上创建_first_数据库。第一个数据库总是由_initdb_命令在数据存储区域初始化时创建。(参见 Section 19.2。)此数据库称为 postgres。因此,要创建第一个“普通”数据库,您可以连接到 postgres

在数据库集群初始化期间,还创建了这两个附加数据库 template1template0。每当在集群内创建一个新数据库时,template1 基本上会被克隆。这意味着你对 template1 所做的任何更改都会传播到随后创建的所有数据库。因此,除非你想将它们传播到每个新创建的数据库,否则避免在 template1 中创建对象。template0 的目的是作为 template1 的原始内容的原始副本。在需要创建一个不带任何此类本地站点附加内容的数据库时,可以克隆它来代替 template1。更多详细信息显示在 Section 23.3 中。

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

createdb dbname

createdb 不进行任何神奇操作。它连接到 postgres 数据库并按上述说明确切地发出 CREATE DATABASE 命令。 createdb 引用页包含调用详细信息。请注意,如果没有提供任何参数的 createdb 会创建具有当前用户名的数据库。

Note

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

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

CREATE DATABASE dbname OWNER rolename;

在 SQL 环境中,或者:

createdb -O rolename dbname

从 shell。只有超级用户才能为他人(即,您不属于的某个角色)创建数据库。