CREATE DATABASE

CREATE DATABASE —创建一个新的数据库

Synopsis

CREATE DATABASE name
    [ [ WITH ] [ OWNER [=] user_name ]
           [ TEMPLATE [=] template ]
           [ ENCODING [=] encoding ]
           [ LC_COLLATE [=] lc_collate ]
           [ LC_CTYPE [=] lc_ctype ]
           [ TABLESPACE [=] tablespace_name ]
           [ ALLOW_CONNECTIONS [=] allowconn ]
           [ CONNECTION LIMIT [=] connlimit ]
           [ IS_TEMPLATE [=] istemplate ] ]

Description

CREATE DATABASE创建一个新的 PostgreSQL 数据库。

要创建数据库,您必须是超级用户或具有特殊的CREATEDB特权。参见CREATE USER

默认情况下,将通过克隆标准系统数据库template1来创建新数据库。可以通过写入TEMPLATE name来指定其他模板。特别地,通过编写TEMPLATE template0,您可以创建一个原始数据库,该数据库仅包含您的 PostgreSQL 版本 sched 义的标准对象。如果您希望避免复制任何可能已添加到template1的安装本地对象,则这很有用。

Parameters

可选参数可以以任何 Sequences 编写,而不仅限于上面说明的 Sequences。

Notes

CREATE DATABASE无法在事务块内执行。

出现“无法初始化数据库目录”的错误很可能与数据目录权限不足,磁盘已满或其他文件系统问题有关。

使用DROP DATABASE删除数据库。

程序createdb是围绕此命令的包装程序,为方便起见而提供。

不会从模板数据库复制数据库级配置参数(通过ALTER DATABASE设置)。

尽管可以通过将其名称指定为模板来复制template1以外的数据库,但是(尚未)将其用作通用的“ COPY DATABASE”功能。主要限制是,在复制模板数据库时,无法将其他会话连接到模板数据库。如果CREATE DATABASE启动时存在任何其他连接,它将失败;否则,将锁定与模板数据库的新连接,直到CREATE DATABASE完成。有关更多信息,请参见Section 22.3

为新数据库指定的字符集编码必须与所选的语言环境设置(LC_COLLATELC_CTYPE)兼容。如果语言环境是C(或等效地POSIX),则允许所有编码,但是对于其他语言环境设置,只有一种编码可以正常工作。 (但是,在 Windows 上,UTF-8 编码可与任何语言环境一起使用.)CREATE DATABASE将允许超级用户指定SQL_ASCII编码,而与语言环境设置无关,但是不建议使用此选择,并且如果存在以下情况,则可能导致字符串功能出现异常:与语言环境不兼容的编码存储在数据库中。

编码和语言环境设置必须与模板数据库的设置匹配,除非将template0用作模板。这是因为其他数据库可能包含与指定编码不匹配的数据,或者可能包含其排序 Sequences 受LC_COLLATELC_CTYPE影响的索引。复制此类数据将导致数据库根据新设置损坏。但是,已知template0不包含任何会受到影响的数据或索引。

CONNECTION LIMIT选项仅强制执行;如果两个新会话大约在同一时间开始,而数据库仅剩下一个连接“插槽”,则这两个会话都可能失败。同样,对超级用户或后台工作人员进程也没有强制执行此限制。

Examples

要创建一个新的数据库:

CREATE DATABASE lusiadas;

创建用户salesapp拥有的数据库sales且其默认表空间为salesspace

CREATE DATABASE sales OWNER salesapp TABLESPACE salesspace;

要创建具有不同语言环境的数据库music,请执行以下操作:

CREATE DATABASE music
    LC_COLLATE 'sv_SE.utf8' LC_CTYPE 'sv_SE.utf8'
    TEMPLATE template0;

在此示例中,如果指定的语言环境与template1中的语言环境不同,则需要TEMPLATE template0子句。 (如果不是,则显式指定语言环境是多余的.)

要创建具有不同语言环境和不同字符集编码的数据库music2,请执行以下操作:

CREATE DATABASE music2
    LC_COLLATE 'sv_SE.iso885915' LC_CTYPE 'sv_SE.iso885915'
    ENCODING LATIN9
    TEMPLATE template0;

指定的语言环境和编码设置必须匹配,否则将报告错误。

请注意,语言环境名称是特定于 os 的,因此上述命令可能无法在所有地方以相同的方式起作用。

Compatibility

SQL 标准中没有CREATE DATABASE语句。数据库等同于目录,目录的创建是实现定义的。

See Also

ALTER DATABASE, DROP DATABASE

上一章 首页 下一章