CREATE DATABASE
CREATE DATABASE¶
创建一个新的数据库。
- 语法
sql CREATE DATABASE name [ [WITH] [OWNER [=] user_name] [TEMPLATE [=] template] [ENCODING [=] encoding] [LC_COLLATE [=] lc_collate] [LC_CTYPE [=] lc_ctype] [TABLESPACE [=] tablespace] [CONNECTION LIMIT [=] connlimit ] [COMPATIBILITY [=] compatibility ] ]
- 描述
-
CREATE DATABASE
创建一个新的数据库。 要创建数据库,您必须是超级用户或具有特殊的CREATEDB
权限。默认情况下,创建者成为新数据库的所有者。 超级用户可以使用
OWNER
子句创建其他用户拥有的数据库。他们甚至可以创建没有特殊权限的用户所拥有的数据库。具有CREATEDB
权限的非超级用户只能创建自己拥有的数据库。默认情况下,将通过克隆标准系统数据库
template1
来创建新数据库。 可以通过写入TEMPLATE name
来指定其他模板。特别是,通过编写TEMPLATE template0
,您可以创建一个仅包含SeaboxMPP数据库预定义的标准对象的干净数据库。如果希望避免复制任何可能已添加到template1
的本地安装对象,则此功能很有用。 - 参数
-
该SQL命令参数说明见下
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表示没有限制。
compatibility
- 在新数据库中使用的兼容功能。指定字符串常量,目前仅支持常量
emptystr_as_null
。指定compatibility 'emptystr_as_null'
后,会在新数据库中打开compat_emptystr_as_null参数,该参数功能参见兼容模式说明。
- 注解
-
CREATE DATABASE
不能在事务块内执行。通过将数据库名称指定为模板来复制数据库时,在复制数据库过程中,不能将其他会话连接到模板数据库。 模板数据库的新连接被锁定,直到
CREATE DATABASE
完成。对超级用户没有强制
CONNECTION LIMIT
。为新数据库指定的字符集编码必须与所选的语言环境设置(
LC_COLLATE
和LC_CTYPE
)兼容。如果语言环境为C
(或等价的POSIX
),则所有编码都被允许,但是对于其他语言环境设置,只有一种编码可以正常工作。CREATE DATABASE
将允许超级用户指定SQL_ASCII
编码,而与语言环境设置无关,但是不建议使用此选项,并且如果将与语言环境不兼容的数据存储在数据库中,则可能会导致字符串函数出现异常。编码和语言环境设置必须与模板数据库的设置匹配,除非将
template0
用作模板。 这是因为COLLATE
和CTYPE
影响索引的顺序,因此从模板数据库复制的任何索引在具有不同设置的新数据库中都将无效。 但是,已知template0
不包含任何会受到影响的数据或索引。 - 示例
-
要创建一个新的数据库:
CREATE DATABASE scdb;
要创建用户
salesapp
拥有的数据库sales
并使用salesspace
的默认表空间:CREATE DATABASE sales OWNER salesapp TABLESPACE salesspace;
要创建支持ISO-8859-1字符集的数据库
music
:CREATE DATABASE music ENCODING 'LATIN1' TEMPLATE template0;
在此示例中,仅当
template1
的编码不是ISO-8859-1时才需要TEMPLATE template0
子句。请注意,更改编码可能还需要选择新的LC_COLLATE
和LC_CTYPE
设置。要创建兼容空串与null值功能的数据库
cmpt
:CREATE DATABASE cmpt COMPATIBILITY 'emptystr_as_null';
- 兼容性说明
- SQL标准中没有
CREATE DATABASE
语句。 数据库等效于目录,目录的创建是实现定义的。 - 相关SQL命令
ALTER DATABASE
,DROP DATABASE