19.2. 创建数据库

为了创建和删除数据库, 必须先运行PostgreSQL服务器(参阅 Section 16.3)。

数据库是用 SQL 命令 CREATE DATABASE: 创建的:

CREATE DATABASE name;

这里的 name 遵循SQL标识符的一般规则。 当前角色自动成为此新数据库的所有者。同时,以后删除这个数据库也是这个用户的特权(同时还会删除其中的所有对象, 即使那些对象有不同的所有者也这样。)

创建数据库是一个有限制的操作。参阅 Section 18.2 获取如何赋权限的信息。

因为你需要与数据库服务器联接才能执行命令CREATE DATABASE, 那么还有一个问题是任意节点的第一个数据库是怎样创建的? 第一个数据库总是由initdb命令在初始化数据存储区的时候创建的。 (参阅Section 16.2。)这个数据库叫postgres而且不能被删除。 因此要创建第一个"真正"的数据库的时候你可以与postgres联接。

第二个数据库,template1 也会被 initdb 创建。在创建一个新的数据库时, 实际上就是克隆了(复制)了 template1 数据库。 这就意味着你对 template1 做的任何修改都会传播到所有随后创建的数据库。 这就意味着说把模板数据库用于真正的工作中并不明智, 但是如果有意地使用这个特性,那它可以带来许多方便。 更多细节见Section 19.3。(译注:比如增加用户定义函数等等。)

另外,为了方便,你还可以用一个可以在 shell 中执行的程序来创建新数据库,createdb

createdb dbname

createdb 没变什么魔术,它和postgres连接并执行 CREATE DATABASE 命令。 createdb 的手册页包含使用它的细节。尤其是不带任何参数调用 createdb 将以当前用户名为名称创建数据库, 这可能是也可能不是你要的。

注意: Chapter 20 包含有关如何限制某个用户可以连接的数据库的信息。

有时候你想为其他什么人创建一个数据库。那个角色应该成为新数据库的所有者,这样他就可以自己配置和管理这个数据库。 要实现这个目标, 使用下列命令中的某一条:

CREATE DATABASE dbname OWNER rolename;

上面的是在 SQL 环境中,或者是

createdb -O rolename dbname

要想为其他用户(也就是说,一个你不是成员的角色)创建一个数据库,你自己必须是数据库的超级用户。