CREATE DATABASE
CREATE DATABASE — 创建一个新数据库
大纲
CREATE DATABASEname[ [ WITH ] [ OWNER [=]dbowner] [ TEMPLATE [=]template] [ ENCODING [=]encoding] [ TABLESPACE [=]tablespace] [ CONNECTION LIMIT [=]connlimit] ]
描述
CREATE DATABASE 创建一个新的 PostgreSQL 数据库。
要创建数据库,你必须是超级用户,或者拥有特殊的
CREATEDB 权限。见CREATE USER。
通常,创建者会成为新数据库的拥有者。超级用户可以使用
OWNER 子句创建由其他用户拥有的数据库,甚至可以创建由不具有任何特殊权限的用户拥有的数据库。具有CREATEDB
权限的非超级用户只能创建由自己拥有的数据库。
默认情况下,新数据库通过克隆标准系统数据库
template1 来创建。可以通过写成 TEMPLATE
指定其他模板。特别是,写成 nameTEMPLATE template0 时,可以创建一个全新的数据库,它只包含你的 PostgreSQL 版本预定义的标准对象。如果你希望避免复制任何可能已添加到 template1 中的站点本地附加对象,这会很有用。
参数
name要创建的数据库名称。
dbowner将拥有新数据库的数据库用户的名称,或使用
DEFAULT以使用默认值(即执行命令的用户)。template用于创建新数据库的模板名称,或者指定
DEFAULT以使用默认模板(template1)。encoding新数据库要使用的字符集编码。可指定字符串常量(例如
'SQL_ASCII')、整数编码编号,或者指定DEFAULT以使用默认编码(即模板数据库的编码)。PostgreSQL 服务器支持的字符集见第 21.2.1 节。tablespace将与新数据库关联的表空间名称,或者指定
DEFAULT以使用模板数据库的表空间。该表空间将成为在此数据库中创建对象时使用的默认表空间。详见CREATE TABLESPACE。connlimit可对该数据库建立的并发连接数。-1(默认值)表示不受限制。
可选参数可以按任意顺序书写,不一定要按照上面的顺序。
注解
CREATE DATABASE 不能在事务块内执行。
形如 “could not initialize database directory” 的错误,多半与数据目录权限不足、磁盘已满或其他文件系统问题有关。
使用DROP DATABASE删除数据库。
程序createdb是这个命令的一个包装器程序,为方便使用而提供。
尽管可以通过把某个数据库名指定为模板,从而复制它而不是复制
template1,但这(至少目前)并不打算作为一种通用的
“COPY DATABASE” 功能。主要限制是,在复制模板数据库期间,不能有任何其他会话连接到该数据库。CREATE DATABASE 在启动时如果发现存在任何其他连接,就会失败;否则,在
CREATE DATABASE 完成之前,将阻止对模板数据库建立新的连接。详见第 19.3 节。
CONNECTION LIMIT 选项只是近似地被强制执行;如果两个新会话几乎同时启动,而该数据库只剩下一个连接“槽”,则两者都可能失败。此外,该限制对超级用户无效。
示例
要创建一个新数据库:
CREATE DATABASE lusiadas;
要创建一个由用户 salesapp 拥有、默认表空间为
salesspace 的数据库 sales:
CREATE DATABASE sales OWNER salesapp TABLESPACE salesspace;
要创建支持 ISO-8859-1 字符集的数据库music:
CREATE DATABASE music ENCODING 'LATIN1';
兼容性
SQL 标准中没有 CREATE DATABASE 语句。数据库相当于目录,而目录的创建由实现定义。