为了创建数据库,PostgreSQL 服务器必须处于启动并运行状态(请参阅第 18.3 节)。
使用 SQL 命令 CREATE DATABASE 创建数据库
CREATE DATABASE name
;
其中 name
遵循以下有关SQL标识符的规则。当前角色会自动成为新数据库的所有者。所有者具有删除数据库的权限(也会删除数据库中的所有对象,即使这些对象有不同的所有者)。
创建数据库是一项受限操作。有关如何授予权限,请参阅第 21.2 节。
由于您需要连接到数据库服务器才能执行 CREATE DATABASE
命令,因此问题仍然是如何在任何给定的网站上创建 第一个 数据库。第一个数据库始终由 initdb
命令在初始化数据存储区域时创建。(请参阅第 18.2 节。)此数据库称为 postgres
。 因此,要创建第一个 “常规” 数据库,您可以连接到 postgres
。
在数据库集群初始化期间还创建了另外两个数据库:template1
和 template0
。 每当在集群中创建新数据库时,template1
基本上会被克隆。这意味着您在 template1
中进行的任何更改都会传播到所有随后创建的数据库。因此,请避免在 template1
中创建对象,除非您希望将这些对象传播到每一个新创建的数据库中。 template0
被用作 template1
原始内容的一个原始副本。如果在没有任何此类网站本地添加项的情况下创建数据库非常重要,它可以克隆而不是 template1
。更多详细信息请参阅第 22.3 节。
为了方便起见,您可以执行一个程序从 shell 中创建新数据库,createdb
。
createdb dbname
createdb
不会执行任何魔法操作。它会连接到 postgres
数据库并发布 CREATE DATABASE
命令,就像上面描述的那样。createdb 引用页包含调用详细信息。请注意,如果不带任何参数运行 createdb
,则会使用当前用户名创建一个数据库。
第 20 章 包含关于如何限制谁可以连接到给定数据库的信息。
有时您想为其他人创建一个数据库,并让他们成为新数据库的所有者,以便他们可以自行配置和管理数据库。要实现此目的,请使用以下命令:
CREATE DATABASEdbname
OWNERrolename
;
从 SQL 环境或
createdb -Orolename
dbname
从外壳。只有超级用户被允许为其他人(即您不是其成员的角色)创建一个数据库。