华为云用户手册

  • GS_MY_ILMRESULTS GS_MY_ILMRESULTS视图反映ADO JOB的执行详情信息,包含Task ID,JOB名称、JOB状态、JOB时间信息等。 表1 GS_MY_ILMRESULTS字段 名称 类型 描述 task_id bigint ADO Task的ID。 job_name character varying(128) ADO Job的任务名称。 job_state character varying(35) ADO Job的状态。 start_time timestamp with time zone JOB开始被调度的时间。 completion_time timestamp with time zone 完成时间。 comments character varying(4000) JOB失败后此处记录失败原因。 statistics clob 统计信息。 父主题: OLTP表压缩
  • STATIO_SYS_TABLES STATIO_SYS_TABLES视图显示当前节点的命名空间中所有系统表的I/O状态信息,如表1所示。 表1 STATIO_SYS_TABLES字段 名称 类型 描述 relid oid 表OID。 schemaname name 该表模式名。 relname name 表名。 heap_blks_read bigint 从该表中读取的磁盘块数。 heap_blks_hit bigint 该表缓存命中数。 idx_blks_read bigint 从表中所有索引读取的磁盘块数。 idx_blks_hit bigint 表中所有索引命中缓存数。 toast_blks_read bigint 该表的TOAST表读取的磁盘块数(如果存在)。 toast_blks_hit bigint 该表的TOAST表命中缓冲区数(如果存在)。 tidx_blks_read bigint 该表的TOAST表索引读取的磁盘块数(如果存在)。 tidx_blks_hit bigint 该表的TOAST表索引命中缓冲区数(如果存在)。 last_updated timestamp with time zone 视图中该对象监控数据最后一次更新的时间。 父主题: Cache/IO
  • 注意事项 不允许对一个已关闭的游标再做任何操作。 一个不再使用的游标应该尽早关闭。 当创建游标的事务用COMMIT或ROLLBACK终止之后,每个不可保持的已打开游标都隐含关闭。 当创建游标的事务通过ROLLBACK退出之后,每个可以保持的游标都将隐含关闭。 当创建游标的事务成功提交,可保持的游标将保持打开,直到执行一个明确的CLOSE或者客户端断开。 GaussDB 没有明确打开游标的OPEN语句,因为一个游标在使用CURSOR命令定义的时候就打开了。可以通过查询系统视图pg_cursors看到所有可用的游标。
  • GS_AUDITING_POLICY GS_AUDITING_POLICY系统表记录统一审计的主体信息,每条记录对应一个设计策略。需要有系统管理员或安全策略管理员权限才可以访问此系统表。 表1 GS_AUDITING_POLICY字段 名称 类型 描述 oid oid 行标识符(隐含属性,必须明确选择)。 polname name 策略名称,需要唯一,不可重复。 polcomments name 策略描述字段,记录策略相关的描述信息,通过COMMENTS关键字体现。 modifydate timestamp without time zone 策略创建或修改的最新时间戳。 polenabled boolean 用来表示策略启动开关。 t(true):表示策略启动。 f(false):表示策略没有启动。 父主题: 审计
  • PG_REPLICATION_ORIGIN PG_REPLICATION_ORIGIN系统表包含所有已创建的复制源,该表在数据库实例的所有数据库之间共享,即每个实例只有一份,而不是每个数据库一份。 表1 PG_REPLICATION_ORIGIN字段 名称 类型 描述 roident oid 一个数据库实例范围内唯一的复制源标识符。 roname text 外部的由用户定义的复制源名称。 父主题: 其他系统表
  • PGobject 表1 PGobject常用方法 方法名 返回值类型 描述 throws 支持JDBC4 支持计划外ALT getStruct() Object[] 获取复合类型子类型名,按创建顺序排序。 - Yes Yes getValue() String 获取复合类型字符串形式值。 - Yes Yes getArrayValue() String[] 获取复合类型数组形式值,以复合数据类型字段顺序排序。 - Yes Yes getAttributes() Object[] 获取复合类型对象数组形式值(如果组成字段类型为Table类型和Array类型则返回为PgArray,如果组成字段为复合类型则返回PGobject,其他类型返回字符串值)。 SQLException Yes Yes 父主题: JDBC接口参考
  • 注意事项 数据库节点对于执行错误的SQL无法进行计划信息的收集。 PLAN_TABLE中的数据是session级生命周期并且session隔离和用户隔离,用户只能看到当前session、当前用户的数据。 EXPLAIN中的PLAN选项表示需要将计划信息存储于PLAN_TABLE中,存储成功将返回“EXPLAIN SUC CES S”。 STATEMENT_ID用户可以对查询设置标签,输入的标签信息也将存储于PLAN_TABLE中。 执行EXPLAIN PLAN 后会将计划信息自动存储于PLAN_TABLE中,不支持对PLAN_TABLE进行INSERT、UPDATE、ANALYZE等操作。PLAN_TABLE详细介绍见PLAN_TABLE。
  • 示例 byteawithoutorderwithequalcolin、byteawithoutorderwithequalcolout等密态等值函数为数据库内核中数据类型byteawithoutorderwithequalcol指定的in、out、send、recv等读写格式转换函数,具体可参考bytea类型的byteain、byteaout等函数,但会对本地的cek进行验证,需要密文字段中有本地存在的cekoid才能执行成功。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 -- 例如存在加密表int_type,int_col2为其加密列。 -- 使用非密态客户端连接数据库,查询加密列密文。 gaussdb=# SELECT int_col2 FROM int_type; int_col2 ------------------------------------------------------------------------------------------------------------------------------------------------------ \x01c35301bf421c8edf38c34704bcc82838742917778ccb402a1b7452ad4a6ac7371acc0ac33100000035fe3424919854c86194f1aa5bb4e1ca656e8fc6d05324a1419b69f488bdc3c6 (1 row) -- 将加密列密文当做byteawithoutorderwithequalcolin入参,格式从cstring输入转码转化成内部byteawithoutorderwithequalcol形式。 gaussdb=# SELECT byteawithoutorderwithequalcolin('\x01c35301bf421c8edf38c34704bcc82838742917778ccb402a1b7452ad4a6ac7371acc0ac33100000035fe3424919854c86194f1aa5bb4e1ca656e8fc6d05324a1419b69f488bdc3c6'); byteawithoutorderwithequalcolin ------------------------------------------------------------------------------------------------------------------------------------------------------ \x01c35301bf421c8edf38c34704bcc82838742917778ccb402a1b7452ad4a6ac7371acc0ac33100000035fe3424919854c86194f1aa5bb4e1ca656e8fc6d05324a1419b69f488bdc3c6 (1 row) 由于byteawithoutorderwithequalcolin等的实现会对cek进行查找,并且判断是否为正常加密后的数据类型。 因此如果输入数据的格式不是加密后的数据格式,并且在本地不存在对应cek的情况下,会返回错误。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 gaussdb=# SELECT * FROM byteawithoutorderwithequalcolsend('\x907219912381298461289346129'::byteawithoutorderwithequalcol); ERROR: cek with OID 596711794 not found LINE 1: SELECT * FROM byteawithoutorderwithequalcolsend('\x907219912... ^ gaussdb=# SELECT * FROM byteawithoutordercolout('\x90721901999999999999912381298461289346129'); ERROR: cek with OID 2566986098 not found LINE 1: SELECT * FROM byteawithoutordercolout('\x9072190199999999999... gaussdb=# SELECT * FROM byteawithoutorderwithequalcolrecv('\x90721901999999999999912381298461289346129'::byteawithoutorderwithequalcol); ERROR: cek with OID 2566986098 not found ^ gaussdb=# SELECT * FROM byteawithoutorderwithequalcolsend('\x90721901999999999999912381298461289346129'::byteawithoutorderwithequalcol); ERROR: cek with OID 2566986098 not found LINE 1: SELECT * FROM byteawithoutorderwithequalcolsend('\x907219019... ^
  • GLOBAL_REPLICATION_SLOTS GLOBAL_REPLICATION_SLOTS视图用于查看数据库各节点的复制槽的信息,如表1所示。 表1 GLOBAL_REPLICATION_SLOTS字段 名称 类型 描述 node_name name 节点名称。 slot_name text 复制槽的名称。 plugin text 逻辑复制槽对应的输出插件名称。 slot_type text 复制槽的类型。 physical:物理复制槽。 logical:逻辑复制槽。 datoid oid 复制槽所在的数据库OID。 database name 复制槽所在的数据库名称。 active boolean 复制槽是否为激活状态。 t(true):表示是。 f(false):表示不是。 x_min xid 数据库需要为复制槽保留的最早事务的事务号。 catalog_xmin xid 数据库需要为逻辑复制槽保留的最早的涉及系统表的事务的事务号。 restart_lsn text 复制槽需要的最早xlog的物理位置。 dummy_standby boolean 预留参数。 复制槽的连接对端是否为从备。 t(true):表示是。 f(false):表示不是。 父主题: Utility
  • GS_ LOG ICAL_PARTITION GS_LOGICAL_PARTITION系统表存储分区表相关的信息。 表1 GS_LOGICAL_PARTITION字段 字段名称 字段类型 说明 partitionid Oid 分区表OID。 relname name 分区表的名称。 parttype char 分区类型。 parentid oid 父表OID。 relfilenode oid 分区表relfilenode。 reltoastrelid oid TOAST 表的OID。 reltoastidxid oid TOAST索引的OID。 csnmin bigint 插入元组时的 CS N(提交序列号)。 csnmax bigint 更新或删除元组时的 CSN。 originid integer 元组的来源标识符。 dbnode oid 数据库OID。 createtime timestamp with time zone 插入元组的时间戳。 reltablespace oid 表空间的OID。 dbnode oid 数据库OID。 父主题: 逻辑解码
  • PG_ATTRDEF PG_ATTRDEF系统表存储列的默认值。 表1 PG_ATTRDEF字段 名称 类型 描述 oid oid 行标识符(隐含属性,必须明确选择)。 adrelid oid 该列的所属表。 adnum smallint 该列的数目。 adbin pg_node_tree 字段缺省值或生成表达式的内部表现形式。 adsrc text 字段缺省值或生成表达式的人类可读的表现形式。 adgencol "char" 标识该列是否为生成列。取值为's'表示该列为生成列,取值为'\0'表示该列为普通列,默认值为'\0'。 adbin_on_update pg_node_tree 字段on update current_timestamp属性表达式的内部表现形式。 adsrc_on_update text 可读on update current_timestamp属性表达式的内部表现形式。 adbin_extend pg_node_tree 生成表达式的内部表现形式。在生成列引用其他生成列的场景中,生成表达式中不含有生成列引用,是adbin字段将生成表达式中引用的其他生成列展开为其生成表达式的等价形式。 父主题: 其他系统表
  • GLOBAL_MEMORY_NODE_DETAIL 显示当前数据库中所有正常节点下的内存使用情况,如表1所示。在PDB下调用返回空。 表1 GLOBAL_MEMORY_NODE_DETAIL字段 名称 类型 描述 nodename text 节点名称。 memorytype text 内存使用的名称。 max_process_memory:数据库节点可用内存的最大值。 process_used_memory:进程所使用的内存大小。 max_dynamic_memory:最大动态内存。 dynamic_used_memory:已使用的动态内存。 dynamic_peak_memory:内存的动态峰值。 dynamic_used_shrctx:已使用的动态共享内存上下文。 dynamic_peak_shrctx:共享内存上下文的动态峰值。 max_shared_memory:最大共享内存。 shared_used_memory:已使用的共享内存。 max_sctpcomm_memory:TCP代理通信所允许使用的最大内存。 sctpcomm_used_memory:TCP代理通信已使用的内存大小。 sctpcomm_peak_memory:TCP代理通信的内存峰值。 other_used_memory:其他已使用的内存大小。 gpu_max_dynamic_memory:GPU最大动态内存。 gpu_dynamic_used_memory:GPU已使用的动态内存。 gpu_dynamic_peak_memory:GPU内存的动态峰值。 pooler_conn_memory:连接池申请内存计数。 pooler_freeconn_memory:连接池空闲连接的内存计数。 storage_compress_memory:存储模块压缩使用的内存大小。 udf_reserved_memory:UDF预留的内存大小。 memorymbytes integer 内存使用的大小,单位为MB。 父主题: Memory
  • 模式级字符集和字符序 创建模式并指定默认字符集和字符序,创建模式请参见CREATE SCHEMA。 CREATE SCHEMA schema_name [ [DEFAULT] CHARACTER SET | CHARSET [ = ] default_charset ] [ [DEFAULT] COLLATE [ = ] default_collation ]; 修改模式的默认字符集、字符序属性,修改模式请参见ALTER SCHEMA。 ALTER SCHEMA schema_name [ [DEFAULT] CHARACTER SET | CHARSET [ = ] default_charset ] [ [DEFAULT] COLLATE [ = ] default_collation ]; 语法说明: schema_name 模式名称。 取值范围:字符串,要符合标识符的命名规范。 default_charset 指定模式的默认字符集,单独指定时会将模式的默认字符序设置为指定的字符集的默认字符序。 default_collation 指定模式的默认字符序,单独指定时会将模式的默认字符集设置为指定的字符序对应的字符集。 GaussDB通过以下方式选择模式的字符集和字符序: 如果同时指定了default_charset和default_collation,则使用字符集default_charset和字符序default_collation ,且default_charset和 default_collation需要对应,不对应会产生报错。 如果仅指定了default_charset ,则使用字符集default_charset及其默认字符序。 如果仅指定了default_collation ,则使用default_collation字符序和其对应的字符集。 如果既不指定default_charset也不指定default_collation ,则该模式没有默认字符集和默认字符序。 default_charset仅支持指定为带有默认字符序的字符集,如果指定的字符集没有默认字符序则报错。 default_collation仅支持指定为B模式(即sql_compatibility = 'B')下的字符序,指定其他字符序报错。 暂不支持创建新SCHEMA的字符集与数据库的server_encoding不同。 示例: 1 2 3 4 5 6 7 8 9 10 11 -- 仅设置字符集,字符序为字符集的默认字符序。 gaussdb=# CREATE SCHEMA test CHARSET utf8; -- 仅设置字符序,字符集为字符序关联的字符集。 gaussdb=# CREATE SCHEMA test COLLATE utf8_bin; -- 同时设置字符集与字符序,字符集和字符序需对应。 gaussdb=# CREATE SCHEMA test CHARSET utf8 COLLATE utf8_bin; -- 将test的默认字符集修改为utf8mb4,默认字符序修改为utf8mb4_bin。 gaussdb=# ALTER SCHEMA test CHARSET utf8mb4 COLLATE utf8mb4_bin; 父主题: 字符集与字符序
  • 语法格式 MOVE [ direction [ FROM | IN ] ] cursor_name; 其中direction子句为可选参数。 NEXT | PRIOR | FIRST | LAST | ABSOLUTE count | RELATIVE count | count | ALL | FORWARD | FORWARD count | FORWARD ALL | BACKWARD | BACKWARD count | BACKWARD ALL
  • 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 --建表并插入数据。 gaussdb=# CREATE TABLE tbl_test(c1 int); gaussdb=# INSERT INTO tbl_test VALUES (generate_series(1,20)); --建立一个名为cursor1的游标。 gaussdb=# BEGIN; gaussdb=# CURSOR cursor1 FOR SELECT * FROM tbl_test ORDER BY 1; --使用MOVE命令使游标向后移动5行,不返回结果。 gaussdb=# MOVE FORWARD 5 FROM cursor1; MOVE 5 --使用FETCH命令检索两行数据。 gaussdb=# FETCH FORWARD 2 FROM cursor1; c1 ---- 6 7 (2 rows) --关闭游标并结束事务。 gaussdb=# CLOSE cursor1; gaussdb=# END; --删除。 gaussdb=# DROP TABLE tbl_test;
  • 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 gaussdb=# CREATE OR REPLACE PROCEDURE proc_case_branch(pi_result in integer, pi_return out integer) AS BEGIN CASE pi_result WHEN 1 THEN pi_return := 111; WHEN 2 THEN pi_return := 222; WHEN 3 THEN pi_return := 333; WHEN 6 THEN pi_return := 444; WHEN 7 THEN pi_return := 555; WHEN 8 THEN pi_return := 666; WHEN 9 THEN pi_return := 777; WHEN 10 THEN pi_return := 888; ELSE pi_return := 999; END CASE; raise info 'pi_return : %',pi_return ; END; / CREATE PROCEDURE gaussdb=# CALL proc_case_branch(3,0); INFO: pi_return : 333 pi_return ----------- 333 (1 row) --删除存储过程 gaussdb=# DROP PROCEDURE proc_case_branch; DROP PROCEDURE
  • GLOBAL_PLANCACHE_STATUS GLOBAL_PLANCACHE_STATUS视图显示GPC全局计划缓存状态信息,如表1所示。多租不支持。 表1 GLOBAL_PLANCACHE_STATUS字段 名称 类型 描述 nodename text 所属节点名称。 query text 查询语句text。 refcount integer 被引用次数。 valid bool 是否合法。 databaseid oid 所属数据库id。 schema_name text 所属schema。 params_num integer 参数数量。 func_id oid 该plancache所在存储过程oid,如果不属于存储过程则为0。 pkg_id oid 该plancache所在存储过程所属的Package,如果不属于Package则为0。 stmt_id integer 显示存储过程内语句计划的序号。 父主题: Global Plancache
  • 示例 重命名分区。 --创建二级分区表tbl_rge_lst_test。 gaussdb=# CREATE TABLE tbl_lst_reg_test( area_id char(5), sdate char(8), eid char(5), sales_amt int ) PARTITION BY LIST(area_id) SUBPARTITION BY RANGE(sdate)( PARTITION p_1001 VALUES ('1001')( SUBPARTITION p_1001_201901 VALUES LESS THAN ('20190201'), SUBPARTITION p_1001_201902 VALUES LESS THAN ('20190301'), SUBPARTITION p_1001_201903 VALUES LESS THAN ('20190401') ), PARTITION p_1002 VALUES ('1002')( SUBPARTITION p_1002_201901 VALUES LESS THAN ('20190201'), SUBPARTITION p_1002_201902 VALUES LESS THAN ('20190301'), SUBPARTITION p_100w VALUES LESS THAN ('20190401') ) ); --将子分区p_100w名称修改为p_1002_201903。 gaussdb=# ALTER TABLE tbl_lst_reg_test RENAME SUBPARTITION p_100w TO p_1002_201903; --查询。 gaussdb=# SELECT table_name,partition_name,subpartition_name FROM db_tab_subpartitions WHERE table_name = 'tbl_lst_reg_test' AND partition_name = 'p_1002'; table_name | partition_name | subpartition_name ------------------+----------------+------------------- tbl_lst_reg_test | p_1002 | p_1002_201901 tbl_lst_reg_test | p_1002 | p_1002_201902 tbl_lst_reg_test | p_1002 | p_1002_201903 (3 rows) 移动分区表空间。 --创建表空间tbs_data1。 gaussdb=# CREATE TABLESPACE tbs_data1 RELATIVE LOCATION 'tablespace/tbs_data1'; --移动二级分区p_1002_201901至表空间tbs_data1。 gaussdb=# ALTER TABLE tbl_lst_reg_test MOVE SUBPARTITION p_1002_201901 TABLESPACE tbs_data1; --移动二级分区p_1002_201902至表空间tbs_data1。 gaussdb=# ALTER TABLE tbl_lst_reg_test MOVE SUBPARTITION FOR ('1002','20190325') TABLESPACE tbs_data1; --查询修改后的二级分区的表空间。 gaussdb=# SELECT subpartition_name,tablespace_name FROM db_tab_subpartitions WHERE subpartition_name IN ('p_1002_201901','p_1002_201903'); subpartition_name | tablespace_name -------------------+----------------- p_1002_201901 | tbs_data1 p_1002_201903 | tbs_data1 (2 rows) 分区交换。 --创建普通表并插入数据。 gaussdb=# CREATE TABLE tbl_test( area_id char(5), sdate char(8), eid char(5), sales_amt int ); gaussdb=# INSERT INTO tbl_test VALUES ('1002','20190326','00001',9000); gaussdb=# INSERT INTO tbl_test VALUES ('1002','20190326','00002',7500); gaussdb=# INSERT INTO tbl_test VALUES ('1002','20190326','00003',6000); --在分区表中插入数据。 gaussdb=# INSERT INTO tbl_lst_reg_test VALUES ('1002','20190301','00001',126); --执行分区交换。 gaussdb=# ALTER TABLE tbl_lst_reg_test EXCHANGE SUBPARTITION (p_1002_201903) WITH TABLE tbl_test; --查询数据发现表和分区的数据发生了交换。 gaussdb=# SELECT * FROM tbl_lst_reg_test; area_id | sdate | eid | sales_amt ---------+----------+-------+----------- 1002 | 20190326 | 00001 | 9000 1002 | 20190326 | 00002 | 7500 1002 | 20190326 | 00003 | 6000 (3 rows) gaussdb=# SELECT * FROM tbl_test; area_id | sdate | eid | sales_amt ---------+----------+-------+----------- 1002 | 20190301 | 00001 | 126 (1 row) --查看分区表空间也发生了交换。 gaussdb=# SELECT subpartition_name,tablespace_name FROM db_tab_subpartitions WHERE subpartition_name = 'p_1002_201903'; subpartition_name | tablespace_name -------------------+-------------------- p_1002_201903 | DEFAULT TABLESPACE (1 row) 分区合并。 --分区合并。 gaussdb=# ALTER TABLE tbl_lst_reg_test MERGE SUBPARTITIONS p_1002_201901,p_1002_201902,p_1002_201903 INTO SUBPARTITION p_1002_20191; --查询二级分区信息。 gaussdb=# SELECT table_name,partition_name,subpartition_name FROM db_tab_subpartitions WHERE table_name = 'tbl_lst_reg_test'; table_name | partition_name | subpartition_name ------------------+----------------+------------------- tbl_lst_reg_test | p_1001 | p_1001_201901 tbl_lst_reg_test | p_1001 | p_1001_201902 tbl_lst_reg_test | p_1001 | p_1001_201903 tbl_lst_reg_test | p_1002 | p_1002_20191 (4 rows) 添加分区。 --添加一个一级分区。 gaussdb=# ALTER TABLE tbl_lst_reg_test ADD PARTITION p_1003 VALUES('1003') (SUBPARTITION p_1003_201901 VALUES LESS THAN ('20190201')); --在特定的一级分区中添加二级分区。 gaussdb=# ALTER TABLE tbl_lst_reg_test MODIFY PARTITION p_1003 ADD SUBPARTITION p_1003_201902 VALUES LESS THAN ('20190301'); --查询分区信息。 gaussdb=# SELECT table_name,partition_name,subpartition_name FROM db_tab_subpartitions WHERE table_name = 'tbl_lst_reg_test'; table_name | partition_name | subpartition_name ------------------+----------------+------------------- tbl_lst_reg_test | p_1001 | p_1001_201901 tbl_lst_reg_test | p_1001 | p_1001_201902 tbl_lst_reg_test | p_1001 | p_1001_201903 tbl_lst_reg_test | p_1002 | p_1002_20191 tbl_lst_reg_test | p_1003 | p_1003_201901 tbl_lst_reg_test | p_1003 | p_1003_201902 (6 rows) 删除分区。 --删除二级分区p_1003_201902。 gaussdb=# ALTER TABLE tbl_lst_reg_test DROP SUBPARTITION p_1003_201902; --查看。 gaussdb=# SELECT table_name,partition_name,subpartition_name FROM db_tab_subpartitions WHERE table_name = 'tbl_lst_reg_test' AND partition_name = 'p_1003'; table_name | partition_name | subpartition_name ------------------+----------------+------------------- tbl_lst_reg_test | p_1003 | p_1003_201901 (1 row) --删除一级分区p_1003。 gaussdb=# ALTER TABLE tbl_lst_reg_test DROP PARTITION p_1003; --查看。 gaussdb=# SELECT table_name,partition_name,subpartition_name FROM db_tab_subpartitions WHERE table_name = 'tbl_lst_reg_test'; table_name | partition_name | subpartition_name ------------------+----------------+------------------- tbl_lst_reg_test | p_1001 | p_1001_201901 tbl_lst_reg_test | p_1001 | p_1001_201902 tbl_lst_reg_test | p_1001 | p_1001_201903 tbl_lst_reg_test | p_1002 | p_1002_20191 (4 rows) 切割分区。 --指定切割点切割分区。 gaussdb=# ALTER TABLE tbl_lst_reg_test SPLIT SUBPARTITION p_1002_20191 AT ('20190201') INTO (SUBPARTITION p_1002_201901,SUBPARTITION p_1002_20191) UPDATE GLOBAL INDEX; --不指定切割垫切割分区。 gaussdb=# ALTER TABLE tbl_lst_reg_test SPLIT SUBPARTITION p_1002_20191 INTO ( SUBPARTITION p_1002_201902 VALUES LESS THAN ('20190301'), SUBPARTITION p_1002_201903 ) UPDATE GLOBAL INDEX; --查询分区信息。 gaussdb=# SELECT table_name,partition_name,subpartition_name,high_value FROM db_tab_subpartitions; table_name | partition_name | subpartition_name | high_value ------------------+----------------+-------------------+------------ tbl_lst_reg_test | p_1001 | p_1001_201901 | 20190201 tbl_lst_reg_test | p_1001 | p_1001_201902 | 20190301 tbl_lst_reg_test | p_1001 | p_1001_201903 | 20190401 tbl_lst_reg_test | p_1002 | p_1002_201901 | 20190201 tbl_lst_reg_test | p_1002 | p_1002_201902 | 20190301 tbl_lst_reg_test | p_1002 | p_1002_201903 | 20190401 (6 rows) 清空分区数据。 --清空一级分区。 gaussdb=# ALTER TABLE tbl_lst_reg_test TRUNCATE PARTITION p_1001 UPDATE GLOBAL INDEX; --清空二级分区。 gaussdb=# ALTER TABLE tbl_lst_reg_test TRUNCATE SUBPARTITION p_1002_201903 UPDATE GLOBAL INDEX; --删除表。 gaussdb=# DROP TABLE tbl_lst_reg_test; gaussdb=# DROP TABLE tbl_test; --删除表空间。 gaussdb=# DROP TABLESPACE tbs_data1;
  • 参数说明 table_name 分区表名。 取值范围:已存在的分区表名。 subpartition_name 二级分区名。 取值范围:已存在的二级分区名。 tablespacename 指定分区要移动到哪一个表空间。 取值范围:已存在的表空间名。 partition_value 一级分区键值。 通过PARTITION FOR ( partition_value [, ...] )子句指定的这一组值,可以唯一确定一个一级分区。 取值范围:需要进行操作的一级分区的分区键的取值范围。 subpartition_value 一级分区键值和二级分区键值。 通过SUBPARTITION FOR ( subpartition_value [, ...] )子句指定的这一组值,可以唯一确定一个二级分区。 取值范围:对于需要进行操作的二级分区,需要同时有其一级分区分区键和二级分区分区键的取值范围。 UNUSABLE LOCAL INDEXES 设置该分区上的所有索引不可用。 REBUILD UNUSABLE LOCAL INDEXES 重建该分区上的所有索引。 { ENABLE | DISABLE } ROW MOVEMET 行迁移开关。 如果进行UPDATE操作时,更新了元组在分区键上的值,造成了该元组所在分区发生变化,就会根据该开关给出报错信息,或者进行元组在分区间的转移。 取值范围: ENABLE:打开行迁移开关。 DISABLE:关闭行迁移开关。 默认是打开状态。 ordinary_table_name 进行迁移的普通表的名称。 取值范围:已存在的普通表名。 { WITH | WITHOUT } VALIDATION 在进行数据迁移时,是否检查普通表中的数据满足指定分区的分区键范围。 取值范围: WITH:对于普通表中的数据要检查是否满足分区的分区键范围,如果有数据不满足,则报错。 WITHOUT:对于普通表中的数据不检查是否满足分区的分区键范围。 默认是WITH状态。 由于检查比较耗时,特别是当数据量很大的情况。所以在保证当前普通表中的数据满足分区的分区键范围时,可以加上WITHOUT来指明不进行检查。 VERBOSE 在VALIDATION是WITH状态时,如果检查出普通表有不满足要交换分区的分区键范围的数据,那么把这些数据插入到正确的分区,如果路由不到任何分区,再报错。 只有在VALIDATION是WITH状态时,才可以指定VERBOSE。 partition_new_name 分区的新名称。 取值范围:字符串,要符合标识符命名规范。 subpartition_new_name 二级分区的新名称。 取值范围:字符串,要符合标识符命名规范。 UPDATE GLOBAL INDEX 如果使用该参数,则会更新分区表上的所有全局索引,以确保使用全局索引可以查询出正确的数据;如果不使用该参数,则分区表上的所有全局索引将会失效。 SET { PARTITIONING | SUBPARTITIONING } { AUTOMATIC | MANUAL } 开启或关闭一级/二级列表分区的自动扩展功能。使用PARTITIONING关键字时指定一级分区,使用SUBPARTITIONING关键字时指定二级分区。使用AUTOMATIC关键字时为开启自动扩展功能,使用MANUAL关键字时为关闭自动扩展功能。
  • 语法格式 修改二级分区表分区包括修改表分区主语法、修改表分区名称的语法、重置分区ID和开启/关闭分区自动扩展功能的语法。 修改表分区主语法。 ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name )} action [, ... ]; 其中action统指如下分区维护子语法。当存在多个分区维护子句时,保证了分区的连续性,无论这些子句的排序如何,GaussDB总会先执行DROP PARTITION再执行ADD PARTITION操作,最后顺序执行其它分区维护操作。 move_clause | exchange_clause | row_clause | merge_clause | modify_clause | add_clause | drop_clause | split_clause | truncate_clause | ilm_clause | set_partitioning_clause move_clause子语法用于移动分区到新的表空间。 MOVE SUBPARTITION { subpartion_name | FOR ( subpartition_value [, ...] ) } TABLESPACE tablespacename exchange_clause子语法用于把普通表的数据迁移到指定的分区。 EXCHANGE SUBPARTITION { ( subpartition_name ) | FOR ( subpartition_value [, ...] ) } WITH TABLE {[ ONLY ] ordinary_table_name | ordinary_table_name * | ONLY ( ordinary_table_name )} [ { WITH | WITHOUT } VALIDATION ] [ VERBOSE ] [ UPDATE GLOBAL INDEX ] 进行交换的普通表和分区必须满足如下条件: 普通表和分区的列数目相同,对应列的信息严格一致,包括:列名、列的数据类型、列约束、列的Collation信息、列的存储参数、列的压缩信息等。 普通表和分区的表压缩信息严格一致。 普通表索引和分区Local索引个数相同,且对应索引的信息严格一致。 普通表和分区的表约束个数相同,且对应表约束的信息严格一致。 普通表不可以是临时表,分区表只能是二级分区表。 普通表和分区表上不可以有动态数据脱敏,行访问控制约束。 完成交换后,普通表和分区的数据被置换,同时普通表和分区的表空间信息被置换。此时,普通表和分区的统计信息变得不可靠,需要对普通表和分区重新执行analyze。 由于非分区键不能建立本地唯一索引,只能建立全局唯一索引,所以如果普通表含有唯一索引时,可能会导致不能交换数据。 如果需要进行数交换数据操作可以通过创建中间表的方式,先将分区数据插入到中间表,truncate分区,普通表数据插入分区表,drop普通表,重命名中间表的方式完成数据交换操作。 如果在普通表/分区表上进行了drop column操作,被删除的列依然物理存在,所以需要保证普通表和分区的被删除列也严格对齐才能交换成功。 row_clause子语法用于设置分区表的行迁移开关。 { ENABLE | DISABLE } ROW MOVEMENT merge_clause子语法用于把多个分区合并成一个分区。一个命令中合并的源分区上限为300。 MERGE SUBPARTITIONS { subpartition_name } [, ...] INTO SUBPARTITION subpartition_name [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )]] [ TABLESPACE tablespacename ] [ UPDATE GLOBAL INDEX ] 对于范围分区,MERGE分区要求源分区的范围连续递增,且MERGE后的分区名可以与最后一个源分区名相同;对于列表分区,则源分区无顺序要求,且MERGE后的分区名可以与任一源分区名相同。如果MERGE后的分区名与源分区名相同,视为同一个分区。 未打开guc参数enable_ilm的情况下,如果使用merge_clause子语法把多个带有ilm policy的分区合并成一个分区,新分区不继承ilm policy。 USTORE存储引擎表不支持在事务块/存储过程中执行ALTER TABLE MERGE SUBPARTITIONS的操作。 modify_clause子语法用于设置分区索引是否可用。语法可以作用在一级分区上。 MODIFY PARTITION partition_name { UNUSABLE LOCAL INDEXES | REBUILD UNUSABLE LOCAL INDEXES } 也可以作用在二级分区上。 MODIFY SUBPARTITION subpartition_name { UNUSABLE LOCAL INDEXES | REBUILD UNUSABLE LOCAL INDEXES } add_clause子语法用于为指定的分区表添加一个或多个分区。语法可以作用在一级分区上。 ADD {partition_less_than_item | partition_list_item } [ ( subpartition_definition_list ) ] 也可以作用在二级分区上。 MODIFY PARTITION partition_name ADD subpartition_definition 其中,分区项partition_less_than_item为RANGE分区定义语法,具体语法如下。 PARTITION partition_name VALUES LESS THAN ( partition_value | MAXVALUE )[ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )] ] [ TABLESPACE tablespacename ] 分区项partition_list_item为LIST分区定义语法,具体语法如下。 PARTITION partition_name VALUES ( partition_value [, ...] | DEFAULT ) [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )] ] [ TABLESPACE tablespacename ] subpartition_definition_list为1到多个二级分区subpartition_definition对象,subpartition_definition具体语法如下。 SUBPARTITION subpartition_name [ VALUES LESS THAN ( partition_value | MAXVALUE ) | VALUES ( partition_value [, ...] | DEFAULT )] [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )] ] [ TABLESPACE tablespace ] 若一级分区为HASH分区,不支持以ADD形式新增一级分区;若二级分区为HASH分区,不支持以MODIFY形式新增二级分区。 drop_clause子语法用于删除分区表中的指定分区。语法可以作用在一级分区上。 DROP PARTITION { partition_name | FOR ( partition_value ) } [ UPDATE GLOBAL INDEX ] 也可以作用在二级分区上。 DROP SUBPARTITION { subpartition_name | FOR ( partition_value, subpartition_value ) } [ UPDATE GLOBAL INDEX ] 若一级分区为HASH分区,不支持删除一级分区;若二级分区为HASH分区,不支持删除二级分区。 不支持删除唯一子分区。 split_clause子语法用于把一个分区切割成多个分区。 SPLIT SUBPARTITION { subpartition_name| FOR ( subpartition_value [, ...] ) } { split_point_clause | no_split_point_clause } [ UPDATE GLOBAL INDEX ] SPLIT后的分区名可以与源分区名相同,但视为不同的分区。 未打开guc参数enable_ilm的情况下,如果使用split_clause子语法把一个带有ilm policy的分区分割成多个分区,新分区不继承ilm policy。 范围分区指定切割点split_point_clause的语法为: AT ( subpartition_value ) INTO ( SUBPARTITION subpartition_name [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )] ] [ TABLESPACE tablespacename ] , SUBPARTITION subpartition_name [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )] ] [ TABLESPACE tablespacename ] ) 切割点的大小要位于正在被切割的分区的分区键范围内,指定切割点的方式只能把一个分区切割成两个新分区。 范围分区不指定切割点no_split_point_clause 的语法如下: INTO ( SUBPARTITION subpartition_name VALUES LESS THAN (subpartition_value) [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )] ] [ TABLESPACE tablespacename ][, ...] ) 第一个新分区的分区范围定义要大于正在被切割的分区的前一个分区(如果存在的话)的分区范围定义。 其中最后一个分区不能写分区范围定义,即VALUES LESS THAN (subpartition_value)部分,默认继承源分区范围定义的上界值。 新分区必须满足分区范围定义递增的约束。 列表范围分区指定切割点split_point_clause的语法如下: VALUES ( subpartition_value_list ) INTO ( SUBPARTITION subpartition_name [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )] ] [ TABLESPACE tablespacename ] , SUBPARTITION subpartition_name [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )] ] [ TABLESPACE tablespacename ] ) 切割点必须是源分区的一个非空真子集,指定切割点的方式只能把一个分区切割成两个新分区。 列表分区表不指定切割点no_split_point_clause的语法如下: INTO ( SUBPARTITION subpartition_name VALUES (subpartition_value_list) [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )] ] [ TABLESPACE tablespacename ][, ...] ) 其中最后一个分区不能写分区范围定义,即VALUES (subpartition_value_list)部分,其范围等于源分区去掉其他子分区后的剩余集合。 不指定切割点的方式,每一个新分区都必须是源分区的一个非空真子集,且互不交叉。 truncate_clause子语法用于清空分区表中的指定分区。语法可以作用在一级分区上。 TRUNCATE PARTITION { partition_name | FOR ( partition_value [, ...] ) } [ UPDATE GLOBAL INDEX ] 也可以作用在二级分区上。 TRUNCATE SUBPARTITION { subpartition_name | FOR ( subpartition_value [, ...] ) } [ UPDATE GLOBAL INDEX ] ilm_clause子语法用于为分区添加ILM策略,为数据生命周期管理-OLTP表压缩特性支持语法。语法可以作用在一级分区上。 MODIFY PARTITION partition_name ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR ) ] 也可以作用在二级分区上 MODIFY SUBPARTITION subpartition_name ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR ) ] set_partitioning_clause子语法用于开启或关闭列表分区自动扩展功能。 SET { PARTITIONING | SUBPARTITIONING } { AUTOMATIC | MANUAL }
  • 注意事项 添加分区的表空间不能是PG_GLOBAL。 添加分区的名称不能与该分区表已有一级分区和二级分区的名称相同。 添加分区的分区键值要和分区表的分区键的类型一致。 若添加RANGE分区,添加分区键值要大于分区表中最后一个范围分区的上边界。若需要在有MAXVALUE分区的表上新增分区,建议使用SPLIT语法。 若添加LIST分区,添加分区键值不能与现有分区键值重复。若需要在有DEFAULT分区的表上新增分区,建议使用SPLIT语法。 不支持添加HASH分区。只有一种情况例外,二级分区表的二级分区方式为HASH且一级分区方式不是HASH,此时支持新增一级分区并创建对应的二级分区。 如果目标分区表中已有分区数达到了最大值1048575,则不能继续添加分区。 当分区表只有一个一级分区或二级分区时,不能删除该分区。 不支持删除HASH分区。 选择分区使用PARTITION FOR()或SUBPARTITION FOR(),括号里指定值个数应该与定义分区时使用的列个数相同,并且一一对应。 切割分区只能对二级分区(叶子节点)进行切割,被切割分区只能是RANGE、LIST分区策略,不支持切割 HASH分区策略。 合并分区只能对二级分区(叶子节点)进行合并,且源分区必须属于同一个一级分区。 只有分区表的所有者或者被授予了分区表ALTER权限的用户有权限执行ALTER TABLE PARTITION命令,系统管理员默认拥有此权限。 删除、切割、清空、交换分区的操作会使Global索引失效,可以申明UPDATE GLOBAL INDEX子句同步更新索引。 如果删除、切割、清空、交换分区操作不申明UPDATE GLOBAL INDEX子句,并发的DML业务有可能因为索引不可用而报错。 若设置参数enable_gpi_auto_update为on,即使不申明UPDATE GLOBAL INDEX子句,也会自动更新Global索引。 在为数据对象增加或者变更ILM策略的时候,如果追加了行级表达式,需要注意行表达式目前只支持白名单中列出的函数。具体白名单函数列表参考行表达式函数白名单。 开启一级/二级列表分区自动扩展要求对应层级的分区中不能存在分区键值为DEFAULT的分区。
  • PG_TS_CONFIG_MAP PG_TS_CONFIG_MAP系统表包含每个文本搜索配置的解析器符号映射关系。 表1 PG_TS_CONFIG_MAP字段 名称 类型 引用 描述 mapcfg oid PG_TS_CONFIG.oid 拥有这个映射记录的PG_TS_CONFIG记录的OID。 maptokentype integer - 由配置的解析器产生的一个符号类型值。 mapseqno integer - 在相同mapcfg或maptokentype值的情况下,该符号类型的顺序号。 mapdict oid PG_TS_DICT.oid 要咨询的文本搜索字典的OID。 父主题: 其他系统表
  • 示例 对表进行聚簇排序: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 --建表并向表中插入数据。 gaussdb=# CREATE TABLE test_c1(id int, name varchar(20)); gaussdb=# CREATE INDEX idx_test_c1_id ON test_c1(id); gaussdb=# INSERT INTO test_c1 VALUES (3,'Joe'),(1,'Jack'),(2,'Scott'); --查看。 gaussdb=# SELECT * FROM test_c1; id | name ----+------- 3 | Joe 1 | Jack 2 | Scott (3 rows) --聚簇排序。 gaussdb=# CLUSTER test_c1 USING idx_test_c1_id; --查看。 gaussdb=# SELECT * FROM test_c1; id | name ----+------- 1 | Jack 2 | Scott 3 | Joe (3 rows) --删除。 gaussdb=# DROP TABLE test_c1; 对已做过聚簇的表重新进行聚簇排序: --建表。 gaussdb=# CREATE TABLE test(col1 int,CONSTRAINT pk_test PRIMARY KEY (col1)); --第一次聚簇排序不带USING关键字报错。 gaussdb=# CLUSTER test; ERROR: there is no previously clustered index for table "test" --聚簇排序。 gaussdb=# CLUSTER test USING pk_test; --插入数据。 gaussdb=# INSERT INTO test VALUES (1),(99),(10),(8); --对已做过聚簇的表重新进行聚簇。 gaussdb=# CLUSTER VERBOSE test; INFO: clustering "public.test" using index scan on "pk_test"(dn_6001 pid=3672) INFO: "test": found 0 removable, 4 nonremovable row versions in 1 pages(dn_6001 pid=3672) DETAIL: 0 dead row versions cannot be removed yet. CPU 0.00s/0.00u sec elapsed 0.01 sec. CLUSTER --删除。 gaussdb=# DROP TABLE test; 对分区进行聚簇排序: --建表并向表中插入数据。 gaussdb=# CREATE TABLE test_c2(id int, info varchar(4)) PARTITION BY RANGE (id)( PARTITION p1 VALUES LESS THAN (11), PARTITION p2 VALUES LESS THAN (21) ); gaussdb=# CREATE INDEX idx_test_c2_id1 ON test_c2(id); gaussdb=# INSERT INTO test_c2 VALUES (6,'ABBB'),(2,'ABAB'),(9,'AAAA'); gaussdb=# INSERT INTO test_c2 VALUES (11,'AAAB'),(19,'BBBA'),(16,'BABA'); --查看。 gaussdb=# SELECT * FROM test_c2; id | info ----+------ 6 | ABBB 2 | ABAB 9 | AAAA 11 | AAAB 19 | BBBA 16 | BABA (6 rows) --对分区p2进行聚簇排序。 gaussdb=# CLUSTER test_c2 PARTITION (p2) USING idx_test_c2_id1; --查看。 gaussdb=# SELECT * FROM test_c2; id | info ----+------ 6 | ABBB 2 | ABAB 9 | AAAA 11 | AAAB 16 | BABA 19 | BBBA (6 rows) --删除。 gaussdb=# DROP TABLE test_c2;
  • 语法格式 对一个表进行聚簇排序。 CLUSTER [ VERBOSE ] table_name [ USING index_name ]; 对一个分区进行聚簇排序。 CLUSTER [ VERBOSE ] table_name PARTITION ( partition_name ) [ USING index_name ]; 对已做过聚簇的表重新进行聚簇。 CLUSTER [ VERBOSE ];
  • 注意事项 只有行存B-tree索引支持CLUSTER操作。 如果用户只是随机访问表中的行,那么表中数据的实际存储顺序是无关紧要的。但是,如果对某些特定数据的访问次数较多,而且有一个索引将这些数据分组,那么使用CLUSTER索引对性能会有所提升。 如果一个请求从表中查找的索引是一个范围,或者是一个索引值对应多行,CLUSTER也会有助于应用,因为如果索引标识出了第一匹配行所在的存储页,所有其它行也可能也已经在同一个存储页里了,这样便节省了磁盘访问的时间,加速了查询。 在聚簇过程中,系统会先创建一个按照索引顺序建立的表的临时备份,同时也建立表上的每个索引的临时备份。因此,聚簇过程中需要保证磁盘上有足够的剩余空间,至少是表大小与全部索引大小之和。 因为CLUSTER记录着哪些索引曾被用于聚簇,所以用户可以在第一次手动指定索引,对指定表进行聚簇,然后设置一个周期化执行的维护脚本,只需执行不带参数的CLUSTER命令,就可以实现对想要周期性聚簇的表进行自动更新。 因为优化器记录着有关表的排序的统计,在表上执行聚簇操作后,需运行ANALYZE操作以确保优化器具备最新的排序信息,否则,优化器可能会选择非最优的查询规划。 CLUSTER不允许在事务中执行。 如果没有将GUC参数xc_maintenance_mode设置为on,那么CLUSTER操作将跳过所有系统表。
  • 功能描述 根据一个索引对表进行聚簇排序。 CLUSTER指定GaussDB通过索引名指定的索引聚簇由表名指定的表。表名上必须已经定义该索引。 当对一个表聚簇后,该表将基于索引信息进行物理存储。聚簇是一次性操作:当表被更新之后,更改的内容不会被聚簇。也就是说,系统不会试图按照索引顺序对新的存储内容及更新记录进行重新聚簇。 在对一个表聚簇之后,GaussDB会记录该表在哪一个索引上建立了聚簇。CLUSTER table_name将在该表之前记录过的聚簇索引上重新聚簇。用户也可以用ALTER TABLE table_name CLUSTER on index_name来设置指定表用于后续聚簇操作的索引,或使用ALTER TABLE table_name SET WITHOUT CLUSTER来清除指定表之前设置的聚簇索引。 不含参数的CLUSTER命令会将当前用户所拥有的数据库中的先前做过聚簇的所有表重新处理。如果系统管理员调用这个命令,则对所有进行过聚簇的表重新聚簇。 在对一个表进行聚簇的时候,会在其上请求一个ACCESS EXCLUSIVE锁,这样就避免了在CLUSTER操作完成之前对该表执行其它的操作(包括读写)。
  • 参数说明 VERBOSE 可选。启用显示进度信息。 table_name 表名称。 取值范围:已存在的表名称。 [ USING index_name ] 索引名称。 取值范围:已存在的索引名称。 第一次对表进行聚簇排序时必须指定index_name,后续再次对表进行聚簇排序时不指定index_name,将会按照已有记录对表进行聚簇排序。 partition_name 分区名称。 取值范围:已存在的分区名称。
  • DBE_PLDEBUGGER.turn_on 该函数用于标记某一存储过程为可调试,执行turn_on后server端可以执行该存储过程来进行调试,如表1所示。需要用户根据系统表PG_PROC手动获取存储过程oid,传入函数中。turn_on后本session内执行该存储过程会停在第一条sql前等待debug端的调试操作。该设置会在session断连后默认被清理掉。目前不支持对启用自治事务的存储过程/函数进行调试。同时turn_on的存储过程不超过100个。 函数原型为: 1 2 DBE_PLDEBUGGER.turn_on(Oid) RETURN Record; 表1 turn_on入参和返回值列表 名称 类型 描述 func_oid IN oid 函数oid nodename OUT text 节点名称 port OUT integer 连接端口号 父主题: DBE_PLDEBUGGER Schema
  • 窗口函数查询 窗口函数对数据集中的相关行集执行计算,返回一个结果集。与聚集函数所完成的计算相比,窗口函数并不会使多行被聚集成一个单独的输出行。 --建表并插入数据。 gaussdb=# CREATE TABLE fruit_sale ( "statistical_date" date, "product" varchar(255), "year" varchar(5), "sales_quantity" numeric(8), "amount" numeric(8) ); gaussdb=# INSERT INTO fruit_sale VALUES ('2024-01-01', '西瓜', '2024', 1721, 253541); gaussdb=# INSERT INTO fruit_sale VALUES ('2024-01-01', '苹果', '2024', 5559, 269419); gaussdb=# INSERT INTO fruit_sale VALUES ('2024-02-01', '西瓜', '2024', 4711, 129644); --统计所有水果的销售量。 gaussdb=# SELECT *,SUM(sales_quantity) OVER (PARTITION by null) total_qty FROM fruit_sale; statistical_date | product | year | sales_quantity | amount | total_qty ------------------+---------+------+----------------+--------+----------- 2024-01-01 | 西瓜 | 2024 | 1721 | 253541 | 11991 2024-01-01 | 苹果 | 2024 | 5559 | 269419 | 11991 2024-02-01 | 西瓜 | 2024 | 4711 | 129644 | 11991 (3 rows) --删除。 gaussdb=# DROP TABLE fruit_sale; 父主题: SELECT
  • ADM_DEPENDENCIES ADM_DEPENDENCIES视图显示数据库中的类型、表、视图、存储过程、函数、触发器之间的依赖关系。默认只有系统管理员权限才可以访问,普通用户需要授权才可以访问。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 ADM_DEPENDENCIES字段 名称 类型 描述 owner name 对象的所有者。 name name 对象的名称。 type character varying(18) 对象的类型。 referenced_owner name 被引用对象的所有者。 referenced_name name 被引用对象的名称。 referenced_type character varying(18) 被引用对象的类型。 referenced_link_name character varying(128) 暂不支持,值为NULL。 dependency_type character varying(4) 暂不支持,值为NULL。 父主题: 其他系统视图
共100000条