要创建数据库,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
原始内容的干净副本。当需要创建没有站点的本地添加内容的数据库时,可以克隆 template0
而不是 template1
。有关更多详细信息,请参见 第 22.3 节。
为了方便起见,还有一个可以在 shell 中执行的程序来创建新数据库,即 createdb
。
createdb dbname
createdb
并没有做什么神奇的事情。它连接到 postgres
数据库并发出 CREATE DATABASE
命令,这与上面描述的完全相同。createdb 参考页包含调用详情。请注意,不带任何参数的 createdb
将创建一个以当前用户名命名的数据库。
关于如何限制谁可以连接到特定数据库的信息,请参见 第 20 章。
有时您想为别人创建一个数据库,并让他们成为新数据库的所有者,以便他们可以自己配置和管理。要实现这一点,请在 SQL 环境中使用以下命令之一
CREATE DATABASEdbname
OWNERrolename
;
或在 shell 中使用
createdb -Orolename
dbname
。只有超级用户才能为别人(即,为非您所属角色的角色)创建数据库。
如果您在文档中看到任何不正确、与您对特定功能的体验不符或需要进一步澄清的内容,请使用 此表单 报告文档问题。