CREATE DATABASE

创建一个新的数据库。

概要

  1. CREATE DATABASE name [ [WITH] [OWNER [=] user_name]
  2. [TEMPLATE [=] template]
  3. [ENCODING [=] encoding]
  4. [LC_COLLATE [=] lc_collate]
  5. [LC_CTYPE [=] lc_ctype]
  6. [TABLESPACE [=] tablespace]
  7. [CONNECTION LIMIT [=] connlimit ] ]

描述

CREATE DATABASE创建一个新的数据库。 要创建数据库,您必须是超级用户或具有特殊的CREATEDB特权。

默认情况下,创建者成为新数据库的所有者。 超级用户可以使用OWNER子句创建其他用户拥有的数据库。 他们甚至可以创建没有特殊特权的用户所拥有的数据库。 具有CREATEDB特权的非超级用户只能创建自己拥有的数据库。

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

参数

name

要创建的数据库的名称。

user_name

拥有新数据库的用户的名称,或者使用默认所有者(执行命令的用户)DEFAULT。

template

创建新数据库的模板的名称,或者DEFAULT使用默认模板的模板(template1)。

encoding

在新数据库中使用的字符集编码。 指定字符串常量(例如’SQL_ASCII’),整数编码数字或DEFAULT以使用默认编码。 有关更多信息,请参见字符集支持

lc_collate

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

lc_ctype

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

tablespace

将与新数据库关联的表空间的名称,或者为DEFAULT以使用模板数据库的表空间。 该表空间将是用于在此数据库中创建的对象的默认表空间。

connlimit

可能的最大并发连接数。 默认值-1表示没有限制。

注解

CREATE DATABASE不能在事务块内执行。

通过将数据库名称指定为模板来复制数据库时,在复制数据库过程中,不能将其他会话连接到模板数据库。 模板数据库的新连接被锁定,直到CREATE DATABASE完成。

对超级用户没有强制CONNECTION LIMIT。

为新数据库指定的字符集编码必须与所选的语言环境设置(LC_COLLATE和LC_CTYPE)兼容。 如果语言环境为C(或等价的POSIX),则允许所有编码,但是对于其他语言环境设置,只有一种编码可以正常工作。 CREATE DATABASE将允许超级用户指定SQL_ASCII编码,而与语言环境设置无关, 但是不建议使用此选项,并且如果与语言环境不兼容的数据存储在数据库中,则可能会导致字符串函数出现异常。

编码和语言环境设置必须与模板数据库的设置匹配,除非将template0用作模板。 这是因为COLLATE和CTYPE影响索引的顺序, 因此从模板数据库复制的任何索引在具有不同设置的新数据库中都将无效。 但是,已知template0不包含任何会受到影响的数据或索引。

示例

要创建一个新的数据库:

  1. CREATE DATABASE gpdb;

要创建用户salesapp拥有的数据库sales并使用salesspace的默认表空间:

  1. CREATE DATABASE sales OWNER salesapp TABLESPACE salesspace;

要创建支持ISO-8859-1字符集的数据库music:

  1. CREATE DATABASE music ENCODING 'LATIN1' TEMPLATE template0;

在此示例中,仅当template1的编码不是ISO-8859-1时才需要TEMPLATE template0子句。 请注意,更改编码可能还需要选择新的LC_COLLATE和LC_CTYPE设置。

兼容性

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

另见

ALTER DATABASE , DROP DATABASE

Parent topic: SQL Command Reference