华为云用户手册

  • DBE_SQL_UTIL.create_abort_sql_patch create_abort_sql_patch是用于创建避险SQL PATCH的接口函数,返回执行是否成功,如表1所示。本函数是原函数的重载函数,支持通过parent_unique_sql_id值限制abort patch的生效范围。 限制:仅初始用户、sysadmin、opradmin和monadmin用户有权限调用。 表1 DBE_SQL_UTIL.create_abort_sql_patch重载函数入参和返回值列表 参数 类型 描述 patch_name IN name PATCH名称。 unique_sql_id IN bigint 查询全局唯一ID。 parent_unique_sql_id IN bigint 标识外层SQL语句的全局唯一ID,值为0时表示限制存储过程外语句SQL PATCH生效;非0值表示限制特定存储过程生效。 description IN text PATCH的备注,默认值为NULL。 enabled IN bool PATCH是否生效,默认值为true。 result OUT bool 执行是否成功。 父主题: DBE_SQL_UTIL Schema
  • GS_IMCV GS_IMCV系统表提供了所有IMCV表的元信息。 表1 GS_IMCV字段 名称 类型 描述 reloid oid 表id。 relname name 表名。 dbname name 数据库名。 username name 用户名。 parentoid oid 父表id。 imcvispart boolean 是否是分区表。 imcvnattr smallint 需要加载的列数量。 imcvkey int2vector 加载的列数组。 priority smallint 加载优先级。 父主题: 其他系统表
  • 范围分区示例 VALUES LESS THAN --创建表空间。 CREATE TABLESPACE tbs_test_range1_p1 RELATIVE LOCATION 'tbs_test_range1/tablespace_1'; CREATE TABLESPACE tbs_test_range1_p2 RELATIVE LOCATION 'tbs_test_range1/tablespace_2'; CREATE TABLESPACE tbs_test_range1_p3 RELATIVE LOCATION 'tbs_test_range1/tablespace_3'; CREATE TABLESPACE tbs_test_range1_p4 RELATIVE LOCATION 'tbs_test_range1/tablespace_4'; --创建分区表test_range1。 CREATE TABLE test_range1( id INT, info VARCHAR(20) ) PARTITION BY RANGE (id) ( PARTITION p1 VALUES LESS THAN (200) TABLESPACE tbs_test_range1_p1, PARTITION p2 VALUES LESS THAN (400) TABLESPACE tbs_test_range1_p2, PARTITION p3 VALUES LESS THAN (600) TABLESPACE tbs_test_range1_p3, PARTITION pmax VALUES LESS THAN (MAXVALUE) TABLESPACE tbs_test_range1_p4 ); --插入1000条数据 INSERT INTO test_range1 VALUES(GENERATE_SERIES(1,1000),'abcd'); --查看p1分区的行数199条,[1,200)。 SELECT COUNT(*) FROM test_range1 PARTITION (p1); count ------- 199 (1 row) --查看p2分区的行数200条,[200,400)。 SELECT COUNT(*) FROM test_range1 PARTITION (p2); count ------- 200 (1 row) --查看分区信息。 SELECT a.relname, a.boundaries, b.spcname FROM pg_partition a, pg_tablespace b WHERE a.reltablespace = b.oid AND a.parentid = 'test_range1'::regclass; relname | boundaries | spcname ---------+------------+-------------------- p1 | {200} | tbs_test_range1_p1 p2 | {400} | tbs_test_range1_p2 p3 | {600} | tbs_test_range1_p3 pmax | {NULL} | tbs_test_range1_p4 (4 rows) --删除 DROP TABLE test_range1; DROP TABLESPACE tbs_test_range1_p1; DROP TABLESPACE tbs_test_range1_p2; DROP TABLESPACE tbs_test_range1_p3; DROP TABLESPACE tbs_test_range1_p4; START END --创建分区表。 CREATE TABLE test_range2( id INT, info VARCHAR(20) ) PARTITION BY RANGE (id) ( PARTITION p1 START(1) END(600) EVERY(200), PARTITION p2 START(600) END(800), PARTITION pmax START(800) END(MAXVALUE) ); --查看分区信息。 SELECT relname, boundaries FROM pg_partition WHERE parentid = 'test_range2'::regclass AND parttype = 'p' ORDER BY 1; relname | boundaries ---------+------------ p1_0 | {1} p1_1 | {201} p1_2 | {401} p1_3 | {600} p2 | {800} pmax | {NULL} (6 rows) --删除。 DROP TABLE test_range2;
  • 哈希分区示例 --创建哈希分区表,指定分区数。 CREATE TABLE test_hash1(c1 int) PARTITION BY HASH(c1) PARTITIONS 3; --创建哈希分区表,并指定分区名。 CREATE TABLE test_hash2(c1 int) PARTITION BY HASH(C1)( PARTITION pa, PARTITION pb, PARTITION pc ); --查看分区信息。 SELECT b.relname AS table_name, a.relname AS partition_name FROM pg_partition a, pg_class b WHERE b.relname LIKE 'test_hash%' AND a.parttype = 'p' AND a.parentid = b.oid; table_name | partition_name ------------+---------------- test_hash1 | p2 test_hash1 | p1 test_hash1 | p0 test_hash2 | pc test_hash2 | pb test_hash2 | pa (6 rows) --删除。 DROP TABLE test_hash1,test_hash2;
  • 列表分区示例 --创建列表分区表。 CREATE TABLE test_list ( NAME VARCHAR ( 50 ), area VARCHAR ( 50 ) ) PARTITION BY LIST (area) ( PARTITION p1 VALUES ('Beijing'), PARTITION p2 VALUES ('Shanghai'), PARTITION p3 VALUES ('Guangzhou'), PARTITION p4 VALUES ('Shenzhen'), PARTITION pdefault VALUES (DEFAULT) ); --插入数据。 INSERT INTO test_list VALUES ('bob', 'Shanghai'),('scott', 'Sichuan'); --查询分区数据。 SELECT * FROM test_list PARTITION (p2); name | area ------+---------- bob | Shanghai (1 row) SELECT * FROM test_list PARTITION (pdefault); name | area -------+--------- scott | Sichuan (1 row) --删除。 DROP TABLE test_list;
  • 参数说明 IF NOT EXISTS 如果已经存在相同名称的表,不抛出错误,而是发出一个notice,告知表已存在。 partition_table_name 分区表的名称。 取值范围:字符串,要符合标识符命名规范。 column_name 新表中要创建的字段名。 取值范围:字符串,要符合标识符命名规范。 data_type 字段的数据类型。 COLLATE collation COLLATE子句指定列的排序规则(该列必须是可排列的数据类型)。如果没有指定,则使用默认的排序规则。排序规则可以使用“SELECT * FROM pg_collation;”命令从pg_collation系统表中查询,默认的排序规则为查询结果中以default开始的行。 CONSTRAINT constraint_name 列约束或表约束的名称。可选的约束子句用于声明约束,新行或者更新的行必须满足这些约束才能成功插入或更新。 定义约束有两种方法: 列约束:作为一个列定义的一部分,仅影响该列。不支持为AUTO_INCREMENT | COMMENT 'string' | ENCRYPTED WITH ( COLUMN_ENCRYPTION_KEY = column_encryption_key, ENCRYPTION_TYPE = encryption_type_value )子句添加约束名。 表约束:不和某个列绑在一起,可以作用于多个列。在B模式数据库下(即sql_compatibility = 'B')constraint_name为可选项,在其他模式数据库下,必须加上constraint_name。 index_name 索引名。 index_name仅在B模式数据库下(即sql_compatibility = 'B')支持,其他模式数据库下不支持。 对于外键约束,constraint_name和index_name同时指定时,索引名为constraint_name。 对于唯一键约束,constraint_name和index_name同时指定时,索引名以index_name。 USING method 指定创建索引的方法。 取值范围参考参数说明中的USING method。 USING method仅在B模式数据库下(即sql_compatibility = 'B')支持,其他模式数据库下不支持。 在B模式下,未指定USING method时,对于ASTORE的存储方式,默认索引方法为btree;对于USTORE的存储方式,默认索引方法为ubtree。 ASC | DESC ASC表示指定按升序排序(默认)。DESC指定按降序排序。 ASC|DESC只在B模式数据库下(即sql_compatibility = 'B')支持,其他模式数据库不支持。 LIKE source_table [ like_option ... ] LIKE子句声明一个表,新表自动从这个表里面继承所有字段名及其数据类型和非空约束。 新表与原表之间在创建动作完毕之后是完全无关的。在原表做的任何修改都不会传播到新表中,并且也不可能在扫描原表的时候包含新表的数据。 字段缺省表达式只有在声明了INCLUDING DEFAULTS之后才会包含进来。缺省是不包含缺省表达式的,即新表中所有字段的缺省值都是NULL。 如果指定了INCLUDING UPDATE,则原表列的ON UPDATE CURRENT_TIMESTAMP属性会复制到新表列中。默认不复制该属性。 如果指定了INCLUDING GENERATED,则原表列的生成表达式会复制到新表中。默认不复制生成表达式。 非空约束将总是复制到新表中,CHECK约束则仅在指定了INCLUDING CONSTRAINTS的时候才复制,而其他类型的约束则永远也不会被复制。此规则同时适用于表约束和列约束。 被复制的列和约束并不使用相同的名称进行融合。如果明确的指定了相同的名称或者在另外一个LIKE子句中,将会报错。 如果指定了INCLUDING INDEXES,则原表上的索引也将在新表上创建,默认不建立索引。 如果指定了INCLUDING STORAGE,则原表列的STORAGE设置也将被复制,默认情况下不包含STORAGE设置。 如果指定了INCLUDING COMMENTS,则原表列、约束和索引的注释也会被复制过来。默认情况下,不复制源表的注释。 如果指定了INCLUDING RELOPTIONS,则原表的存储参数(即原表的WITH子句)也将复制至新表。默认情况下,不复制原表的存储参数。 如果指定了INCLUDING IDENTITY,则原表的identity功能会复制到新表中,并创建一个与原表SEQUENCE参数相同的SEQUENCE。默认情况下,不复制原表的identity功能。 如果指定了INCLUDING ILM,则源表的ILM策略信息会被复制到新表中,如果需要同时复制源表上的分区对象的ILM策略信息,需要同时指定INCLUDING PARTITION。 INCLUDING ALL包含了INCLUDING DEFAULTS、INCLUDING UPDATE、INCLUDING CONSTRAINTS、INCLUDING INDEXES、INCLUDING STORAGE、INCLUDING COMMENTS、INCLUDING PARTITION、INCLUDING RELOPTIONS、INCLUDING IDENTITY和INCLUDING ILM的内容。 “CREATE TABLE table_name LIKE source_table;”语法仅在B模式数据库(即sql_compatibility = 'B')下,且参数b_format_version值为5.7、b_format_dev_version值为s2时支持。 在B模式数据库下,且参数b_format_version值为5.7、b_format_dev_version值为s2时,不支持指定INCLUDING和EXCLUDING选项,缺省等同于指定INCLUDING ALL。 AUTO_INCREMENT [ = ] value 这个子句为自动增长列指定一个初始值,value必须为正整数,不得超过2127-1。 该子句仅在参数sql_compatibility='B'时有效。 COMMENT [ = ] 'string' COMMENT [ = ] 'string'子句表示给表添加注释。 在column_constraint中的COMMENT 'string'表示给列添加注释。 在table_constraint中的COMMENT 'string'表示给主键和唯一键对应的索引添加注释。 具体请参见:COMMENT [ = ] 'string'。 CHARACTER SET | CHARSET charset 指定表字段的字符集。单独指定时会将字段的字符序设置为指定的字符集的默认字符序。 仅在B模式数据库下(即sql_compatibility = 'B')支持该语法,其他模式数据库不支持。 COLLATE collation COLLATE子句指定列的排序规则(该列必须是可排列的数据类型)。如果没有指定,则使用默认的排序规则。排序规则可以使用“SELECT * FROM pg_collation”命令从pg_collation系统表中查询,默认的排序规则为查询结果中以default开始的行。对于B模式数据库下(即sql_compatibility = 'B')还支持utf8mb4_bin、utf8mb4_general_ci、utf8mb4_unicode_ci、binary、gbk_chinese_ci、gbk_bin、gb18030_chinese_ci、gb18030_bin字符序。 WITH ( storage_parameter [= value] [, ... ] ) 这个子句为表或索引指定一个可选的存储参数。参数的详细描述如下所示: FILLFACTOR 一个表的填充因子(fillfactor)是一个介于10~100的百分数。在Ustore存储引擎下,该值的默认值为92,在Astore存储引擎下默认值为100(完全填充)。如果指定了较小的填充因子,INSERT操作仅按照填充因子指定的百分率填充表页。每个页上的剩余空间将用于在该页上更新行,这就使得UPDATE有机会在同一页上放置同一条记录的新版本,这比把新版本放置在其他页上更有效。对于一个从不更新的表将填充因子设为100是最佳选择,但是对于频繁更新的表,选择较小的填充因子则更加合适。 取值范围:10~100 ORIENTATION 决定了表的数据的存储方式。 取值范围: ROW(缺省值):表的数据将以行式存储。 ORIENTATION不支持修改。 STORAGE_TYPE 指定存储引擎类型,该参数设置成功后就不再支持修改。 取值范围: USTORE,表示表支持Inplace-Update存储引擎。特别需要注意,使用USTORE表,必须要开启track_counts和track_activities参数,否则会引起空间膨胀。 ASTORE,表示表支持Append-Only存储引擎。 默认值: 不指定时,由参数enable_default_ustore_table决定存储引擎方式,默认是Inplace-Update存储。 COMPRESSION 该参数仅支持列存压缩。 segment 使用段页式的方式存储。本参数仅支持行存表。不支持临时表、unlog表。 取值范围:on/off 默认值:off statistic_granularity 记录该表在分析统计信息时的默认partition_mode,partition_mode说明详见参数说明,此参数对非分区表设置无效。 取值范围:见partition_mode取值范围。 默认值:AUTO。 autovacuum_enabled 自动清理功能是否对该表启用。 取值范围:on/off 默认值:on autovacuum_vacuum_threshold 自动清理功能中,指定在该表中触发VACUUM所需的更新或删除的最小元组数(仅对Astore表生效)。 取值范围:0-2147483647 默认值:-1,缺省时与GUC参数autovacuum_vacuum_threshold一致。 autovacuum_analyze_threshold 自动清理功能中,指定在该表中触发ANALYZE所需的插入、更新或删除的最小元组数。 取值范围:0-2147483647 默认值:-1,缺省时与GUC参数autovacuum_analyze_threshold一致。 autovacuum_vacuum_scale_factor 自动清理功能中,指定在该表中触发VACUUM所需的插入、更新或删除元组的比例(仅对Astore表生效)。 取值范围:0.0-100.0 默认值:-1,缺省时与GUC参数autovacuum_vacuum_scale_factor一致。 autovacuum_analyze_scale_factor 自动清理功能中,指定在该表中触发ANALYZE所需的插入、更新或删除元组的比例。 取值范围:0.0-100.0 默认值:-1,缺省时与GUC参数autovacuum_analyze_scale_factor一致。 autovacuum_freeze_min_age 自动清理功能中,指定在该表参数指定了一个行版本的最小年龄,超过这个年龄的行才会被冻结。 取值范围:0-1000000000 默认值:-1,缺省时与GUC参数vacuum_freeze_min_age一致。 autovacuum_freeze_max_age 自动清理功能中,该表pg_class.relfrozenxid字段在超过多少个事务后,就会强制执行VACUUM操作。即使自动清理被禁用,系统也会启动AUTOVACUUM进程。清理操作还允许从pg_clog/子目录中删除旧文件(仅对Astore表生效)。 取值范围:100000-2000000000 默认值:-1,缺省时与GUC参数autovacuum_freeze_max_age一致。 autovacuum_freeze_table_age 自动清理功能中,该表被标记为不需要自动清理时,它将保持不变的时间。(仅对Astore表生效)。 取值范围:0-2000000000 默认值:-1,缺省时与GUC参数vacuum_freeze_table_age一致。 [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )]] 创建新表时,可以调用ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW给行存添加高级压缩策略,分区继承表的策略。 AFTER n { day | month | year } OF NO MODIFICATION :表示n天/月/年没有修改的行。 ON ( EXPR ):行级表达式,用于判断行的冷热。 在ILM策略的ON(EXPR)行级表达式支持的函数中,有部分函数的输出可能会受兼容性参数影响。例如,upper函数在B兼容模式下设置b_format_version='5.7'和b_format_dev_version='s2'后,将无法转大写。 TABLESPACE tablespace_name 指定新表将要在tablespace_name表空间内创建。如果没有声明,将使用默认表空间。 PARTITION BY RANGE [COLUMNS] (partition_key) 创建范围分区。partition_key为分区键的名称。 COLUMNS关键字只能在sql_compatibility='B'时使用,“PARTITION BY RANGE COLUMNS” 语义同 “PARTITION BY RANGE”。 (1)对于从句是VALUES LESS THAN的语法格式: 对于从句是VALUES LESS THAN的语法格式,范围分区策略的分区键最多支持16列。 该情形下,分区键支持的数据类型为:TINYINT、SMALLINT、INTEGER、BIGINT、DECIMAL、NUMERIC、REAL、DOUBLE PRECISION、CHARACTER VARYING(n)、VARCHAR(n)、CHARACTER(n)、CHAR(n)、CHARACTER、CHAR、TEXT、NVARCHAR、NVARCHAR2、NAME、TIMESTAMP[(p)] [WITHOUT TIME ZONE]、TIMESTAMP[(p)] [WITH TIME ZONE]、DATE。 (2)对于从句是START END的语法格式: 对于从句是START END的语法格式,范围分区策略的分区键仅支持1列。 该情形下,分区键支持的数据类型为:TINYINT、SMALLINT、INTEGER、BIGINT、DECIMAL、NUMERIC、REAL、DOUBLE PRECISION、TIMESTAMP[(p)] [WITHOUT TIME ZONE]、TIMESTAMP[(p)] [WITH TIME ZONE]、DATE。 (3)对于指定了INTERVAL子句的语法格式: 对于指定了INTERVAL子句的语法格式,范围分区策略的分区键仅支持1列。 该情形下,分区键支持的数据类型为:TIMESTAMP[(p)] [WITHOUT TIME ZONE]、TIMESTAMP[(p)] [WITH TIME ZONE]、DATE。 PARTITION partition_name VALUES LESS THAN {( { partition_value | MAXVALUE } [,...] ) | MAXVALUE } 指定各分区的信息。partition_name为范围分区的名称。partition_value为范围分区的上边界,取值依赖于partition_key的类型。MAXVALUE表示分区的上边界,它通常用于设置最后一个范围分区的上边界。 每个分区都需要指定一个上边界。 分区上边界的类型应当和分区键的类型一致。 分区列表是按照分区上边界升序排列的,值较小的分区位于值较大的分区之前。 不在括号内的MAVALUE只能在sql_compatibility='B'时使用,并且只能有一个分区键。 PARTITION partition_name {START (partition_value) END (partition_value) EVERY (interval_value)} | {START (partition_value) END (partition_value|MAXVALUE)} | {START(partition_value)} | {END (partition_value | MAXVALUE)} 指定各分区的信息,各参数意义如下: partition_name:范围分区的名称或名称前缀,除以下情形外(假定其中的partition_name是p1),均为分区的名称。 若该定义是START+END+EVERY从句,则语义上定义的分区的名称依次为p1_1, p1_2, ...。例如对于定义“PARTITION p1 START(1) END(4) EVERY(1)”,则生成的分区是:[1, 2), [2, 3) 和 [3, 4),名称依次为p1_1, p1_2和p1_3,即此处的p1是名称前缀。 若该定义是第一个分区定义,且该定义有START值,则范围(MINVALUE, START)将自动作为第一个实际分区,其名称为p1_0,然后该定义语义描述的分区名称依次为p1_1, p1_2, ...。例如对于完整定义“PARTITION p1 START(1), PARTITION p2 START(2)”,则生成的分区是:(MINVALUE, 1), [1, 2) 和 [2, MAXVALUE),其名称依次为p1_0, p1_1和p2,即此处p1是名称前缀,p2是分区名称。这里MINVALUE表示最小值。 partition_value:范围分区的端点值(起始或终点),取值依赖于partition_key的类型,不可是MAXVALUE。 interval_value:对[START,END) 表示的范围进行切分,interval_value是指定切分后每个分区的宽度,不可是MAXVALUE;如果(END-START)值不能整除以EVERY值,则仅最后一个分区的宽度小于EVERY值。 MAXVALUE:表示最大值,它通常用于设置最后一个范围分区的上边界。 在创建分区表若第一个分区定义含START值,则范围(MINVALUE,START)将自动作为实际的第一个分区。 START END语法需要遵循以下限制: 每个partition_start_end_item中的START值(如果有的话,下同)必须小于其END值; 相邻的两个partition_start_end_item,第一个的END值必须等于第二个的START值; 每个partition_start_end_item中的EVERY值必须是正向递增的,且必须小于(END-START)值; 每个分区包含起始值,不包含终点值,即形如:[起始值,终点值),起始值是MINVALUE时则不包含; 一个partition_start_end_item创建的每个分区所属的TABLESPACE一样; partition_name作为分区名称前缀时,其长度不要超过57字节,超过时自动截断; 在创建、修改分区表时请注意分区表的分区总数不可超过最大限制(1048575); 在创建分区表时START END与LESS THAN语法不可混合使用。 即使创建分区表时使用START END语法,备份(gs_dump)出的SQL语句也是VALUES LESS THAN语法格式。 INTERVAL (interval_expr) [ STORE IN (tablespace_name [, ... ] ) ] 间隔分区定义信息。 interval_expr:自动创建分区的间隔,需要符合partition_key的字段类型,目前只支持数值类型和日期/时间类型,例如:1 day、1 month。 STORE IN (tablespace_name [, ... ] ):指定存放自动创建分区的表空间列表,如果有指定,则自动创建的分区从表空间列表中循环选择使用,否则使用分区表默认的表空间。 PARTITION BY LIST [COLUMNS] (partition_key) 创建列表分区。partition_key为分区键的名称。 COLUMNS关键字只能在sql_compatibility='B'时使用,“PARTITION BY LIST COLUMNS” 语义同 “PARTITION BY LIST”。 对于partition_key,列表分区策略的分区键最多支持16列。 对于从句是VALUES [IN] (list_values)的语法格式,list_values中包含了对应分区存在的键值,每个分区的键值数量不超过64个。 从句"VALUES IN"只能在sql_compatibility='B'时使用,语义同"VALUES"。 分区键支持的数据类型为:TINYINT、SMALLINT、INTEGER、BIGINT、NUMERIC、VARCHAR(n)、CHAR、BPCHAR、NVARCHAR、NVARCHAR2、TIMESTAMP[(p)] [WITHOUT TIME ZONE]、TIMESTAMP[(p)] [WITH TIME ZONE]、DATE。分区个数不能超过1048575个。 PARTITION BY HASH(partition_key) 创建哈希分区。partition_key为分区键的名称。 对于partition_key,哈希分区策略的分区键仅支持1列。 分区键支持的数据类型为:TINYINT、SMALLINT、INTEGER、BIGINT、NUMERIC、VARCHAR(n)、CHAR、BPCHAR、TEXT、NVARCHAR、NVARCHAR2、TIMESTAMP[(p)] [WITHOUT TIME ZONE]、TIMESTAMP[(p)] [WITH TIME ZONE]、DATE。分区个数不能超过1048575个。 PARTITION BY KEY(partition_key) 只能在sql_compatibility='B'时使用,语义同“PARTITION BY HASH(partition_key)”。 AUTOMATIC 创建新表时,若指定关键字AUTOMATIC,则开启列表分区的自动扩展功能,缺省时表示不开启自动扩展功能。只有列表分区可以使用自动扩展功能。 开启自动扩展功能后,当插入数据无法匹配到已有分区时,会自动创建一个单独的分区。 PARTITIONS integer 指定分区个数。 integer为分区数,必须为大于0的整数,且不得大于1048575。 当在RANGE和LIST分区后指定此子句时,必须显式定义每个分区,且定义分区的数量必须与integer值相等。只能在sql_compatibility='B'时在RANGE和LIST分区后指定此子句。 当在HASH和KEY分区后指定此子句时,若不列出各个分区定义,将自动生成integer个分区,自动生成的分区名为“p+数字”,数字依次为0到integer-1,分区的表空间默认为此表的表空间;也可以显式列出每个分区定义,此时定义分区的数量必须与integer值相等。若既不列出分区定义,也不指定分区数量,将创建唯一一个分区。 { ENABLE | DISABLE } ROW MOVEMENT 行迁移开关。 如果进行UPDATE操作时,更新了元组在分区键上的值,造成了该元组所在分区发生变化,就会根据该开关给出报错信息,或者进行元组在分区间的转移。 取值范围: ENABLE(缺省值):行迁移开关打开。 DISABLE:行迁移开关关闭。 在打开行迁移开关情况下,并发UPDATE、DELETE操作可能会报错,原因如下: UPDATE和DELETE操作对于旧数据都是标记为已删除。在打开行迁移开关情况下,如果更新分区键时,导致了跨分区更新,内核会把旧分区中旧数据标记为已删除,在新分区中新增加一条数据,无法通过旧数据找到新数据。 在UPDATE和UPDATE并发、DELETE和DELETE并发、UPDATE和DELETE并发三个并发场景下,如果并发操作同一行数据时,数据跨分区和非跨分区结果有不同的行为。 对于数据非跨分区结果,第一个操作执行完后,第二个操作不会报错。 如果第一个操作是UPDATE,第二个操作能成功找到最新的数据,之后对新数据操作。 如果第一个操作是DELETE,第二个操作看到当前数据已经被删除而且找不到最新数据,就终止操作。 对于数据跨分区结果,第一个操作执行完后,第二个操作会报错。 如果第一个操作是UPDATE,由于新数据在新分区中,第二个操作不能成功找到最新的数据,就无法操作,之后会报错。 如果第一个操作是DELETE,第二个操作看到当前数据已经被删除而且找不到最新数据,但无法判断删除旧数据的操作是UPDATE还是DELETE。如果是UPDATE,报错处理。如果是DELETE,终止操作。为了保持数据的正确性,只能报错处理。 如果是UPDATE和UPDATE并发,UPDATE和DELETE并发场景,需要串行执行才能解决问题,如果是DELETE和DELETE并发,关闭行迁移开关可以解决问题。
  • 功能描述 创建分区表。分区表是把逻辑上的一张表根据某种方案分成几张物理块进行存储,这张逻辑上的表称之为分区表,物理块称之为分区。分区表是一张逻辑表,不存储数据,数据实际是存储在分区上的。 常见的分区方案有范围分区(Range Partitioning)、间隔分区(Interval Partitioning)、哈希分区(Hash Partitioning)、列表分区(List Partitioning)、数值分区(Value Partitioning)等。目前行存表支持范围分区、间隔分区、哈希分区、列表分区。 范围分区是根据表的一列或者多列,将要插入表的记录分为若干个范围,这些范围在不同的分区里没有重叠。为每个范围创建一个分区,用来存储相应的数据。 范围分区的分区策略是指记录插入分区的方式。目前范围分区仅支持范围分区策略。 范围分区策略:根据分区键值将记录映射到已创建的某个分区上,如果可以映射到已创建的某一分区上,则把记录插入到对应的分区上,否则给出报错和提示信息。这是最常用的分区策略。 间隔分区是一种特殊的范围分区,相比范围分区,新增间隔值定义,当插入记录找不到匹配的分区时,可以根据间隔值自动创建分区。 间隔分区只支持基于表的一列分区,并且该列只支持TIMESTAMP[(p)] [WITHOUT TIME ZONE]、TIMESTAMP[(p)] [WITH TIME ZONE]、DATE数据类型。 间隔分区策略:根据分区键值将记录映射到已创建的某个分区上,如果可以映射到已创建的某一分区上,则把记录插入到对应的分区上,否则根据分区键值和表定义信息自动创建一个分区,然后将记录插入新分区中,新创建的分区数据范围等于间隔值。 哈希分区是根据表的一列,为每个分区指定模数和余数,将要插入表的记录划分到对应的分区中,每个分区所持有的行都需要满足条件:分区键的值除以为其指定的模数将产生为其指定的余数。 哈希分区策略:根据分区键值将记录映射到已创建的某个分区上,如果可以映射到已创建的某一分区上,则把记录插入到对应的分区上,否则返回报错和提示信息。 列表分区是根据表的一列,将要插入表的记录通过每一个分区中出现的键值划分到对应的分区中,这些键值在不同的分区里没有重叠。为每组键值创建一个分区,用来存储相应的数据。 列表分区策略:根据分区键值将记录映射到已创建的某个分区上,如果可以映射到已创建的某一分区上,则把记录插入到对应的分区上,否则给出报错和提示信息。 分区可以提供若干好处: 某些类型的查询性能可以得到极大提升。特别是表中访问率较高的行位于一个单独分区或少数几个分区上的情况下。分区可以减少数据的搜索空间,提高数据访问效率。 当查询或更新一个分区的大部分记录时,连续扫描该分区而不是访问整个表可以获得巨大的性能提升。 如果需要大量加载或者删除的记录位于单独的分区上,则可以通过直接读取或删除该分区以获得巨大的性能提升,同时还可以避免由于大量DELETE导致的VACUUM超载(哈希分区不支持删除分区)。
  • 语法格式 CREATE TABLE [ IF NOT EXISTS ] partition_table_name { ( [ { column_name data_type [ CHARACTER SET | CHARSET charset ] [ COLLATE collation ] [ column_constraint [ ... ] ] | table_constraint | LIKE source_table [ like_option [...] ] } [, ... ] ] ) | LIKE source_table } [ table_option [ [ , ] ... ] ] [ htap_option ] [ WITH ( {storage_parameter = value} [, ... ] ) ] [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )]] [ TABLESPACE tablespace_name ] PARTITION BY { {RANGE [COLUMNS] (partition_key) [ INTERVAL (interval_expr) [ STORE IN (tablespace_name [, ... ] ) ] ] [ PARTITIONS integer ] ( partition_less_than_item [, ... ] )} | {RANGE [COLUMNS] (partition_key) [ INTERVAL (interval_expr) [ STORE IN (tablespace_name [, ... ] ) ] ] [ PARTITIONS integer ] ( partition_start_end_item [, ... ] )} | {LIST [COLUMNS] (partition_key) [ AUTOMATIC ] [ PARTITIONS integer ] ( PARTITION partition_name VALUES [IN] (list_values) [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )]] [ { COLVIEW | NOCOLVIEW } [ PRIORITY { HIGH | LOW | NONE } ] ][TABLESPACE [=] tablespace_name ][, ... ])} | {{ HASH | KEY } (partition_key) [ PARTITIONS integer ] ( PARTITION partition_name [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )]] [ { COLVIEW | NOCOLVIEW } [ PRIORITY { HIGH | LOW | NONE } ] ][TABLESPACE [=] tablespace_name ][, ... ])} } [ { ENABLE | DISABLE } ROW MOVEMENT ]; 其中table_option为: { COMMENT [ = ] 'string' | AUTO_INCREMENT [ = ] value | [ DEFAULT ] CHARACTER SET | CHARSET [ = ] default_charset | [ DEFAULT ] COLLATE [ = ] default_collation | ENGINE [ = ] { InnoDB | 'InnoDB' | "InnoDB" } } 其中htap_option为: { COLVIEW [ PRIORITY { HIGH | LOW | NONE } ] | NOCOLVIEW [ PRIORITY { HIGH | LOW | NONE } ]} 列约束column_constraint: [ CONSTRAINT constraint_name ] { NOT NULL | NULL | CHECK ( expression ) | DEFAULT default_expr | ON UPDATE update_expr | GENERATED ALWAYS AS ( generation_expr ) [STORED] | GENERATED [ ALWAYS | BY DEFAULT [ ON NULL ] ] AS IDENTITY [ ( identity_options ) ] | AUTO_INCREMENT | COMMENT 'string' | COLVIEW | NOCOLVIEW | UNIQUE [KEY] index_parameters | PRIMARY KEY index_parameters | REFEREN CES reftable [ ( refcolumn ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE action ] [ ON UPDATE action ] } [ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ] 表约束table_constraint: [ CONSTRAINT [ constraint_name ] ] { CHECK ( expression ) | UNIQUE [ index_name ][ USING method ] ( { column_name [ ASC | DESC ] } [, ... ] ) index_parameters | PRIMARY KEY [ USING method ] ( { column_name [ ASC | DESC ] } [, ... ] ) index_parameters | FOREIGN KEY [ index_name ] ( column_name [, ... ] ) REFERENCES reftable [ ( refcolumn [, ... ] ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE action ] [ ON UPDATE action ] } [ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ] { [ COMMENT 'string' ] [ ... ] } like选项like_option: { INCLUDING | EXCLUDING } { DEFAULTS | GENERATED | CONSTRAINTS | INDEXES | STORAGE | COMMENTS | RELOPTIONS| UPDATE | IDENTITY | ILM | ALL } 索引存储参数index_parameters: [ WITH ( {storage_parameter = value} [, ... ] ) ] [ USING INDEX TABLESPACE tablespace_name ]
  • 注意事项 唯一约束和主键约束的约束键包含所有分区键将为约束创建LOCAL索引,否则创建GLOBAL索引。 目前哈希分区仅支持单列构建分区键,暂不支持多列构建分区键。 只需要有间隔分区表的INSERT权限,往该表INSERT数据时就可以自动创建分区。 对于分区表PARTITION FOR (values)语法,values只能是常量。 对于分区表PARTITION FOR (values)语法,values在需要数据类型转换时,建议使用强制类型转换,以防隐式类型转换结果与预期不符。 分区数最大值为1048575个,一般情况下业务不可能创建这么多分区,这样会导致内存不足。应参照参数local_syscache_threshold的值合理创建分区,分区表使用内存大致为(分区数 * 3 / 1024)MB。理论上分区占用内存不允许大于local_syscache_threshold的值,同时还需要预留部分空间以供其他功能使用。 考虑性能影响,一般建议单表最大分区数不超过2000,子分区数 *(LOCAL索引个数 + 1) 不超过10000。 当分区数太多导致内存不足时,会间接导致性能急剧下降。 指定分区语句目前不能走全局索引扫描。 不支持XML类型数据作为分区键、二级分区键。 在为数据对象增加或者变更ILM策略的时候,如果追加了行级表达式,需要注意行表达式目前只支持白名单中列出的函数。具体白名单函数列表参考行表达式函数白名单。 在ILM策略的ON(EXPR)行级表达式支持的函数中,有部分函数的输出可能会受兼容性参数影响。例如,upper函数在B兼容模式下设置b_format_version='5.7'和b_format_dev_version='s2'后,将无法转大写。
  • PG_LARGEOBJECT_METADATA PG_LARGEOBJECT_METADATA系统表存储与大数据相关的元数据。实际的大对象数据存储在PG_LARGEOBJECT里。 表1 PG_LARGEOBJECT_METADATA字段 名称 类型 引用 描述 oid oid - 行标识符(隐含属性,必须明确选择)。 lomowner oid PG_AUTHID.oid 大对象的所有者。 lomacl aclitem[] - 访问权限。 父主题: 其他系统表
  • 示例 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 39 40 41 42 43 44 45 --删除员工表hr.staffs中某部门的所有员工,如果该部门中已没有员工,则在部门表hr.department中删除该部门。 gaussdb=# CREATE OR REPLACE PROCEDURE proc_cursor3() AS DECLARE V_DEPTNO NUMBER(4) := 100; BEGIN DELETE FROM hr.staffs WHERE section_id = V_DEPTNO; --根据游标状态做进一步处理 IF SQL%NOTFOUND THEN DELETE FROM hr.department WHERE section_id = V_DEPTNO; END IF; END; / CREATE PROCEDURE gaussdb=# CALL proc_cursor3(); proc_cursor3 -------------- (1 row) --删除存储过程和临时表 gaussdb=# DROP PROCEDURE proc_cursor3; DROP PROCEDURE -- 如果需要SELECT隐式游标并发执行,需要打开以下GUC参数 gaussdb=# SET query_dop=4; SET gaussdb=# SET sql_beta_feature= 'enable_plsql_smp'; -- 选择员工表hr.staffs中工号为1的员工姓名 gaussdb=# CREATE OR REPLACE PROCEDURE prc_cursor_smp() AS name varchar(20); BEGIN SELECT first_name FROM hr.staffs WHERE staff_id = 1 INTO name; dbe_output.print_line('result is: '|| name); END; / CREATE PROCEDURE -- 执行存储过程 gaussdb=# CALL prc_cursor_smp(); result is: Tom prc_cursor_smp ---------------- (1 row)
  • 简介 对于隐式游标的操作,如定义、打开、取值及关闭操作,都由系统自动地完成,无需用户进行处理。用户只能通过隐式游标的相关属性,来完成相应的操作。在隐式游标的工作区中,所存放的数据是最新处理的一条SQL语句所包含的数据,与用户自定义的显式游标无关。 格式调用为: SQL% INSERT、UPDATE、DELETE和SELECT语句中不必明确定义游标。 兼容A模式下,GUC参数behavior_compat_options为compat_cursor时,隐式游标跨存储过程有效。 打开SMP相关GUC参数(设置GUC参数query_dop为大于1的值,plsql_beta_feature = 'enable_plsql_smp')后,游标中不涉及INSERT、UPDATE和DELETE的查询语句可以选择SMP执行。 隐式游标属性不受commit\rollback操作影响。设置GUC参数behavior_compat_options='compat_cursor'时,隐式游标属性受savepoint\commit\rollback操作影响,将重置相关属性为默认值。
  • 注意事项 GaussDB 不仅支持通过索引语法(圆括号)访问数组元素,还提供了多种专用函数(如EXTEND、COUNT、FIRST、LAST、PRIOR、EXISTS、TRIM、NEXT和DELETE)以实现灵活的数组操作与管理。 在GaussDB中,数组会自动增长,访问越界会返回一个NULL,不会报错,打开varray_compat参数后,会增加对下标的检查,访问越界会进行报错。 在存储过程中定义的数组类型,其作用域仅在该存储过程中。 size信息会记录到pg_type系统表中,打开varray_compat参数后,对数组的操作都会进行长度以及下标的检查,未开参数时则不使用size信息。 data_type也可以为存储过程中定义的record类型(匿名块不支持)、集合类型,但不可以为存储过程中定义的数组类型、游标类型。 data_type为集合类型时,不支持使用多维数组。 array类型的构造器仅支持在A兼容模式下使用。 array类型的构造器不支持作为函数或存储过程参数的默认值。 当数组的元素是集合类型并且数组的data_type为VARCHAR、NUMERIC等可以定义长度和精度的类型时,要校验该数组的元素长度或者将元素转换成对应的精度,需要设置GUC参数behavior_compat_options启用tableof_elem_constraints选项。 设置GUC参数behavior_compat_options启用varray_compat选项后,在匿名块中定义的数组类型,匿名块执行ROLLBACK或发生EXCEPTION后,数组类型将无法继续使用。 设置enable_recordtype_check_strict参数值为on后,成员是record类型,且record类型有列具有NOT NULL属性或DEFAULT属性,在存储过程或PACKAGE编译时会报错。 存储过程中如果有DML语句(SELECT、UPDATE、INSERT和DELETE),DML语句推荐使用中括号来访问数组元素,使用小括号默认识别为数组访问,若数组不存在,则识别为函数表达式。 如果CLOB类型大于1GB,则存储过程中的table of类型、record类型、clob作为出入参、游标和RAISE INFO等功能不支持。 不支持NOT NULL语法。
  • 示例 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 39 40 41 42 43 44 45 46 47 48 49 50 51 -- 演示在存储过程中对数组进行操作。 gaussdb=# CREATE OR REPLACE PROCEDURE array_proc AS DECLARE TYPE ARRAY_INTEGER IS VARRAY(1024) OF INTEGER; --定义数组类型。 ARRINT ARRAY_INTEGER := ARRAY_INTEGER(); --声明数组类型的变量。 BEGIN ARRINT.extend(10); FOR I IN 1..10 LOOP ARRINT(I) := I; END LOOP; DBE_OUTPUT.PRINT_LINE(ARRINT.COUNT); DBE_OUTPUT.PRINT_LINE(ARRINT(1)); DBE_OUTPUT.PRINT_LINE(ARRINT(10)); DBE_OUTPUT.PRINT_LINE(ARRINT(ARRINT.FIRST)); DBE_OUTPUT.PRINT_LINE(ARRINT(ARRINT.LAST)); DBE_OUTPUT.PRINT_LINE(ARRINT(ARRINT.NEXT(ARRINT.FIRST))); DBE_OUTPUT.PRINT_LINE(ARRINT(ARRINT.PRIOR(ARRINT.LAST))); ARRINT.TRIM(); IF ARRINT.EXISTS(10) THEN DBE_OUTPUT.PRINT_LINE('Exist 10th element'); ELSE DBE_OUTPUT.PRINT_LINE('Not exist 10th element'); END IF; DBE_OUTPUT.PRINT_LINE(ARRINT.COUNT); DBE_OUTPUT.PRINT_LINE(ARRINT(ARRINT.FIRST)); DBE_OUTPUT.PRINT_LINE(ARRINT(ARRINT.LAST)); ARRINT.DELETE(); END; / -- 调用该存储过程显示结果。 gaussdb=# CALL array_proc(); 10 1 10 1 10 2 9 Not exist 10th element 9 1 9 array_proc ------------ (1 row) -- 删除存储过程。 gaussdb=# DROP PROCEDURE array_proc;
  • ledger_hist_repair(text, text) 描述:修复指定防篡改用户表对应的历史表hash值,使之与用户表hash一致,返回hash差值。 参数类型:text 返回值类型:hash16 示例: 1 2 3 4 5 gaussdb=# SELECT ledger_hist_repair('ledgernsp','tab'); ledger_hist_repair -------------------- 0000000000000000 (1 row)
  • ledger_gchain_repair(text, text) 描述:修复指定防篡改用户表在全局历史表中的relhash,使之与其历史表hash一致,返回指定表的hash总和。 参数类型:text 返回值类型:hash16 示例: 1 2 3 4 5 gaussdb=# SELECT ledger_gchain_repair('ledgernsp','tab'); ledger_gchain_repair ---------------------- da30c1260af5be50 (1 row)
  • ledger_hist_archive(text, text) 描述:归档指定防篡改用户表对应的历史表至审计日志目录中hist_back文件夹下。如果用户历史表名称中带有'/'符号,归档所生成的文件名中将会把'/'替换为'_'。 参数类型:text 返回值类型:Boolean 示例: 1 2 3 4 5 gaussdb=# SELECT ledger_hist_archive('ledgernsp','tab'); ledger_hist_archive --------------------- t (1 row)
  • ledger_hist_check(text, text) 描述:校验指定防篡改用户表的表级数据hash值与其对应历史表hash一致性。 参数类型:text 返回值类型:Boolean 示例: 1 2 3 4 5 6 7 8 9 10 11 --创建schema。 gaussdb=# CREATE SCHEMA ledgernsp WITH BLOCKCHAIN; --创建表。 gaussdb=# CREATE TABLE ledgernsp.tab(a int, b text); --插入数据。 gaussdb=# INSERT INTO ledgernsp.tab values(generate_series(1, 10000), 'test'); gaussdb=# SELECT ledger_hist_check('ledgernsp','tab'); ledger_hist_check ------------------- t (1 row)
  • ledger_gchain_check(text, text) 描述:校验指定防篡改用户表对应的历史表hash与全局历史表对应的relhash一致性。 参数类型:text 返回值类型:Boolean 示例: 1 2 3 4 5 gaussdb=# SELECT ledger_gchain_check('ledgernsp','tab'); ledger_gchain_check --------------------- t (1 row)
  • GS_SEG_SEGMENTS GS_SEG_SEGMENTS查看所有表空间的段信息,包含表、索引、TOAST、TOAST INDEX段及fsm fork、vm fork段。只支持管理员权限用户查询。 表1 GS_SEG_SEGMENTS字段 名称 类型 描述 node_name text 节点名称。 schema_name name 段对象所属的名称空间。 segment_name name 段对象名。来源:pg_class、pg_partition.relname。 partition_name name 段对象分区名称,非分区为NULL。来源:pg_partition.relname。 forknum integer 段对象的分支类型。取值范围: 0表示main fork。 1表示fsm fork。 2表示vm fork。 segment_type text 段对象类型。取值范围: table:段页式普通表。 table partition:段页式分区表(主表和子表)、段页式二级分区表(其中的一级分区表)。 table subpartition:段页式二级分区表(其中的顶层节点表和二级分区表)。 index:段页式普通表索引。 index partition:段页式分区表、二级分区表的索引。 global partition index:段页式分区表、二级分区表的全局索引。 toast:段页式toast表。 toast index:段页式toast表的索引。 tablespace_name name 段对象所属的表空间。 bucketnode integer 0~1023表示hashbucket表的bucketnode。 1024表示段页式普通表的bucketnode。 1025表示段页式全局临时表的bucketnode。 1026表示段页式unlogged表的bucketnode。 1027表示段页式本地临时表的bucketnode。 head_block_id bigint 段头页面号。 contents text 数据文件的存储内容。取值范围: permanent:永久。 unlogged:不记录日志。 temporary:全局临时。 temporary2:本地临时。 table_name name 段对象所属的基表名。 blocks bigint 段对象的逻辑页面数。 total_blocks bigint 段对象的物理页面数。 extents integer 段对象的逻辑扩展数。 total_extents integer 段对象的物理扩展数。 head_lsn text 段头lsn标识。 level0_slots bigint[] 段扩展映射level0槽位数组。 level1_slots bigint[] 段扩展映射level1槽位数组。 fork_head bigint[] 段对象的分支段头数组。 父主题: 段页式存储
  • 删除表中数据 在使用表的过程中,可能会需要删除已过期的数据,删除数据必须从表中整行删除。 SQL不能直接访问独立的行,只能通过声明被删除行匹配的条件进行。如果表中有一个主键,用户可以指定准确的行。用户可以删除匹配条件的一组行或者一次删除表中的所有行。 执行DELETE命令删除行,如删除表customer_t1中所有c_customer_sk为3869的记录。 1 gaussdb=# DELETE FROM customer_t1 WHERE c_customer_sk = 3869; 执行如下命令,会删除表中所有的行。 1 gaussdb=# DELETE FROM customer_t1; 或: 1 gaussdb=# TRUNCATE TABLE customer_t1; 全表删除的场景下,建议使用TRUNCATE,不建议使用DELETE。 删除创建的表。 1 gaussdb=# DROP TABLE customer_t1; 父主题: 管理表
  • 示例 --向gs_global_config系统表中插入单个弱口令。 gaussdb=# CREATE WEAK PASSWORD DICTIONARY WITH VALUES ('********'); --查看gs_global_config系统表现有的弱口令。 gaussdb=# SELECT * FROM gs_global_config WHERE NAME LIKE 'weak_password'; name | value -----------------+-------------- weak_password | ******** (1 rows) --清空gs_global_config系统表中所有弱口令。 gaussdb=# DROP WEAK PASSWORD DICTIONARY; --查看现有弱口令。 gaussdb=# SELECT * FROM gs_global_config WHERE NAME LIKE 'weak_password'; name | value ------+------- (0 rows)
  • STATIO_ALL_SEQUENCES STATIO_ALL_SEQUENCES视图包含数据库中每个序列的每一行,显示特定序列关于I/O的统计,如表1所示。 表1 STATIO_ALL_SEQUENCES字段 名称 类型 描述 relid oid 序列OID。 schemaname name 序列中模式名。 relname name 序列名。 blks_read bigint 从序列中读取的磁盘块数。 blks_hit bigint 序列中缓存命中数。 父主题: Cache/IO
  • GS_ LOG ICAL_CLASS GS_LOGICAL_CLASS系统表记录逻辑解码需要使用的数据库对象信息及其之间的关系。 表1 GS_LOGICAL_CLASS字段 字段名称 字段类型 说明 relname name 表名。 relnamespace oid 命名空间OID。 relpersistence "char" 表的持久性(例如,'p' 表示永久表)。 relkind "char" 表的类型(例如,'r' 表示关系)。 relnatts smallint 表中的列数。 relhaspkey bool 表是否有(或曾经有过)主键索引。 relcmprs tinyint 表的行的压缩属性。 relreplident "char" Replica identity复制方式。 spacenode oid 表空间OID。 dbnode oid 数据库OID。 relnode oid 表对应的物理存储文件的标识符。 createtime timestamp with time zone 插入元组的时间戳。 csnmin bigint 插入元组时的 CS N(提交序列号)。 csnmax bigint 更新或删除元组时的 CSN。 originid integer 元组的来源标识符。 relid oid 关系标识符(表OID)。 relowner oid 表所有者的标识符。 reltoastrelid oid TOAST 表OID(如果存在)。 relhasoids boolean 指示表是否具有 OID(对象标识符)列。 relam oid 指示表使用的索引方法的标识符。 reloptions text[] 保存表的附加选项,以文本格式存储。 relbucket oid 指示表所属的哈希分区桶的标识符。 parttype "char" 指示该表是否是分区表,'p'表示为分区表,'n'表示为非分区表。 父主题: 逻辑解码
  • 算子说明 在索引扫描中,数据库使用语句指定的索引列,通过遍历索引树来检索行。数据库为一个值扫描索引时,发生n次I/O 就能找到其要查找的值,其中n即B-tree索引的高度。Index Scan通常用于检索表数据,数据库以轮流方式先读取索引块,找到对应的索引键值,然后通过索引键对应的tid去读取相应的表元组。在数据量大,但是查询结果集较小的场景下,Index Scan的效率往往高于Seq Scan。
  • 典型场景 查询某个表中的特定行:当查询语句中包含WHERE子句时,如果WHERE子句中的条件可以通过索引列进行匹配,那么GaussDB就可能会使用Index Scan来查找符合条件的行。 排序:当查询语句中包含ORDER BY子句时,如果ORDER BY子句中的列可以通过索引进行排序,那么GaussDB就可能会使用Index Scan来进行排序操作。 聚合:当查询语句中包含GROUP BY子句时,如果GROUP BY子句中的列可以通过索引进行分组,那么GaussDB就可能会使用Index Scan来进行聚合操作。 连接:当查询语句中包含JOIN操作时,如果JOIN操作中的列可以通过索引进行匹配,那么GaussDB就可能会使用Index Scan来进行连接操作。
  • PG_SETTINGS PG_SETTINGS视图显示数据库运行时参数的相关信息。 表1 PG_SETTINGS字段 名称 类型 描述 name text 参数名称。 setting text 参数当前值。 unit text 参数的单位。 category text 参数的逻辑组。 short_desc text 参数的简单描述。 extra_desc text 参数的详细描述。 context text 设置参数值的上下文,包括internal、postmaster、sighup、backend、superuser、user、pdb sighup。 vartype text 参数类型,包括bool、enum、integer、real、string。 source text 参数的赋值方式。 min_val text 参数最小值。如果参数类型不是数值型,那么该字段值为null。 max_val text 参数最大值。如果参数类型不是数值型,那么该字段值为null。 enumvals text[] enum类型参数合法值。如果参数类型不是enum型,那么该字段值为null。 boot_val text 数据库启动时参数默认值。 reset_val text 数据库重置时参数默认值。 sourcefile text 设置参数值的配置文件。如果参数不是通过配置文件赋值,那么该字段值为null。 sourceline integer 设置参数值的配置文件的行号。如果参数不是通过配置文件赋值,那么该字段值为null。 在A兼容模式下,PG_SETTINGS字段不存在查询结果为空字符串,而其他兼容模式PG_SETTINGS字段可能存在查询结果为空字符串而非null值。 父主题: 其他系统视图
  • GLOBAL_STAT_XACT_USER_FUNCTIONS 显示数据库各节点,本事务内函数执行的统计信息(不同节点下的数据不进行汇总求和),如表1所示。 表1 GLOBAL_STAT_XACT_USER_FUNCTIONS字段 名称 类型 描述 node_name name 节点名称。 funcid oid 函数标识。 schemaname name 函数所在的Schema名。 funcname name 函数名称。 calls bigint 函数被调用的次数。 total_time double precision 此函数及其调用的所有其他函数所花费的总时间。 self_time double precision 在此函数本身中花费的时间(不包括它调用的其他函数)。 父主题: Object
  • JDBC兼容性包 从驱动包中获取。包名为GaussDB-Kernel_数据库版本号_操作系统版本号_64bit_Jdbc.tar.gz。 解压后JDBC的驱动jar包: gsjdbc4.jar:主类名为“org.postgresql.Driver”,数据库连接的URL前缀为“jdbc:postgresql”,该驱动包适用于从PostgreSQL迁移业务的场景,驱动类和加载路径与迁移前保持一致,但接口支持情况不完全一致,未支持的接口需要业务侧进行调整。 gsjdbc200.jar:该驱动包适用于从Gauss200迁移业务的场景,驱动类和加载路径与迁移前保持一致,但接口支持情况不完全一致,未支持的接口需要业务侧进行调整。 opengaussjdbc.jar:主类名为“com.huawei.opengauss.jdbc.Driver”,数据库连接的URL前缀为“jdbc:opengauss”。如果遇到同一JVM进程内需要同时访问PostgreSQL及GaussDB的场景,请使用此驱动包。 各驱动包只是驱动类加载路径和url前缀不同,接口功能相同。 不能使用gsjdbc4的驱动包操作PostgreSQL数据库,虽然部分版本能够建连成功,但部分接口行为与PostgreSQL JDBC不同,可能导致未知错误。 不能使用PostgreSQL的驱动包操作 GaussDB数据库 ,虽然部分版本能够建连成功,但部分接口行为与GaussDB JDBC不同,可能导致未知错误。
  • ecpg兼容 ecpg提供使用URL连接方式的连接语法,不仅支持“gaussdb”,还兼容支持“postgresql”。 连接语法: EXEC SQL CONNECT TO target [AS connection-name] [USER user-name]; 其中target支持“postgresql”方式如下: tcp:postgresql://hostname[:port][/dbname][?options] unix:postgresql://hostname[:port][/dbname][?options]
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全