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