DATABASE

​ 数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合。

​ 数据库是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合,可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作。

CREATE DATABASE

​ CREATE DATABASE语句创建一个新的InCloud ZNBASE数据库。只有admin角色成员才能创建新数据库(默认情况下,root用户属于admin角色)。创建成功后,该用户拥有该数据库的全部权限:CREATE,DROP,USAGE权限,同时将新建数据库的USAGE赋给public角色,使所有用户均可访问数据库。

语法格式

创建DATABASE的语法格式如下:

DATABASE - 图1

​ 如果添加了IF NOT EXISTS,当要创建的数据库不存在时,创建数据库;如果已经存在,创建数据库不成功,但是不抛出错误。

​ 如果不添加IF NOT EXISTS,当要创建的数据库不存在时,创建数据库;如果已经存在,创建数据库不成功,抛出错误:数据库已存在。

​ CREATE DATABASE语句可以带一个可选项,ENCODING子句来与PostgreSQL兼容。但UTF-8是唯一支持的编码,别名UTF8 UNICODE也被接受。

​ 值应该用单引号括起来,并且不区分大小写。

  • opt_with

DATABASE - 图2

  • opt_template_clause

DATABASE - 图3

  • opt_equal

DATABASE - 图4

  • non_reserved_word_or_sconst

DATABASE - 图5

  • opt_lc_collate_clause

DATABASE - 图6

  • opt_lc_ctype_clause

DATABASE - 图7

参数说明

  • database_name

    要创建的数据库名称,该名称必须是唯一的,并遵循本数据库标识符规则。

  • opt_with

    WITH关键字,可以选择加或者不加。

  • opt_template_clause

    在创建数据库时可以指定模板库,InCloud ZNBASE允许基于模板数据库创建数据库。template1是默认模板数据库。

  • opt_equal

    “=”操作符。

  • non_reserved_word_or_sconst

    非保留字或者非SCONST常量。

  • opt_lc_collate_clause

    指定新数据库的排序规则。排序规则指定影响SELECT语句中ORDER BY子句结果的字符串的排序顺序。如果没有在参数opt_lc_collate_clause中明确指定模板数据库的排序规则,则该排序规则是新数据库的默认排序规则。参数的设置是在初始化数据库的时候设置的,初始化后是无法更改的。

  • opt_lc_ctype_clause

    指定新数据库的字符分类。该opt_lc_ctype_clause影响分类例如:数字,上下。默认值为模板数据库的字符分类。参数的设置是在初始化数据库的时候设置的,初始化后是无法更改的。

示例

示例1:创建名为db1的数据库。

CREATE DATABASE db1;

示例2:创建一个已经存在的数据库db1,使用IF NOT EXISTS,创建不成功但不抛出错误。

CREATE DATABASE IF NOT EXISTS db1;

CREATE DATABASE

SHOW DATABASES

​ SHOW DATABASES 语句用于列出InCloud ZNBASE集群中包含的所有数据库,用户拥有数据库的任意权限,即可显示。

语法格式

​ 显示DATABASE的语法格式如下:

DATABASE - 图8

示例

示例1:查询所有的数据库

SHOW DATABASES;

database_name

+———————-+

db1

db2

defaultdb

jdb

nodetest

postgres

system

yx

ALTER DATABASE

​ 可以进行数据库Range副本相关参数的配置。

​ 可以用于修改数据库名称,无法更改与视图相关联的数据库名。只有admin角色成员才能创建新数据库(默认情况下,root用户属于admin角色)。创建成功后,该用户拥有该数据库的全部权限:CREATE,DROP,USAGE权限,同时将新建数据库的USAGE赋给public角色,使所有用户均可访问数据库。新名称也必须在该数据库中具有唯一性,并且遵循标志符规则。

语法格式

​ 修改数据库的语法格式如下:

DATABASE - 图9

DATABASE - 图10

​ 如果为设置值,则新区域配置将从其父区域继承其值(例如,分区区域从表区域继承),不必使用default。

​ 如果将变量设置为COPY FROM PARENT(例如range_max_bytes = COPY FROM PARENT),则该变量将从其父Range副本复制其值。该COPY FROM PARENT值是使用方便的快捷方式,因此不必查找父级的当前值。例如,必须将range_max_bytes和range_min_bytes变量一起设置,因此在编辑一个值时,可以将其COPY FROM PARENT用于另一个。请注意,如果在复制子Range副本后更改了父Range副本中的变量,则更改不会反映在子区域中。

​ DISCARD用于删除Range副本。

