21.2. 创建一个数据库

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

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

CREATE DATABASE name;

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

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

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

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

另外,为了方便,你还可以用程序来创建新数据库:

createdb dbname

createdbpostgres数据库连接并执行CREATE DATABASE命令。 createdb的手册页包含使用它的细节。尤其是不带任何参数调用createdb时将创建与当前用户名同名的数据库。

Note: Chapter 19包含有关如何限制哪些用户可以连接某个特定数据库的信息。

有时候你需要为其它人创建一个数据库,并且使其成为新数据库的所有者, 这样他就可以自己配置和管理这个数据库。要实现这个目标,使用下列命令中的一条:

CREATE DATABASE dbname OWNER rolename;

;

createdb -O rolename dbname

前者用于SQL环境,后者用于命令行。只有数据库的超级用户才能为其它用户创建数据库。