7.2. 创建数据库

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

数据库是用查询语言命令CREATE DATABASE创建的: CREATE DATABASE:

CREATE DATABASE name

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

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

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

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

另外,为了更方便一些,你还可以用一个 shell 脚本来创建新数据库, createdb.

createdb dbname

createdb 没变什么魔术,它和 template1 联接并执行 CREATE DATABASE 命令. 和上面介绍地完全一样.它在内部使用 psql 程序. createdb 的手册页包含使用它的细节.尤其是不带任何参数调用 createdb 将以当前用户名为名称创建数据库, 这可能是也可能不是你要的.

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

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

CREATE DATABASE dbname OWNER username;

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

createdb -O username dbname

要想为其他用户创建一个数据库,你自己必须是数据库的超级用户。