参数说明

  • database_name

    数据库名称。在修改数据库名称的语法中,前面一个database_name指的是现在存在的数据库名称。后面一个database_name指的是新的数据库名称。

  • variable

    要更改的变量的名称,这些变量包含如下:

  • range_min_bytes

    区域中数据范围的最小大小(以字节为单位)。当范围小于此大小时,InCloud ZNBASE会将其与相邻范围合并。默认值: 16777216(16MiB)

  • range_max_bytes

    该区域中数据范围的最大大小(以字节为单位)。当范围达到此大小时,InCloud ZNBASE会将其切分到两个范围。默认值: 67108864(64MiB)

  • gc.ttlseconds

    覆盖的值在垃圾回收之前将会被保留的秒数。如果值经常被覆盖,则较小的值可以节省磁盘空间。较大的值会增加AS OF SYSTEM TIME查询允许的范围,也称为“ 时间旅行查询”。不建议将其设置为以下600(10分钟)。这样做会给长时间运行的查询带来麻烦。另外,由于一行的所有版本都存储在一个永不拆分的单个范围内,因此不建议将其设置得太高,以使该时间段内对该行的所有更改加起来可能超过64MiB。这样的范围过大可能导致服务器的内存不足或其他问题。默认值:90000(25小时)。

  • num_replicas

    区域中的副本数。默认值为3。对于system数据库以及.meta,.liveness和.system范围,默认值为5。

  • constraints

    一系列影响副本位置的必需(+)和/或禁止(-)约束。请参阅约束类型和约束的范围更多的细节。

    为了防止难以检测到的错字,对商店属性和节点位置设置的约束必须与传递给集群中至少一个节点的值匹配。如果不是,则表明存在错误。默认值:无限制,InCloud ZNBASE将每个副本定位在一个唯一节点上,并尝试将副本均匀分布在各地。

  • lease_preferences

    影响租户位置的要求和/或禁止约束的有序列表。每个约束是必需的还是禁止的分别用前导+或表示-。注意,租用首选项约束不必与该constraints字段共享。例如,对于用户配置而言,定义一个lease_preferences不引用该constraints字段中任何值的字段是有效的。定义一个lease_preferences完全没有constraints字段的字段也是有效的。

    如果不能满足第一个优先级,则InCloudZNBASE将尝试满足第二个优先级,依此类推。如果不能满足所有首选项,则将使用默认的租用放置算法放置租用,该算法将根据每个节点已拥有的租约来决定租用放置,以使所有节点的租约数量相同。

    列表中的每个值可以包含多个约束。例如,该列表的[[+zone=us-east-1b, +ssd],[+zone=us-east-1a], [+zone=us-east-1c,+ssd]]意思是“首选在us-east-1b区域并且具有SSD的节点,然后是一些在us-east-1a区域的节点,最后是在us-east-1c区域并且具有SSD的节点”。有关用法示例,请参阅将租约持有人限制到特定的数据中心。默认值:如果未指定此字段,则不应用租赁位置首选项。

  • value

    要更改的变量的值

示例

示例1:为数据库创建Range副本

要控制特定数据库的复制,请使用ALTER DATABASE … CONFIGURE ZONE语句定义相关值(其他值将从父区域继承):

ALTER DATABASE db3 CONFIGURE ZONE USING num_replicas = 5, gc.ttlseconds = 100000; CONFIGURE ZONE 1

SHOW ZONE CONFIGURATION FOR DATABASE db3;

zone_name | config_sql

+—————-+————————————————————-+

db3 | ALTER DATABASE db3 CONFIGURE ZONE USING | range_min_bytes = 16777216, | range_max_bytes = 67108864, | gc.ttlseconds = 100000, | num_replicas = 5, | constraints = ‘[]‘, | lease_preferences = ‘[]‘ |

示例2:数据库重命名

如果将数据库设置为当前数据库或sql_safe_updates = true,则不能重命名该数据库。

SHOW DATABASES;

database_name

+———————-+

db1

db2

db3

defaultdb

jdb

nodetest

postgres

system

yx

ALTER DATABASE db3 RENAME TO db4;

RENAME DATABASE

SHOW DATABASES;

database_name

+———————-+

db1

db2

db4

defaultdb

jdb

nodetest

postgres

system

yx

DROP DATABASE

​ DROP DATABASE 语句用于从InCloud ZNBASE集群中删除数据库及其所有对象,任何用户拥有目标数据库和其下全部模式及对象的DROP权限,即可执行删除目标数据库的操作,注意目标数据库不得为当前数据库。删除成功后,所有用户针对目标数据库和其下全部模式和对象的所有权限均被删除。

语法格式

删除数据库的语法格式如下:

DATABASE - 图11

如果添加了IF EXISTS,当要删除的数据库存在时,删除数据库;如果不存在,删除数据库不成功,但是不抛出错误。

如果不添加IF EXISTS,当要删除的数据库存在时,删除数据库;如果不存在,删除数据库不成功,抛出错误:数据库不存在。

CASCADE级联删除,删除数据库中的所有表和视图以及依赖于那些表的所有对象(例如约束和视图),CASCADE不会列出删除的对象,请谨慎使用。

RESTRICT 如果一个数据库中包含表和视图,那么删除数据库会失败。

参数说明

  • database_name

    要删除的数据库名称。

示例

示例1:删除数据库及其对象(CASCADE)

对于非交互式会话(例如,客户端应用程序),默认情况下DROP DATABASE 应使用CASCADE选项,该选项将删除数据库中的所有表和视图,同时也会删除所有依赖表的对象(例如约束和视图)

SHOW TABLES FROM db3;

table_name

+——————+

t1 (1 row)

DROP DATABASE db3 CASCADE;

DROP DATABASE

SHOW TABLES FROM db3;

pq: “db3” does not match any valid database or schema

示例2:禁止删除一个非空的数据库(RESTRICT)

当一个数据库不是空的时候,RESTRICT会阻止数据库的删除。

SHOW TABLES FROM db1;

table_name

+——————+

t1

t2

DROP DATABASE db1 RESTRICT;

pq: database “db1” is not empty and RESTRICT was specified