CREATE DATABASE
CREATE DATABASE - 创建一个新数据库
语法格式
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 ] ]
说明
CREATE DATABASE 创建一个新的Vastbase E100数据库。
要创建数据库,您必须是超级用户或具有特殊的 CREATEDB 权限。见 CREATE ROLE。
默认情况下,将通过克隆标准系统数据库 template1来创建新数据库。可以通过编写 TEMPLATE name来指定不同的模板。特别是,通过编写 TEMPLATE template0,您可以创建一个仅包含您的Vastbase E100版本预定义的标准对象的原始数据库。如果您希望避免复制可能已添加到template1 的任何安装本地对象,这将非常有用。
参数说明
name
要创建的数据库名。
user_name
将拥有新数据库的用户的角色名,或者用DEFAULT来使用默认值(即,执行该命令的用户)。要创建一个被另一个角色拥有的数据库,你必须是该角色的一个直接或间接成员,或者是一个超级用户。
template
要从其创建新数据库的模板名称,或者用DEFAULT来使用默认模板(template1)。
encoding
要在新数据库中使用的字符集编码。指定一个字符串常量(例如'SQL_ASCII'),或者一个整数编码编号,或者DEFAULT来使用默认的编码(即,模板数据库的编码)。Vastbase E100服务器所支持的字符集在第 23.3.1 节中描述。附加限制见下文。
lc_collate
要在新数据库中使用的排序规则顺序(LC_COLLATE)。这会影响应用到字符串的排序顺序,例如在带 ORDER BY 的查询中,以及文本列上索引所使用的顺序。默认是使用模板数据库的排序规则顺序。附加限制见下文。
lc_ctype
要在新数据库中使用的字符分类(LC_CTYPE)。这会影响字符的类别,如小写、大写和数字。默认是使用模板数据库的字符分类。附加限制见下文。
tablespace_name
将与新数据库相关联的表空间名称,或者DEFAULT来使用模板数据库的表空间。这个表空间将是在这个数据库中创建的对象的表空间。详见CREATE TABLESPACE。
allowconn
如果为假,则没有人能连接到这个数据库。默认为真,表示允许连接(除了 被其他机制约束以外,例如GRANT/REVOKE CONNECT)。
connlimit
这个数据库允许多少并发连接。-1 (默认值)表示没有限制。
istemplate
如果为真,则任何具有CREATEDB特权的用户都可以从 这个数据库克隆。如果为假(默认),则只有超级用户或者该数据库的拥有者 可以克隆它。
可选的参数可以被写成任何顺序,不用按照上面说明的顺序。
注意事项
CREATE DATABASE 无法在事务块内执行。
“无法初始化数据库目录”行的错误很可能与数据目录,完整磁盘或其他文件系统问题的权限不足有关。
使用 DROP DATABASE 删除数据库。
程序 createdb是围绕此命令的包装程序,为方便起见而提供。
不从模板数据库复制数据库级配置参数说明(通过 ALTER DATABASE设置)。
虽然可以通过指定其名称作为模板来复制 template1以外的数据库,但这还不是(通常)用作通用” COPY DATABASE”工具。主要限制是在复制模板数据库时不能将其他会话连接到模板数据库。如果启动时存在任何其他连接,则CREATE DATABASE 将失败;否则,模板数据库的新连接将被锁定,直到 CREATE DATABASE 完成。
为新数据库指定的字符集编码必须与所选的区域设置( LC_COLLATE 和 LC_CTYPE)兼容。如果语言环境是 C (或等效 POSIX),则允许所有编码,但对于其他语言环境设置,只有一种编码可以正常工作。 (但是,在Windows上,UTF-8编码可以与任何语言环境一起使用。) CREATE DATABASE 将允许超级用户指定 SQL_ASCII编码而不管语言环境设置如何,但是这种选择已被弃用,并且如果数据那么可能导致字符串函数的不当行为不与编码兼容的语言环境存储在数据库中。
编码和语言环境设置必须与模板数据库的设置匹配,除非 template0用作模板。这是因为其他数据库可能包含与指定编码不匹配的数据,或者可能包含排序顺序受LC_COLLATE 和 LC_CTYPE影响的索引。复制此类数据将导致数据库根据新设置损坏。但是,已知 template0 不包含任何可能受影响的数据或索引。
CONNECTION LIMIT选项仅强制执行;如果两个新会话几乎同时开始,当数据库只剩下一个连接”插槽”时,两者都可能会失败。此外,不会对超级用户或后台工作进程强制执行此限制。
示例
要创建新数据库:
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;
指定的区域设置和编码设置必须匹配,否则将报告错误。
请注意,区域设置名称特定于操作系统,因此上述命令可能无法在任何地方以相同的方式工作。