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

  • name

    • 要创建的数据库的名称。
  • user_name

    • 拥有新数据库的用户的角色名称,或使用DEFAULT来使用默认角色(即,执行命令的用户)。要创建另一个角色拥有的数据库,您必须是该角色的直接或间接成员,或者是超级用户。
  • template

    • 从中创建新数据库的模板的名称,或使用DEFAULT来使用默认模板(template1)。
  • encoding

    • 在新数据库中使用的字符集编码。指定字符串常量(例如'SQL_ASCII'),整数编码数字或DEFAULT以使用默认编码(即模板数据库的编码)。 Section 23.3.1中描述了 PostgreSQL 服务器支持的字符集。有关其他限制,请参见下文。
  • lc_collate

    • 在新数据库中使用的排序规则(LC_COLLATE)。这会影响应用于字符串的排序 Sequences,例如在使用 ORDER BY 的查询中,以及在文本列的索引中使用的 Sequences。默认设置是使用模板数据库的排序规则。有关其他限制,请参见下文。
  • lc_ctype

    • 在新数据库中使用的字符分类(LC_CTYPE)。这会影响字符的分类,例如下,上和数字。默认值是使用模板数据库的字符分类。有关其他限制,请参见下文。
  • tablespace_name

    • 将与新数据库关联的表空间的名称,或DEFAULT以使用模板数据库的表空间。该表空间将是用于在此数据库中创建的对象的默认表空间。有关更多信息,请参见CREATE TABLESPACE
  • allowconn

    • 如果为 false,则没有人可以连接到该数据库。默认值为 true,允许连接(除非受到其他机制(例如GRANT/REVOKE CONNECT)的限制)。
  • connlimit

    • 可以与此数据库构建多少个并发连接。 -1(默认值)表示没有限制。
  • istemplate

    • 如果为 true,则任何具有CREATEDB特权的用户都可以克隆此数据库;如果为 false(默认值),则只有超级用户或数据库所有者才能克隆它。

可选参数可以以任何 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