华为云用户手册

  • 分区表统计信息函数 gs_stat_get_partition_stats(oid) 描述:获取特定分区的统计信息。 返回值类型:record gs_stat_get_xact_partition_stats(oid) 描述:获取特定分区的事务中统计信息。 返回值类型:record gs_stat_get_all_partitions_stats() 描述:获取所有分区的统计信息。 返回值类型:setof record gs_stat_get_xact_all_partitions_stats() 描述:获取所有分区的事务中统计信息。 返回值类型:setof record gs_statio_get_all_partitions_stats() 描述:获取所有分区的I/O统计信息。 返回值类型:setof record 上述五个函数示例: 运行时统计信息上报是异步的,且基于UDP协议,后台线程处理可能存在延迟和丢包,此处示例预期仅供参考。 事务外统计信息查询 gaussdb=# CREATE TABLE part_tab1gaussdb-# (gaussdb(# a int, b intgaussdb(# )gaussdb-# PARTITION BY RANGE(b)gaussdb-# (gaussdb(# PARTITION P1 VALUES LESS THAN(10),gaussdb(# PARTITION P2 VALUES LESS THAN(20),gaussdb(# PARTITION P3 VALUES LESS THAN(MAXVALUE)gaussdb(# );CREATE TABLEgaussdb=# CREATE TABLE subpart_tab1gaussdb-# (gaussdb(# month_code VARCHAR2 ( 30 ) NOT NULL ,gaussdb(# dept_code VARCHAR2 ( 30 ) NOT NULL ,gaussdb(# user_no VARCHAR2 ( 30 ) NOT NULL ,gaussdb(# sales_amt intgaussdb(# )gaussdb-# PARTITION BY RANGE (month_code) SUBPARTITION BY RANGE (dept_code)gaussdb-# (gaussdb(# PARTITION p_201901 VALUES LESS THAN( '201903' )gaussdb(# (gaussdb(# SUBPARTITION p_201901_a VALUES LESS THAN( '2' ),gaussdb(# SUBPARTITION p_201901_b VALUES LESS THAN( '3' )gaussdb(# ),gaussdb(# PARTITION p_201902 VALUES LESS THAN( '201904' )gaussdb(# (gaussdb(# SUBPARTITION p_201902_a VALUES LESS THAN( '2' ),gaussdb(# SUBPARTITION p_201902_b VALUES LESS THAN( '3' )gaussdb(# )gaussdb(# );CREATE TABLEgaussdb=# CREATE INDEX index_part_tab1 ON part_tab1(b) LOCALgaussdb-# (gaussdb(# PARTITION b_index1,gaussdb(# PARTITION b_index2,gaussdb(# PARTITION b_index3gaussdb(# );CREATE INDEXgaussdb=# CREATE INDEX idx_user_no ON subpart_tab1(user_no) LOCAL;CREATE INDEXgaussdb=# INSERT INTO part_tab1 VALUES(1, 1);INSERT 0 1gaussdb=# INSERT INTO part_tab1 VALUES(1, 11);INSERT 0 1gaussdb=# INSERT INTO part_tab1 VALUES(1, 21);INSERT 0 1gaussdb=# UPDATE part_tab1 SET a = 2 WHERE b = 1;UPDATE 1gaussdb=# UPDATE part_tab1 SET a = 3 WHERE b = 11;UPDATE 1gaussdb=# UPDATE /*+ indexscan(part_tab1) */ part_tab1 SET a = 4 WHERE b = 21;UPDATE 1gaussdb=# DELETE FROM part_tab1;DELETE 3gaussdb=# ANALYZE part_tab1;ANALYZEgaussdb=# VACUUM part_tab1;VACUUMgaussdb=# INSERT INTO subpart_tab1 VALUES('201902', '1', '1', 1);INSERT 0 1gaussdb=# INSERT INTO subpart_tab1 VALUES('201902', '2', '2', 1);INSERT 0 1gaussdb=# INSERT INTO subpart_tab1 VALUES('201903', '1', '3', 1);INSERT 0 1gaussdb=# INSERT INTO subpart_tab1 VALUES('201903', '2', '4', 1);INSERT 0 1gaussdb=# UPDATE subpart_tab1 SET sales_amt = 2 WHERE user_no='1';UPDATE 1gaussdb=# UPDATE subpart_tab1 SET sales_amt = 3 WHERE user_no='2';UPDATE 1gaussdb=# UPDATE subpart_tab1 SET sales_amt = 4 WHERE user_no='3';UPDATE 1gaussdb=# UPDATE /*+ indexscan(subpart_tab1) */ subpart_tab1 SET sales_amt = 5 WHERE user_no='4';UPDATE 1gaussdb=# DELETE FROM subpart_tab1;DELETE 4gaussdb=# ANALYZE subpart_tab1;ANALYZEgaussdb=# VACUUM subpart_tab1;VACUUMgaussdb=# SELECT * FROM gs_stat_all_partitions; partition_oid | schemaname | relname | partition_name | sub_partition_name | seq_scan | seq_tup_read | idx_scan | idx_tup_fetch | n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | last_vacuum | last_autovacuum | last_analyze | last_autoanalyze | vacuum_count | autovacuum_count | analyze_count | autoanalyze_count ---------------+------------+--------------+----------------+--------------------+----------+--------------+----------+---------------+-----------+-----------+-----------+---------------+------------+------------+-------------------------------+------------------------+-------------------------------+------------------------+--------------+------------------+---------------+------------------- 16964 | public | subpart_tab1 | p_201902 | p_201902_b | 5 | 1 | 4 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 2023-05-15 20:36:45.293965+08 | 2000-01-01 08:00:00+08 | 2023-05-15 20:36:44.688861+08 | 2000-01-01 08:00:00+08 | 1 | 0 | 1 | 0 16963 | public | subpart_tab1 | p_201902 | p_201902_a | 5 | 1 | 4 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 2023-05-15 20:36:45.291022+08 | 2000-01-01 08:00:00+08 | 2023-05-15 20:36:44.688843+08 | 2000-01-01 08:00:00+08 | 1 | 0 | 1 | 0 16961 | public | subpart_tab1 | p_201901 | p_201901_b | 5 | 1 | 4 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 2023-05-15 20:36:45.288037+08 | 2000-01-01 08:00:00+08 | 2023-05-15 20:36:44.688829+08 | 2000-01-01 08:00:00+08 | 1 | 0 | 1 | 0 16960 | public | subpart_tab1 | p_201901 | p_201901_a | 5 | 1 | 4 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 2023-05-15 20:36:45.285311+08 | 2000-01-01 08:00:00+08 | 2023-05-15 20:36:44.688802+08 | 2000-01-01 08:00:00+08 | 1 | 0 | 1 | 0 16954 | public | part_tab1 | p3 | | 2 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 2023-05-15 20:36:29.490636+08 | 2000-01-01 08:00:00+08 | 2023-05-15 20:36:28.540115+08 | 2000-01-01 08:00:00+08 | 1 | 0 | 1 | 0 16953 | public | part_tab1 | p2 | | 4 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 2023-05-15 20:36:29.487914+08 | 2000-01-01 08:00:00+08 | 2023-05-15 20:36:28.540098+08 | 2000-01-01 08:00:00+08 | 1 | 0 | 1 | 0 16952 | public | part_tab1 | p1 | | 5 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 2023-05-15 20:36:29.48536+08 | 2000-01-01 08:00:00+08 | 2023-05-15 20:36:28.540071+08 | 2000-01-01 08:00:00+08 | 1 | 0 | 1 | 0(7 rows)gaussdb=# SELECT * FROM gs_statio_all_partitions; partition_oid | schemaname | relname | partition_name | sub_partition_name | heap_blks_read | heap_blks_hit | idx_blks_read | idx_blks_hit | toast_blks_read | toast_blks_hit | tidx_blks_read | tidx_blks_hit ---------------+------------+--------------+----------------+--------------------+----------------+---------------+---------------+--------------+-----------------+----------------+----------------+--------------- 16964 | public | subpart_tab1 | p_201902 | p_201902_b | 4 | 8 | 2 | 21 | | | | 16963 | public | subpart_tab1 | p_201902 | p_201902_a | 4 | 8 | 2 | 21 | | | | 16961 | public | subpart_tab1 | p_201901 | p_201901_b | 4 | 8 | 2 | 21 | | | | 16960 | public | subpart_tab1 | p_201901 | p_201901_a | 4 | 8 | 2 | 21 | | | | 16954 | public | part_tab1 | p3 | | 4 | 8 | 2 | 15 | | | | 16953 | public | part_tab1 | p2 | | 4 | 8 | 2 | 15 | | | | 16952 | public | part_tab1 | p1 | | 4 | 8 | 2 | 15 | | | | (7 rows)gaussdb=# SELECT * FROM gs_stat_get_partition_stats(16952); partition_oid | seq_scan | seq_tup_read | idx_scan | idx_tup_fetch | n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | n_live_tup | n_dead_tup | last_vacuum | last_autovacuum | last_analyze | last_autoanalyze | vacuum_count | autovacuum_count | analyze_count | autoanalyze_count | last_data_changed | heap_blks_read | heap_blks_hit | idx_blks_read | idx_blks_hit | tup_fetch | block_fetch ---------------+----------+--------------+----------+---------------+-----------+-----------+-----------+---------------+------------+------------+------------------------------+------------------------+-------------------------------+------------------------+--------------+------------------+---------------+-------------------+------------------------+----------------+---------------+---------------+--------------+-----------+------------- 16952 | 5 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 2023-05-15 20:36:29.48536+08 | 2000-01-01 08:00:00+08 | 2023-05-15 20:36:28.540071+08 | 2000-01-01 08:00:00+08 | 1 | 0 | 1 | 0 | 2000-01-01 08:00:00+08 | 4 | 8 | 2 | 21 | 0 | 12(1 row) 事务内统计信息查询: gaussdb=# BEGIN;BEGINgaussdb=# INSERT INTO part_tab1 VALUES(1, 1);INSERT 0 1gaussdb=# INSERT INTO part_tab1 VALUES(1, 11);INSERT 0 1gaussdb=# INSERT INTO part_tab1 VALUES(1, 21);INSERT 0 1gaussdb=# UPDATE part_tab1 SET a = 2 WHERE b = 1;UPDATE 1gaussdb=# UPDATE part_tab1 SET a = 3 WHERE b = 11;UPDATE 1gaussdb=# UPDATE /*+ indexscan(part_tab1) */ part_tab1 SET a = 4 WHERE b = 21;UPDATE 1gaussdb=# DELETE FROM part_tab1;DELETE 3gaussdb=# INSERT INTO subpart_tab1 VALUES('201902', '1', '1', 1);INSERT 0 1gaussdb=# INSERT INTO subpart_tab1 VALUES('201902', '2', '2', 1);INSERT 0 1gaussdb=# INSERT INTO subpart_tab1 VALUES('201903', '1', '3', 1);INSERT 0 1gaussdb=# INSERT INTO subpart_tab1 VALUES('201903', '2', '4', 1);INSERT 0 1gaussdb=# UPDATE subpart_tab1 SET sales_amt = 2 WHERE user_no='1';UPDATE 1gaussdb=# UPDATE subpart_tab1 SET sales_amt = 3 WHERE user_no='2';UPDATE 1gaussdb=# UPDATE subpart_tab1 SET sales_amt = 4 WHERE user_no='3';UPDATE 1gaussdb=# UPDATE /*+ indexscan(subpart_tab1) */ subpart_tab1 SET sales_amt = 5 WHERE user_no='4';UPDATE 1gaussdb=# DELETE FROM subpart_tab1;DELETE 4gaussdb=# SELECT * FROM gs_stat_xact_all_partitions; partition_oid | schemaname | relname | partition_name | sub_partition_name | seq_scan | seq_tup_read | idx_scan | idx_tup_fetch | n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd ---------------+------------+--------------+----------------+--------------------+----------+--------------+----------+---------------+-----------+-----------+-----------+--------------- 16964 | public | subpart_tab1 | p_201902 | p_201902_b | 4 | 4 | 1 | 2 | 1 | 1 | 1 | 1 16963 | public | subpart_tab1 | p_201902 | p_201902_a | 4 | 4 | 1 | 0 | 1 | 1 | 1 | 1 16961 | public | subpart_tab1 | p_201901 | p_201901_b | 4 | 4 | 1 | 0 | 1 | 1 | 1 | 1 16960 | public | subpart_tab1 | p_201901 | p_201901_a | 4 | 4 | 1 | 0 | 1 | 1 | 1 | 1 16954 | public | part_tab1 | p3 | | 1 | 1 | 1 | 2 | 1 | 1 | 1 | 1 16953 | public | part_tab1 | p2 | | 3 | 2 | 0 | 0 | 1 | 1 | 1 | 1 16952 | public | part_tab1 | p1 | | 4 | 2 | 0 | 0 | 1 | 1 | 1 | 1(7 rows)gaussdb=# SELECT * FROM gs_stat_get_xact_partition_stats(16952); partition_oid | seq_scan | seq_tup_read | idx_scan | idx_tup_fetch | n_tup_ins | n_tup_upd | n_tup_del | n_tup_hot_upd | tup_fetch ---------------+----------+--------------+----------+---------------+-----------+-----------+-----------+---------------+----------- 16952 | 4 | 2 | 0 | 0 | 1 | 1 | 1 | 1 | 0(1 row) gs_stat_get_partition_analyze_count(oid) 描述:用户在该分区上启动分析的次数。 返回值类型:bigint gs_stat_get_partition_autoanalyze_count(oid) 描述:autovacuum守护进程在该分区上启动分析的次数。 返回值类型:bigint gs_stat_get_partition_autovacuum_count(oid) 描述:autovacuum守护进程在该分区上启动清理的次数。 返回值类型:bigint gs_stat_get_partition_last_analyze_time(oid) 描述:用户在该分区上最后一次手动启动分析或者autovacuum线程启动分析的时间。 返回值类型:timestamptz gs_stat_get_partition_last_autoanalyze_time(oid) 描述:autovacuum守护进程在该分区上最后一次启动分析的时间。 返回值类型:timestamptz gs_stat_get_partition_last_autovacuum_time(oid) 描述:autovacuum守护进程在该分区上最后一次启动清理的时间。 返回值类型:timestamptz gs_stat_get_partition_last_data_changed_time(oid) 描述:对于在分区上的修改insert/update/delete/truncate,在该表上最后一次操作的时间。当前暂不支持。 返回值类型:timestamptz gs_stat_get_partition_last_vacuum_time(oid) 描述:用户在该分区上最后一次手动启动清理或者autovacuum线程启动清理的时间。 返回值类型:timestamptz gs_stat_get_partition_numscans(oid) 描述:分区顺序扫描读取的行数目。 返回值类型:bigint gs_stat_get_partition_tuples_returned(oid) 描述:分区顺序扫描读取的行数目。 返回值类型:bigint gs_stat_get_partition_tuples_fetched(oid) 描述:分区位图扫描抓取的行数目。 返回值类型:bigint gs_stat_get_partition_vacuum_count(oid) 描述:用户在该分区上启动清理的次数。 返回值类型:bigint gs_stat_get_xact_partition_tuples_fetched(oid) 描述:事务中扫描的tuple行数。 返回值类型:bigint gs_stat_get_xact_partition_numscans(oid) 描述:当前事务中分区执行的顺序扫描次数。 返回值类型:bigint gs_stat_get_xact_partition_tuples_returned(oid) 描述:当前事务中分区通过顺序扫描读取的行数。 返回值类型:bigint gs_stat_get_partition_blocks_fetched(oid) 描述:分区的磁盘块抓取请求的数量。 返回值类型:bigint gs_stat_get_partition_blocks_hit(oid) 描述:在缓冲区中找到的分区的磁盘块请求数目。 返回值类型:bigint pg_stat_get_partition_tuples_inserted(oid) 描述:插入相应表分区中行的数量。 返回值类型:bigint pg_stat_get_partition_tuples_updated(oid) 描述:在相应表分区中已更新行的数量。 返回值类型:bigint pg_stat_get_partition_tuples_deleted(oid) 描述:从相应表分区中删除行的数量。 返回值类型:bigint pg_stat_get_partition_tuples_changed(oid) 描述:该表分区上一次analyze或autoanalyze之后插入、更新、删除行的总数量。 返回值类型:bigint pg_stat_get_partition_live_tuples(oid) 描述:分区表活行数。 返回值类型:bigint pg_stat_get_partition_dead_tuples(oid) 描述:分区表死行数。 返回值类型:bigint pg_stat_get_xact_partition_tuples_inserted(oid) 描述:表分区相关的活跃子事务中插入的tuple数。 返回值类型:bigint pg_stat_get_xact_partition_tuples_deleted(oid) 描述:表分区相关的活跃子事务中删除的tuple数。 返回值类型:bigint pg_stat_get_xact_partition_tuples_hot_updated(oid) 描述:表分区相关的活跃子事务中热更新的tuple数。 返回值类型:bigint pg_stat_get_xact_partition_tuples_updated(oid) 描述:表分区相关的活跃子事务中更新的tuple数。 返回值类型:bigint pg_stat_get_partition_tuples_hot_updated 描述:返回给定分区id的分区热更新元组数的统计。 参数:oid 返回值类型:bigint
  • 参数说明 policy_name 审计策略名称,需要唯一,不可重复。 取值范围:字符串,要符合标识符的命名规范。 label_name 资源标签名称。 masking_clause 指出使用何种脱敏函数对被label_name标签标记的数据库资源进行脱敏,支持用schema.function的方式指定脱敏函数。 policy_filter 指出该脱敏策略对何种身份的用户生效,若为空表示对所有用户生效。 FILTER_TYPE 描述策略过滤的条件类型,包括IP | APP | ROLES。 filter_value 指具体过滤信息内容,例如具体的IP,具体的APP名称,具体的用户名。 ENABLE|DISABLE 可以打开或关闭脱敏策略。若不指定ENABLE|DISABLE,语句默认为ENABLE。
  • 示例 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 --创建dev_mask和bob_mask用户。gaussdb=# CREATE USER dev_mask PASSWORD 'xxxxxxxxxx';gaussdb=# CREATE USER bob_mask PASSWORD 'xxxxxxxxxx';--创建一个表tb_for_maskinggaussdb=# CREATE TABLE tb_for_masking(idx int, col1 text, col2 text, col3 text, col4 text, col5 text, col6 text, col7 text,col8 text);gaussdb=# INSERT INTO tb_for_masking VALUES(1, '9876543210', 'usr321usr', 'abc@huawei.com', 'abc@huawei.com', '1234-4567-7890-0123', 'abcdef 123456 ui 323 jsfd321 j3k2l3', '4880-9898-4545-2525', 'this is a llt case');gaussdb=# INSERT INTO tb_for_masking VALUES(2, '0123456789', 'lltc123llt', 'abc@gmail.com', 'abc@gmail.com', '9876-5432-1012-3456', '1234 abcd ef 56 gh78ijk90lm', '4856-7654-1234-9865','this,is.a!LLT?case');--创建资源标签标记敏感列gaussdb=# CREATE RESOURCE LABEL mask_lb1 ADD COLUMN(tb_for_masking.col1);gaussdb=# CREATE RESOURCE LABEL mask_lb2 ADD COLUMN(tb_for_masking.col2);gaussdb=# CREATE RESOURCE LABEL mask_lb3 ADD COLUMN(tb_for_masking.col3);gaussdb=# CREATE RESOURCE LABEL mask_lb4 ADD COLUMN(tb_for_masking.col4);gaussdb=# CREATE RESOURCE LABEL mask_lb5 ADD COLUMN(tb_for_masking.col5);gaussdb=# CREATE RESOURCE LABEL mask_lb6 ADD COLUMN(tb_for_masking.col6);gaussdb=# CREATE RESOURCE LABEL mask_lb7 ADD COLUMN(tb_for_masking.col7);gaussdb=# CREATE RESOURCE LABEL mask_lb8 ADD COLUMN(tb_for_masking.col8);--创建脱敏策略gaussdb=# CREATE MASKING POLICY maskpol1 maskall ON LABEL(mask_lb1);gaussdb=# CREATE MASKING POLICY maskpol2 alldigitsmasking ON LABEL(mask_lb2);gaussdb=# CREATE MASKING POLICY maskpol3 basicemailmasking ON LABEL(mask_lb3);gaussdb=# CREATE MASKING POLICY maskpol4 fullemailmasking ON LABEL(mask_lb4);gaussdb=# CREATE MASKING POLICY maskpol5 creditcardmasking ON LABEL(mask_lb5);gaussdb=# CREATE MASKING POLICY maskpol6 shufflemasking ON LABEL(mask_lb6);gaussdb=# CREATE MASKING POLICY maskpol7 regexpmasking('[\d+]','*',2, 9) ON LABEL(mask_lb7);--创建仅对用户dev_mask和bob_mask,客户端工具为gsql,IP地址为'10.20.30.40', '127.0.0.0/24'场景下生效的脱敏策略。gaussdb=# CREATE MASKING POLICY maskpol8 randommasking ON LABEL(mask_lb8) FILTER ON ROLES(dev_mask, bob_mask), APP(gsql), IP('10.20.30.40', '127.0.0.0/24');--查看脱敏策略生效gaussdb=# SELECT * FROM tb_for_masking; idx | col1 | col2 | col3 | col4 | col5 | col6 | col7 | col8-----+------------+------------+----------------+----------------+---------------------+-------------------------------------+---------------------+-------------------- 1 | xxxxxxxxxx | usr000usr | xxx@huawei.com | xxx@xxxxxx.com | xxxx-xxxx-xxxx-0123 | s 2iju1bcjk243df333d61l 22 53ef3a | 48**-****-*545-2525 | this is a llt case 2 | xxxxxxxxxx | lltc000llt | xxx@gmail.com | xxx@xxxxx.com | xxxx-xxxx-xxxx-3456 | j 71fem0l286dbia543 g k9 ch | 48**-****-*234-9865 | this,is.a!LLT?case(2 rows)--使用gsql工具,IP地址为'10.20.30.40',用户dev_mask查看tb_for_maskinggaussdb=# GRANT ALL PRIVILEGES TO dev_mask;gaussdb=# GRANT ALL PRIVILEGES TO bob_mask;gaussdb=# SET role dev_mask PASSWORD 'xxxxxxxxxx';--使用maskpol8脱敏,结果随机,每次不同gaussdb=# SELECT col8 FROM tb_for_masking; col8-------------------- 9f1425b3835cc30d99 9585b4ea8ea8ddcc5b(2 rows)gaussdb=# SET role bob_mask PASSWORD 'xxxxxxxxxx';gaussdb=# SELECT col8 FROM tb_for_masking; col8-------------------- f29ef3a0769a1f417c 806aa46409482d838f(2 rows)
  • 语法格式 1 CREATE MASKING POLICY policy_name masking_clause[, ...]* policy_filter [ENABLE | DISABLE]; masking_clause: 1 masking_function ON LABEL(label_name[, ...]*) masking_function: maskall不是预置函数,硬编码在代码中,不支持\df展示。 预置八种脱敏方式或者用户自定义的函数。 maskall | randommasking | creditcardmasking | basicemailmasking | fullemailmasking | shufflemasking | alldigitsmasking | regexpmasking
  • 示例 --创建一个普通表gaussdb=# CREATE TABLE my_table (c1 int, c2 int);--创建全量物化视图gaussdb=# CREATE MATERIALIZED VIEW my_mv AS SELECT * FROM my_table;--基表写入数据gaussdb=# INSERT INTO my_table VALUES(1,1),(2,2);--对全量物化视图my_mv进行全量刷新gaussdb=# REFRESH MATERIALIZED VIEW my_mv;
  • 参数说明 mv_name 要创建的物化视图的名称(可以被模式限定)。 取值范围:字符串,要符合标识符的命名规范。 column_name 新物化视图中的一个列名。物化视图支持指定列,指定列需要和后面的查询语句结果的列数量保持一致;如果没有提供列名,会从查询的输出列名中获取列名。 取值范围:字符串,要符合标识符的命名规范。 WITH ( storage_parameter [= value] [, ... ] ) 这个子句为表或索引指定一个可选的存储参数。详见CREATE TABLE。 TABLESPACE tablespace_name 指定新建物化视图所属表空间。如果没有声明,将使用默认表空间。 AS query 一个SELECT、TABLE 或者VALUES命令。这个查询将在一个安全受限的操作中运行。
  • 语法格式 CREATE GLOBAL [ UNIQUE ] INDEX [ [schema_name.]index_name ] ON table_name [ USING method ] ({ column_name [ COLLATE collation ] [ opclass ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] }[, ...] ) [CONTAINING (containing_colname)] [DISTRIBUTE BY hash(dist_colnames)] [ TABLESPACE tablespace_name ];
  • 参数说明 UNIQUE 创建唯一性索引,每次添加数据时检测表中是否有重复值。如果插入或更新的值会引起重复的记录时,将报错。 schema_name 模式的名称。 取值范围:已存在模式名。 index_name 要创建的索引名,不能包含模式名,索引的模式与表相同。 取值范围:字符串,要符合标识符的命名规范。 table_name 需要为其创建索引的表的名称,可以用模式修饰。 取值范围:已存在的表名。 USING method 指定创建索引的方法。 取值范围:ubtree,提供多版本B-tree索引,索引页面上包含事务信息。 column_name 表中需要创建索引的列的名称(字段名)。 如果索引方式支持多字段索引,可以声明多个字段,对于非分区基表最多可以声明28个字段,对于分区基表最多可以声明27个字段。 COLLATE collation COLLATE子句指定列的排序规则(该列必须是可排列的数据类型)。如果没有指定,则使用默认的排序规则。排序规则可以使用“select * from pg_collation”命令从pg_collation系统表中查询,默认的排序规则为查询结果中以default开始的行。 opclass 操作符类的名称。对于索引的每一列可以指定一个操作符类,操作符类标识了索引那一列的使用的操作符。 ASC 指定按升序排序 (默认)。 DESC 指定按降序排序。 NULLS FIRST 指定空值在排序中排在非空值之前,当指定DESC排序时,本选项为默认的。 NULLS LAST 指定空值在排序中排在非空值之后,未指定DESC排序时,本选项为默认的。 CONTAINING 全局二级索引可以包含索引键以外的基表属性。 containing_colname 全局二级索引包含的索引键以外的基表属性。 DISTRIBUTE BY 指定全局二级索引分布键,其分布键需要与基表不同,且只能使用哈希分布方式。 dist_colnames 全局二级索引分布键。 需要被包含在column_name 中。 TABLESPACE tablespace_name 指定索引的表空间,如果没有声明则使用默认的表空间。 取值范围:已存在的表空间名。
  • 示例 1 2 3 4 5 6 7 8 91011121314151617 --创建包含3列的基表testgaussdb=# CREATE TABLE test(c1 int, c2 int, c3 int); -- 在test表的c2列上创建GSI,并包含c3列,基于c2列哈希分布gaussdb=# CREATE GLOBAL INDEX idx_gsi_1 ON test(c2) CONTAINING(c3) DISTRIBUTE BY HASH(c2);-- 创建包含3列的基表test2gaussdb=# CREATE TABLE test2(c1 int, c2 int, c3 int);-- 在test2表的c2列上创建GSI,并包含c3列,默认基于c2列哈希分布gaussdb=# CREATE GLOBAL INDEX idx_gsi_2 ON test2(c2) CONTAINING(c3) ;-- 创建包含3列的基表test3gaussdb=# CREATE TABLE test3(c1 int, c2 int, c3 int);-- 在test3表的c2列上创建UNIQUE形式的GSI,默认基于c2列哈希分布gaussdb=# CREATE GLOBAL UNIQUE INDEX idx_gsi_3 ON test3(c2) DISTRIBUTE BY HASH(c2);
  • 功能描述 在指定的表上创建全局二级索引(Global Secondary Index,简称GSI)。 全局二级索引允许用户定义与基表分布不一致的索引,从而实现基表非分布列查询的单节点计划和基表非分布列上的unique/主键约束。 建议在至少一列GSI的索引键上创建NOT NULL约束,以提速IUD的性能。 建议在GSI的基表创建普通索引提升IUD执行效率。 当前创建GSI生成的执行计划是先将基表数据拉回CN再下发给GSI所在DN,因此大数据量、大规模集群下性能较普通索引存在较大劣化(比如6节点SSD盘千万数据量下可能需近1小时),将在后续版本中优化创建GSI的实现机制,将目前的单点改为DN间并行提升创建效率。
  • 注意事项 只支持GTM-LITE模式下创建GSI,不支持其他GTM模式,在其他模式下创建GSI会报错。 支持创建普通UBTree索引,不支持局部索引、表达式索引;Astore不支持创建GSI以外的UBTree,不支持对GSI创建分区。 不支持创建与基表分布一致的GSI,执行时会报错。 不支持create GSI concurrently,会报语法错误;不支持parallel,数据节点侧会将parallel_workers设为0。 支持对基表为hash分布的行存Astore表、分区表创建hash分布的GSI,不支持基表为replicate、bucket、段页式、list/range分布、Ustore、列存等,对于GSI本身不支持hash分布以外的分布。 不支持对基表列名或者ctid、xc_node_hash、xmin、xmax、tableoid(当基表为分区表时)增加_new$$、_NEW$$后与自身列名重复的基表创建GSI。 如果在执行VACUUM FULL或者REINDEX DATABASE后,查询语句走GSI会报错,需要再执行一次查询或者执行REINDEX INDEX重建索引。
  • 语法格式 12 CREATE GROUP group_name [ [ WITH ] option [ ... ] ] [ ENCRYPTED | UNENCRYPTED ] { PASSWORD | IDENTIFIED BY } { 'password' [ EXPIRED ] | DISABLE }; 其中可选项action子句语法为: 1 2 3 4 5 6 7 8 91011121314151617181920212223242526272829303132 where option can be:{SYSADMIN | NOSYSADMIN} | {MONADMIN | NOMONADMIN} | {OPRADMIN | NOOPRADMIN} | {POLADMIN | NOPOLADMIN} | {AUDITADMIN | NOAUDITADMIN} | {CREATEDB | NOCREATEDB} | {USEFT | NOUSEFT} | {CREATEROLE | NOCREATEROLE} | {INHERIT | NOINHERIT} | {LOGIN | NOLOGIN} | {REPLICATION | NOREPLICATION} | {INDEPENDENT | NOINDEPENDENT} | {VCADMIN | NOVCADMIN} | {PERSISTENCE | NOPERSISTENCE} | CONNECTION LIMIT connlimit | VALID BEGIN 'timestamp' | VALID UNTIL 'timestamp' | RESOURCE POOL 'respool' | USER GROUP 'groupuser' | PERM SPACE 'spacelimit' | NODE GROUP logic_group_name | IN ROLE role_name [, ...] | IN GROUP role_name [, ...] | ROLE role_name [, ...] | ADMIN role_name [, ...] | USER role_name [, ...] | SYSID uid | DEFAULT TABLESPACE tablespace_name | PROFILE DEFAULT | PROFILE profile_name | PGUSER
  • 功能描述 CREATE INCREMENTAL MATERIALIZED VIEW会创建一个增量物化视图,并且后续可以使用REFRESH MATERIALIZED VIEW(全量刷新)和REFRESH INCREMENTAL MATERIALIZED VIEW(增量刷新)刷新物化视图的数据。 CREATE INCREMENTAL MATERIALIZED VIEW类似于CREATE TABLE AS,不过它会记住被用来初始化该视图的查询, 因此它可以在后续中进行数据刷新。一个物化视图有很多和表相同的属性,但是不支持临时物化视图。
  • 参数说明 mv_name 要创建的物化视图的名称(可以被模式限定)。 取值范围:字符串,要符合标识符的命名规范。 column_name 新物化视图中的一个列名。物化视图支持指定列,指定列需要和后面的查询语句结果的列数量保持一致;如果没有提供列名,会从查询的输出列名中获取列名。 取值范围:字符串,要符合标识符的命名规范。 TABLESPACE tablespace_name 指定新建物化视图所属表空间。如果没有声明,将使用默认表空间。 AS query 一个SELECT或者TABLE 命令。这个查询将在一个安全受限的操作中运行。
  • 示例 --创建一个普通表gaussdb=# CREATE TABLE my_table (c1 int, c2 int);--创建增量物化视图gaussdb=# CREATE INCREMENTAL MATERIALIZED VIEW my_imv AS SELECT * FROM my_table;--基表写入数据gaussdb=# INSERT INTO my_table VALUES(1,1),(2,2);--对增量物化视图my_imv进行增量刷新gaussdb=# REFRESH INCREMENTAL MATERIALIZED VIEW my_imv;
  • 示例 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233343536 --将tpcds.ship_mode中的数据拷贝到/home/omm/ds_ship_mode.dat文件中。gaussdb=# COPY tpcds.ship_mode TO '/home/omm/ds_ship_mode.dat';--将tpcds.ship_mode 输出到stdout。gaussdb=# COPY tpcds.ship_mode TO stdout;--创建tpcds.ship_mode_t1表。gaussdb=# CREATE TABLE tpcds.ship_mode_t1( SM_SHIP_MODE_SK INTEGER NOT NULL, SM_SHIP_MODE_ID CHAR(16) NOT NULL, SM_TYPE CHAR(30) , SM_CODE CHAR(10) , SM_CARRIER CHAR(20) , SM_CONTRACT CHAR(20))WITH (ORIENTATION = COLUMN,COMPRESSION=MIDDLE)DISTRIBUTE BY HASH(SM_SHIP_MODE_SK );--从stdin拷贝数据到表tpcds.ship_mode_t1。gaussdb=# COPY tpcds.ship_mode_t1 FROM stdin;--从/home/omm/ds_ship_mode.dat文件拷贝数据到表tpcds.ship_mode_t1。gaussdb=# COPY tpcds.ship_mode_t1 FROM '/home/omm/ds_ship_mode.dat';--从/home/omm/ds_ship_mode.dat文件拷贝数据到表tpcds.ship_mode_t1,应用TRANSFORM表达式转换,取SM_TYPE列左边10个字符插入到表中。gaussdb=# COPY tpcds.ship_mode_t1 FROM '/home/omm/ds_ship_mode.dat' TRANSFORM (SM_TYPE AS LEFT(SM_TYPE, 10));--从/home/omm/ds_ship_mode.dat文件拷贝数据到表tpcds.ship_mode_t1,使用参数如下:导入格式为TEXT(format 'text'),分隔符为'\t'(delimiter E'\t'),忽略多余列(ignore_extra_data 'true'),不指定转义(noescaping 'true')。gaussdb=# COPY tpcds.ship_mode_t1 FROM '/home/omm/ds_ship_mode.dat' WITH(format 'text', delimiter E'\t', ignore_extra_data 'true', noescaping 'true');--从/home/omm/ds_ship_mode.dat文件拷贝数据到表tpcds.ship_mode_t1,使用参数如下:导入格式为FIXED(FIXED),指定定长格式(FORMATTER(SM_SHIP_MODE_SK(0, 2), SM_SHIP_MODE_ID(2,16), SM_TYPE(18,30), SM_CODE(50,10), SM_CARRIER(61,20), SM_CONTRACT(82,20))),忽略多余列(ignore_extra_data),有数据头(header)。gaussdb=# COPY tpcds.ship_mode_t1 FROM '/home/omm/ds_ship_mode.dat' FIXED FORMATTER(SM_SHIP_MODE_SK(0, 2), SM_SHIP_MODE_ID(2,16), SM_TYPE(18,30), SM_CODE(50,10), SM_CARRIER(61,20), SM_CONTRACT(82,20)) header ignore_extra_data;--删除tpcds.ship_mode_t1。gaussdb=# DROP TABLE tpcds.ship_mode_t1;
  • 语法格式 从一个文件拷贝数据到一个表。 1 2 3 4 5 6 7 8 910 COPY table_name [ ( column_name [, ...] ) ] FROM { 'filename' | STDIN } [ [ USING ] DELIMITERS 'delimiters' ] [ WITHOUT ESCAPING ] [ LOG ERRORS ] [ REJECT LIMIT 'limit' ] [ [ WITH ] ( option [, ...] ) ] | copy_option | TRANSFORM ( { column_name [ data_type ] [ AS transform_expr ] } [, ...] ) | FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) [ ( option [, ...] ) | copy_option [ ...] ] ]; 上述语法中fixed formatter与copy_option语法兼容、与option语法不兼容;copy_option与option语法不兼容;transfrom与copy_option、fixed formatter语法兼容。 把一个表的数据拷贝到一个文件。 1 2 3 4 5 6 7 8 91011121314 COPY table_name [ ( column_name [, ...] ) ] TO { 'filename' | STDOUT } [ [ USING ] DELIMITERS 'delimiters' ] [ WITHOUT ESCAPING ] [ [ WITH ] ( option [, ...] ) ] | copy_option | FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) [ ( option [, ...] ) | copy_option [ ...] ] ];COPY query TO { 'filename' | STDOUT } [ WITHOUT ESCAPING ] [ [ WITH ] ( option [, ...] ) ] | copy_option | FIXED FORMATTER ( { column_name( offset, length ) } [, ...] ) [ ( option [, ...] ) | copy_option [ ...] ] ]; COPY TO语法形式约束如下: (query)与[USING] DELIMITERS不兼容,即若COPY TO的数据来自于一个query的查询结果,那么COPY TO语法不能再指定[USING] DELIMITERS语法子句。 对于FIXED FORMATTTER语法后面跟随的copy_option是以空格进行分隔的。 copy_option是指COPY原生的参数形式,而option是兼容外表导入的参数形式。 其中可选参数option子句语法为: 1 2 3 4 5 6 7 8 91011121314151617181920212223 FORMAT 'format_name'| FORMAT binary| OIDS [ boolean ]| DELIMITER 'delimiter_character'| NULL 'null_string'| HEADER [ boolean ]| USEEOF [ boolean ]| FILEHEADER 'header_file_string'| FREEZE [ boolean ]| QUOTE 'quote_character'| ESCAPE 'escape_character'| EOL 'newline_character'| NOESCAPING [ boolean ]| FORCE_QUOTE { ( column_name [, ...] ) | * }| FORCE_NOT_NULL ( column_name [, ...] )| ENCODING 'encoding_name'| IGNORE_EXTRA_DATA [ boolean ]| FILL_MISSING_FIELDS [ boolean ]| COMPATIBLE_ILLEGAL_CHARS [ boolean ]| DATE_FORMAT 'date_format_string'| TIME_FORMAT 'time_format_string'| TIMESTAMP_FORMAT 'timestamp_format_string'| SMALLDATETIME_FORMAT 'smalldatetime_format_string' 其中可选参数copy_option子句语法为: 1 2 3 4 5 6 7 8 9101112131415161718192021 OIDS | NULL 'null_string' | HEADER | USEEOF| FILEHEADER 'header_file_string' | FREEZE | FORCE_NOT_NULL column_name [, ...]| FORCE_QUOTE { column_name [, ...] | * }| BINARY | CSV | QUOTE [ AS ] 'quote_character' | ESCAPE [ AS ] 'escape_character' | EOL 'newline_character'| ENCODING 'encoding_name' | IGNORE_EXTRA_DATA | FILL_MISSING_FIELDS| COMPATIBLE_ILLEGAL_CHARS | DATE_FORMAT 'date_format_string' | TIME_FORMAT 'time_format_string' | TIMESTAMP_FORMAT 'timestamp_format_string' | SMALLDATETIME_FORMAT 'smalldatetime_format_string'
  • 注意事项 当参数enable_copy_server_files关闭时,只允许初始用户执行COPY FROM FILENAME或COPY TO FILENAME命令,当参数enable_copy_server_files打开时,允许具有SYSADMIN权限的用户或继承了内置角色gs_role_copy_files权限的用户执行,但默认禁止对数据库配置文件,密钥文件,证书文件和审计日志执行COPY FROM FILENAME或COPY TO FILENAME,以防止用户越权查看或修改敏感文件。同时enable_copy_server_files打开时,管理员可以通过guc参数safe_data_path设置普通用户可以导入导出的路径必须为设置路径的子路径,未设置此guc参数时候(默认情况),不对普通用户使用的路径进行拦截。该参数会对copy使用路径中的...进行报错处理。 COPY只能用于表,不能用于视图。 copy to需要读取的表的select权限,copy from需要插入的表的insert权限。 如果声明了一个字段列表,COPY将只在文件和表之间拷贝已声明字段的数据。如果表中有任何不在字段列表里的字段,COPY FROM将为那些字段插入缺省值。 如果声明了数据源文件,服务器必须可以访问该文件;如果指定了STDIN,数据将在客户前端和服务器之间流动,输入时,表的列与列之间使用TAB键分隔,在新的一行中以反斜杠和句点(\.)表示输入结束。 如果数据文件的任意行包含比预期多或者少的字段,COPY FROM将抛出一个错误。 数据的结束可以用一个只包含反斜杠和句点(\.)的行表示。如果从文件中读取数据,数据结束的标记是不必要的;如果在客户端应用之间拷贝数据,必须要有结束标记。 COPY FROM中\N为空字符串,如果要输入实际数据值\N ,使用\\N。
  • 语法格式 1 2 3 4 5 6 7 8 910 CREATE DATABASE database_name [ [ WITH ] { [ OWNER [=] user_name ] | [ TEMPLATE [=] template ] | [ ENCODING [=] encoding ] | [ LC_COLLATE [=] lc_collate ] | [ LC_CTYPE [=] lc_ctype ] | [ DBCOMPATIBILITY [=] compatibilty_type ] | [ TABLESPACE [=] tablespace_name ] | [ CONNECTION LIMIT [=] connlimit ] | [ DBTIMEZONE [=] time_zone ]}[...] ];
  • 示例 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031323334353637383940 --创建jim和tom用户。gaussdb=# CREATE USER jim PASSWORD 'xxxxxxxxxx';gaussdb=# CREATE USER tom PASSWORD 'xxxxxxxxxx';--创建一个GBK编码的数据库music(本地环境的编码格式必须也为GBK)。gaussdb=# CREATE DATABASE music ENCODING 'GBK' template = template0;--创建数据库music2,并指定所有者为jim。gaussdb=# CREATE DATABASE music2 OWNER jim;--用模板template0创建数据库music3,并指定所有者为jim。gaussdb=# CREATE DATABASE music3 OWNER jim TEMPLATE template0;--设置music数据库的连接数为10。gaussdb=# ALTER DATABASE music CONNECTION LIMIT= 10;--将music名称改为music4。gaussdb=# ALTER DATABASE music RENAME TO music4;--将数据库music2的所属者改为tom。gaussdb=# ALTER DATABASE music2 OWNER TO tom;--删除数据库。gaussdb=# DROP DATABASE music2;gaussdb=# DROP DATABASE music3;gaussdb=# DROP DATABASE music4;--删除jim和tom用户。gaussdb=# DROP USER jim;gaussdb=# DROP USER tom;--创建兼容TD格式的数据库。gaussdb=# CREATE DATABASE td_compatible_db DBCOMPATIBILITY 'TD';--创建兼容ORA格式的数据库。gaussdb=# CREATE DATABASE ora_compatible_db DBCOMPATIBILITY 'ORA';--删除兼容TD、ORA格式的数据库。gaussdb=# DROP DATABASE td_compatible_db;gaussdb=# DROP DATABASE ora_compatible_db;
  • 注意事项 Data Source名称在数据库中需唯一,遵循标识符命名规范,长度限制为63字节,过长则会被截断。 只有系统管理员或初始用户才有权限创建Data Source对象。且创建该对象的用户为其默认属主。 当在OPTIONS中出现password选项时,需要保证集群每个节点的$GAUSSHOME/bin目录下存在datasource.key.cipher和datasource.key.rand文件,如果不存在这两个文件,请使用gs_guc工具生成并使用gs_ssh工具发布到集群每个节点的$GAUSSHOME/bin目录下。
  • 示例 1 2 3 4 5 6 7 8 91011121314151617 --创建一个空的Data Source对象,不含任何信息。gaussdb=# CREATE DATA SOURCE ds_test1;--创建一个Data Source对象,含TYPE信息,VERSION为NULL。gaussdb=# CREATE DATA SOURCE ds_test2 TYPE 'MPPDB' VERSION NULL;--创建一个Data Source对象,仅含OPTIONS。gaussdb=# CREATE DATA SOURCE ds_test3 OPTIONS (dsn 'GaussDB', encoding 'utf8');--创建一个Data Source对象,含TYPE, VERSION, OPTIONS。gaussdb=# CREATE DATA SOURCE ds_test4 TYPE 'unknown' VERSION '11.2.3' OPTIONS (dsn 'GaussDB', username 'userid', password 'pwd@123456', encoding '');--删除Data Source对象。gaussdb=# DROP DATA SOURCE ds_test1;gaussdb=# DROP DATA SOURCE ds_test2;gaussdb=# DROP DATA SOURCE ds_test3;gaussdb=# DROP DATA SOURCE ds_test4;
  • 参数说明 src_name 新建Data Source对象的名称,需在数据库内部唯一。 取值范围:字符串,要符标识符的命名规范。 TYPE 新建Data Source对象的类型,可缺省。 取值范围:空串或非空字符串。 VERSION 新建Data Source对象的版本号,可缺省或NULL值。 取值范围:空串或非空字符串或NULL。 OPTIONS Data Source对象的选项字段,创建时可省略,如若指定,其关键字如下: optname 选项名称。 取值范围:dsn, username, password, encoding。不区分大小写。 dsn对应odbc配置文件中的DSN。 username/password对应连接目标库的用户名和密码。 GaussDB在后台会对用户输入的username/password加密以保证安全性。该加密所需密钥文件需要使用gs_guc工具生成并使用gs_ssh工具发布到集群每个节点的$GAUSSHOME/bin目录下。username/password不应当包含‘encryptOpt’前缀,否则会被认为是加密后的密文。 encoding表示与目标库交互的字符串编码方式(含发送的SQL语句和返回的字符类型数据),此处创建对象时不检查encoding取值的合法性,能否正确编解码取决于用户提供的编码方式是否在数据库本身支持的字符编码范围内。 optvalue 选项值。 取值范围:空或者非空字符串。
  • 注意事项 当enable_access_server_directory=off时,只允许初始用户创建directory对象;当enable_access_server_directory=on时,具有SYSADMIN权限的用户和继承了内置角色gs_role_directory_create权限的用户可以创建directory对象。 创建用户默认拥有此路径的READ和WRITE操作权限。 目录的默认owner为创建directory的用户。 以下路径禁止创建: 路径含特殊字符。 路径是相对路径。 创建目录时会进行以下合法性校验: 创建时会检查添加路径是否为操作系统实际存在路径,如不存在会提示用户使用风险。 创建时会校验数据库初始化(omm)用户对于添加路径的权限(即操作系统目录权限,读/写/执行 - R/W/X),如果权限不全,会提示用户使用风险。 在集群环境下用户指定的路径需要用户保证各节点上路径的一致性,否则在不同节点上执行会产生找不到路径的问题。
  • 注意事项 参数DEFAULT将在客户端和服务器之间默认执行源编码到目标编码之间的转换。要支持这个用法,需要定义双向转换,即从A到B和从B到A之间的转换。 创建转换需拥有函数的EXECUTE权限及目标模式的CREATE权限。 源编码和目标编码都不可以使用SQL_ASCII,因为在涉及SQL_ASCII “encoding”的情况下,服务器的行为是硬连接的。 使用DROP CONVERSION可以移除用户定义的转换。
  • 参数说明 DEFAULT DEFAULT子句表示这个转换是从源编码到目标编码的默认转换。在一个模式中对于每一个编码对,只应该有一个默认转换。 name 转换的名称,可以被模式限定。如果没有被模式限定,该转换被定义在当前模式中。在一个模式中,转换名称必须唯一。 source_encoding 源编码名称。 dest_encoding 目标编码名称。 function_name 被用来执行转换的函数。函数名可以被模式限定。如果没有,将在路径中查找该函数。 conv_proc( integer, -- 原编码ID integer, -- 目标编码ID cstring, -- 源字符串(空值终止的C字符串) internal,-- 目标(用一个空值终止的C字符串填充) integer -- 源字符串长度) RETURNS void;
  • 参数说明 client_master_key_name 该参数作为密钥对象名,在同一命名空间下,需满足命名唯一性约束。 取值范围:字符串,需符合标识符的命名规范。 KEY_STORE 外部密钥管理者。取值见表1。 KEY_PATH 由外部密钥管理者管理某个的密钥,不同密钥管理者格式不同。取值为字符串,详见表1。字符串由单引号或双引号包含,如果字符串长度超过64,则只能使用单引号包含。 ALGORITHM 密钥用于何种加密算法。取值见表1。 表1 针对不同密钥管理者的参数值 KEY_STORE KEY_PATH ALGORITHM huawei_kms 格式:‘{KmsApiUrl}/{密钥ID}' 参考:'https://kms.{项目}.myhuaweicloud.com/v1.0/{项目ID}/kms/{密钥ID}' 示例:'https://kms.cn-north-4.myhuaweicloud.com/v1.0/00000000000000000000000000000000/kms/00000000-0000-0000-0000-000000000000' AES_256 his_kms 格式:'{KmsApiUrl}/{密钥ID}' 参考:'https://kms.his-op.huawei.com/kmsservice/v2.0/projects/{{企业应用ID}}/{密钥ID}' 示例:'https://kms.his-op.huawei.com/kmsservice/v2.0/projects/com.huawei.example/000000-00000-0000000-0000-000000' AES_256 gs_ktool 格式:"gs_ktool/{密钥ID}" 示例:"gs_ktool/1" AES_256_CBC AES_256_GCM SM4
  • 示例(在使用gsql连接数据库服务器的场景下) # 1 解压GaussDB-Kernel_数据库版本号_操作系统版本号_64bit_Gsql.tar.gz安装包,找到脚本gsql_env.sh# 2 通过脚本,自动配置环境变量GS_KTOOL_FILE_PATHsource gsql_env.sh# 3 创建密钥,返回密钥ID,密钥ID为1gs_ktool -g# 4 连接数据库,使用特权账号,创建新用户 alicegsql -p 端口号 -d postgres -rgaussdb=# CREATE USER alice PASSWORD '*******';gaussdb=# \q# 5 连接数据库,务必使用 -C 参数gsql -p 端口号 -d postgres -U alice -r -Cgaussdb=# -- 6 创建主密钥gaussdb=# CREATE CLIENT MASTER KEY alice_cmk WITH ( KEY_STORE = gs_ktool , KEY_PATH = "gs_ktool/1" , ALGORITHM = AES_256_CBC);
  • 注意事项 本语法属于全密态数据库特有语法。 连接数据库时,在数据库驱动侧,需开启密态等值查询特性连接参数,才可执行本语法。 主密钥由外部密钥管理者提供,本语法仅处理密钥来源、密钥ID等信息,已支持的外部密钥管理者包括: 华为云密钥管理服务huawei_kms 华为IT服务密钥管理服务his_kms 本地密钥管理工具gs_ktool。 在使用本语法前,请参考《特性指南》中“设置密态等值查询”章节,在数据库驱动侧,为外部密钥管理者设置环境变量。
  • 参数说明 agg_name 聚集函数的名称 agg_type 聚集函数参数的类型 source_type 类型转换的源数据类型。 target_type 类型转换的目标数据类型。 object_name 对象名。 table_name.column_name view_name.column_name 定义/修改注释的列名称。前缀可加表名称或者视图名称。 constraint_name 定义/修改注释的表约束的名称。 table_name 表的名称。 function_name 定义/修改注释的函数名称。 argmode,argname,argtype 函数参数的模式、名称、类型。 large_object_oid 定义/修改注释的大对象的OID值。 operator_name 操作符名称。 left_type,right_type 操作参数的数据类型(可以用模式修饰)。当前置或者后置操作符不存在时,可以增加NONE选项。 text 注释。
共100000条