为了创建一个数据库,PostgreSQL服务器必须启动并运行(见第 19.3 节)。
数据库用 SQL 命令CREATE DATABASE创建:
CREATE DATABASE name
;
其中name
遵循SQL标识符的一般规则。当前角色自动成为该新数据库的拥有者。以后删除这个数据库也是该拥有者的特权(同时还会删除其中的所有对象,即使那些对象有不同的拥有者)。
创建数据库是一个受限的操作。如何授权请见第 22.2 节。
因为你需要连接到数据库服务器来执行CREATE DATABASE
命令, 那么还有一个问题是任意给定站点的第一个数据库是怎样创建的?第一个数据库总是由initdb
命令在初始化数据存储区域时创建的(见第 19.2 节)。这个数据库被称为postgres
。因此要创建第一个“普通”数据库时,你可以连接到postgres
。
在集簇初始化期间还会创建两个额外的数据库,
template1
和
template0
,
。每当在集簇中创建新数据库时,实际上是克隆了template1
。
这意味着您在template1
中所做的任何更改都会传播到随后创建的所有数据库中。
因此,除非您希望这些更改传播到每个新创建的数据库中,否则应避免在template1
中创建对象。
template0
旨在作为template1
原始内容的原始副本。
当需要创建一个没有任何站点本地添加的数据库时,可以克隆template0
而不是template1
。
更多详细信息请参见第 23.3 节。
为了方便,你还可以用一个程序来创建新数据库:
createdb
。
createdb dbname
createdb
没什么神奇的。它连接到postgres
数据库并且发出CREATE DATABASE
命令,和前面介绍的完全一样。createdb参考页包含了调用细节。注意不带任何参数的createdb
将创建一个使用当前用户名的数据库。
第 21 章包含有关如何限制谁能连接到一个给定数据库的信息。
有时候你想为其他人创建一个数据库,并且使其成为新数据库的拥有者, 这样他们就可以自己配置和管理这个数据库。要实现这个目标,使用下列命令之一: 用于 SQL 环境的
CREATE DATABASEdbname
OWNERrolename
;
或者用于 shell 的
createdb -Orolename
dbname
只有超级用户才被允许为其他人(即为一个你不是其成员的角色)创建一个数据库。