华为云用户手册

  • PGXC_VARIABLE_INFO PGXC_VARIABLE_INFO视图用于查询集群中所有节点的xid、oid的状态。该视图只有monitor admin和sysadmin权限可以查看。只能在CN上查询,不支持execute direct on (dn) 'select * from PGXC_VARIABLE_INFO';语句。具体字段信息如表1所示。 表1 PGXC_VARIABLE_INFO字段 名称 类型 描述 node_name text 节点名称。 next_oid oid 该节点下一次生成的oid。 next_xid xid 该节点下一次生成的事务号。 oldest_xid xid 该节点最旧的事务号。 xid_vac_limit xid 强制autovacuum的临界点。 oldest_xid_db oid 该节点datafrozenxid最小的数据库oid。 last_extend_csn_logpage xid 最后一次扩展csnlog的页面号。 start_extend_csn_logpage xid csnlog扩展的起始页面号。 next_commit_seqno xid 该节点下次生成的csn号。 latest_completed_xid xid 该节点提交或者回滚后节点上的最新事务号。 startup_max_xid xid 该节点关机前的最后一个事务号。 父主题: 其他系统视图
  • 范围分区 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_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;
  • 哈希分区 --创建哈希分区表,指定分区数。 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;
  • 参数说明 IF NOT EXISTS 如果已经存在相同名称的表,不抛出错误,而是发出一个notice,告知表已存在。 partition_table_name 分区表的名称。 取值范围:字符串,要符合标识符命名规范。 column_name 新表中要创建的字段名。 取值范围:字符串,要符合标识符命名规范。 data_type 字段的数据类型。 COLLATE collation COLLATE子句指定列的排序规则(该列必须是可排列的数据类型)。如果没有指定,则使用默认的排序规则。排序规则可以使用“SELECT * FROM pg_collation;”命令从pg_collation系统表中查询,默认的排序规则为查询结果中以default开始的行。 CONSTRAINT constraint_name 列约束或表约束的名称。可选的约束子句用于声明约束,新行或者更新的行必须满足这些约束才能成功插入或更新。排序规则可以使用“SELECT * FROM pg_collation”命令从pg_collation系统表中查询,默认的排序规则为查询结果中以default开始的行。 定义约束有两种方法: 列约束:作为一个列定义的一部分,仅影响该列。 表约束:不和某个列绑在一起,可以作用于多个列。 LIKE source_table [ like_option ... ] LIKE子句声明一个表,新表自动从这个表里面继承所有字段名及其数据类型和非空约束。 新表与原表之间在创建动作完毕之后是完全无关的。在原表做的任何修改都不会传播到新表中,并且也不可能在扫描原表的时候包含新表的数据。 字段缺省表达式只有在声明了INCLUDING DEFAULTS之后才会包含进来。缺省是不包含缺省表达式的,即新表中所有字段的缺省值都是NULL。 非空约束将总是复制到新表中,CHECK约束则仅在指定了INCLUDING CONSTRAINTS的时候才复制,而其他类型的约束则永远也不会被复制。此规则同时适用于表约束和列约束。 被复制的列和约束并不使用相同的名称进行融合。如果明确的指定了相同的名称或者在另外一个LIKE子句中,将会报错。 如果指定了INCLUDING UPDATE,则原表列的ON UPDATE CURRENT_TIMESTAMP属性会复制到新表列中。默认不复制该属性。 如果指定了INCLUDING INDEXES,则原表上的索引也将在新表上创建,默认不建立索引。 如果指定了INCLUDING STORAGE,则原表列的STORAGE设置也将被复制,默认情况下不包含STORAGE设置。 如果指定了INCLUDING COMMENTS,则原表列、约束和索引的注释也会被复制过来。默认情况下,不复制原表的注释。 如果指定了INCLUDING RELOPTIONS,则原表的存储参数(即源表的WITH子句)也将复制至新表。默认情况下,不复制原表的存储参数。 如果指定了INCLUDING DISTRIBUTION,则新表将复制原表的分布信息,包括分布类型和分布列,同时新表将不能再使用DISTRIBUTE BY子句。默认情况下,不复制原表的分布信息。 INCLUDING ALL是INCLUDING DEFAULTS、INCLUDING UPDATE、INCLUDING CONSTRAINTS、INCLUDING INDEXES、INCLUDING STORAGE、INCLUDING COMMENTS、INCLUDING RELOPTIONS和INCLUDING DISTRIBUTION的简写形式。 CREATE TABLE table_name LIKE source_table;语法仅在MYSQL模式数据库(即sql_compatibility = 'MYSQL')下,且参数b_format_version值为5.7、b_format_dev_version值为s2时支持。 在MYSQL模式数据库下,且参数b_format_version值为5.7、b_format_dev_version值为s2时,不支持指定INCLUDING和EXCLUDING选项,缺省等同于指定INCLUDING ALL。 AUTO_INCREMENT [ = ] value 这个子句为自动增长列指定一个初始值,value必须为正数,不得超过2127-1。 该子句仅在参数sql_compatibility='MYSQL'时有效。 COMMENT [ = ] 'string' COMMENT [ = ] 'string'子句表示给表添加注释。 在column_constraint中的COMMENT 'string'表示给列添加注释。 在table_constraint中的COMMENT 'string'表示给主键和唯一键对应的索引添加注释。 具体请参见:COMMENT [ = ] 'string' CHARACTER SET | CHARSET charset 指定表字段的字符集。单独指定时会将字段的字符序设置为指定的字符集的默认字符序。 仅在MYSQL模式数据库下(即sql_compatibility = 'MYSQL')支持该语法,其他模式数据库不支持。 COLLATE collation COLLATE子句指定列的排序规则(该列必须是可排列的数据类型)。如果没有指定,则使用默认的排序规则。排序规则可以使用“SELECT * FROM pg_collation”命令从pg_collation系统表中查询,默认的排序规则为查询结果中以default开始的行。对于MYSQL模式数据库下(即sql_compatibility = 'MYSQL')还支持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之间的数字。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决定存储引擎方式,默认是Append-Only存储。 COMPRESSION 行存表不支持压缩。 statistic_granularity 记录该表在分析统计信息时的默认partition_mode,partition_mode说明详见ANALYZE | ANALYSE参数说明,此参数对非分区表设置无效。 取值范围:见partition_mode取值范围。 默认值:AUTO。 enable_tde 指定该表为加密表。数据库会自动将加密表中的数据先加密再存储。使用该参数前,请确保已通过GUC参数enable_tde开启透明加密功能,并通过GUC参数tde_key_info设置访问密钥服务的信息,在《特性指南》中“透明数据加密”章节可获取该参数的详细使用方法。本参数仅支持行存表、段页式表、hashbucket表、临时表和unlogged表。 取值范围:on/off。设置enable_tde=on时,key_type、tde_cmk_id、dek_cipher参数由数据库自动生成,用户无法手动指定或更改。 默认值:off encrypt_algo 指定加密表的加密算法,需与enable_tde结合使用。 取值范围:字符串,有效值为:AES_128_CTR,SM4_CTR。 默认值:不设置enable_tde选项时默认为空;设置enable_tde选项设置时,默认为AES_128_CTR。 dek_cipher 数据密钥的密文。用户为表设置enable_tde参数后,数据库自动生成数据密钥。 取值范围:字符串 默认值:空 key_type 主密钥的类型。用户为表设置enable_tde参数后,数据库自动从GUC参数tde_key_info中获取主密钥的类型。 取值范围:字符串 默认值:空 cmk_id 主密钥的ID。用户为表设置enable_tde参数后,数据库自动从GUC参数tde_key_info中获取主密钥的ID。 取值范围:字符串 默认值:空 hashbucket 创建hash bucket存储。本参数仅支持行存表和行存range表。 取值范围:on/off 默认值:off 当前版本hashbucket表相关DDL操作性能受限,不建议频繁对hashbucket表进行DDL操作。 COMPRESS / NOCOMPRESS 创建一个新表时,需要在创建表语句中指定关键字COMPRESS,这样,当对该表进行批量插入时就会触发压缩特性。该特性会在页范围内扫描所有元组数据,生成字典、压缩元组数据并进行存储。指定关键字NOCOMPRESS则不对表进行压缩。 缺省值为NOCOMPRESS,即不对元组数据进行压缩。行存表不支持压缩。 TABLESPACE tablespace_name 指定新表将要在tablespace_name表空间内创建。如果没有声明,将使用默认表空间。 DISTRIBUTE BY 指定表如何在节点之间分布或者复制。 取值范围及详细信息见•DISTRIBUTE BY一节。 TO { GROUP groupname | NODE ( nodename [, ... ] ) } TO GROUP指定创建表所在的Node Group用。TO NODE主要供内部扩容工具使用,一般用户不应该使用。 PARTITION BY RANGE [COLUMNS] (partition_key) 创建范围分区。partition_key为分区键的名称。 COLUMNS关键字只能在sql_compatibility='MYSQL'时使用,“PARTITION BY RANGE COLUMNS” 语义同 “PARTITION BY RANGE”。 (1)对于从句是VALUES LESS THAN的语法格式: 对于从句是VALUE LESS THAN的语法格式,范围分区策略的分区键最多支持16列。 该情形下,分区键支持的数据类型为:TINYINT、SMALLINT、INTEGER、BIGINT、DECIMAL、NUMERIC、REAL、FLOAT4、FLOAT8、DOUBLE PRECISION、CHARACTER VARYING(n)、VARCHAR(n)、CHARACTER(n)、CHAR(n)、CHARACTER、CHAR、TEXT、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、FLOAT4、FLOAT8、DOUBLE PRECISION、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='MYSQL'时使用,并且只能有一个分区键。 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语法格式。 PARTITION BY LIST [COLUMNS] (partition_key) 创建列表分区。partition_key为分区键的名称。 COLUMNS关键字只能在sql_compatibility='MYSQL'时使用,“PARTITION BY LIST COLUMNS” 语义同 “PARTITION BY LIST”。 对于partition_key,列表分区策略的分区键最多支持16列。 对于从句是VALUES [IN] (list_values)的语法格式,list_values中包含了对应分区存在的键值,每个分区的键值数量不超过64个。 从句"VALUES IN"只能在sql_compatibility='MYSQL'时使用,语义同"VALUES"。 分区键支持的数据类型为:TINYINT、SMALLINT、INTEGER、BIGINT、NUMERIC、VARCHAR(n)、CHAR、BPCHAR、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、NVARCHAR2、TIMESTAMP[(p)] [WITHOUT TIME ZONE]、TIMESTAMP[(p)] [WITH TIME ZONE]、DATE。分区个数不能超过1048575个。 PARTITIONS integer 指定分区个数。 integer为分区数,必须为大于0的整数,且不得大于1048575。 当在RANGE和LIST分区后指定此子句时,必须显式定义每个分区,且定义分区的数量必须与integer值相等。只能在sql_compatibility='MYSQL'时在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并发,关闭行迁移开关可以解决问题。
  • 注意事项 唯一约束和主键约束的约束键包含所有分区键将为约束创建LOCAL索引,否则创建GLOBAL索引。 目前哈希分区仅支持单列构建分区键,暂不支持多列构建分区键。 对于分区表PARTITION FOR (values)语法,values只能是常量。 对于分区表PARTITION FOR (values)语法,values在需要数据类型转换时,建议使用强制类型转换,以防隐式类型转换结果与预期不符。 分区数最大值为1048575个,一般情况下业务不可能创建这么多分区,这样会导致内存不足。应参照参数local_syscache_threshold的值合理创建分区,分区表使用内存大致为(分区数 * 3 / 1024)MB。理论上分区占用内存不允许大于local_syscache_threshold的值,同时还需要预留部分空间以供其他功能使用。 考虑性能影响,一般建议单表最大分区数不超过2000,子分区数 *(LOCAL索引个数 + 1) 不超过10000。 当分区数太多导致内存不足时,会间接导致性能急剧下降。 指定分区语句目前不能走全局索引扫描。 不支持XML类型数据作为分区键、二级分区键。 对于分区表进行UPDATE/DELETE时,如果生成的计划不是FQS或Stream计划,语句执行效率会比较差。建议排查语句,消除不可下推因素,从而生成FQS或Stream计划。 在为数据对象增加或者变更ILM策略的时候,如果追加了行级表达式,需要注意行表达式目前只支持白名单中列出的函数。具体白名单函数列表参考行表达式函数白名单。
  • 语法格式 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 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 [ [ , ] ... ] ] [ WITH ( {storage_parameter = value} [, ... ] ) ] [ COMPRESS | NOCOMPRESS ] [ ILM ADD POLICY ROW STORE { COMPRESS ADVANCED } { ROW } AFTER n { day | month | year } OF { NO MODIFICATION } [ ON ( EXPR )]] [ TABLESPACE tablespace_name ] [ DISTRIBUTE BY { REPLICATION | HASH ( column_name [, ...] ) | MURMURHASH ( diskey_expr ) | RANGE ( column_name [, ...] ) { SLICE REFERENCES tablename | ( slice_less_than_item [, ...] ) | ( slice_start_end_item [, ...] ) } | LIST ( column_name [, ...] ) { SLICE REFERENCES tablename | ( slice_values_item [, ...] ) } } ] [ TO { GROUP groupname | NODE ( nodename [, ... ] ) } ] PARTITION BY { {RANGE [COLUMNS] (partition_key) [ PARTITIONS integer ] ( partition_less_than_item [, ... ] )} | {RANGE [COLUMNS] (partition_key) [ PARTITIONS integer ] ( partition_start_end_item [, ... ] )} | {LIST [COLUMNS] (partition_key) [ 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 )]] [TABLESPACE [=] tablespace_name][, ... ])} | { HASH (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 )]] [TABLESPACE [=] tablespace_name][, ... ])} } [ { ENABLE | DISABLE } ROW MOVEMENT ]; 其中table_option为: { COMMENT [ = ] 'string' | AUTO_INCREMENT [ = ] value | [ DEFAULT ] CHARACTER SET | CHARSET [ = ] default_charset | [ DEFAULT ] COLLATE [ = ] default_collation } 列约束column_constraint: 1 2 3 4 5 6 7 8 9 10 11 [ CONSTRAINT constraint_name ] { NOT NULL | NULL | CHECK ( expression ) | AUTO_INCREMENT | COMMENT 'string' | DEFAULT default_expr | ON UPDATE update_expr | UNIQUE [KEY] [ index_parameters ] | PRIMARY KEY [ index_parameters] } [ DEFERRABLE | NOT DEFERRABLE ][ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] 表约束table_constraint: [ CONSTRAINT constraint_name ] { CHECK ( expression ) | UNIQUE ( column_name [, ... ] ) [ index_parameters ] | PRIMARY KEY ( column_name [, ... ] ) [ index_parameters]} [ DEFERRABLE | NOT DEFERRABLE ][ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] { [ COMMENT 'string' ] [ ... ] } like选项like_option: 1 { INCLUDING | EXCLUDING } { DEFAULTS | CONSTRAINTS | INDEXES | STORAGE | COMMENTS | RELOPTIONS | DISTRIBUTION | UPDATE | ALL } 索引存储参数index_parameters: 1 2 [ WITH ( {storage_parameter = value} [, ... ] ) ] [ USING INDEX TABLESPACE tablespace_name ]
  • 功能描述 创建分区表。分区表是把逻辑上的一张表根据某种方案分成几张物理块进行存储,这张逻辑上的表称之为分区表,物理块称之为分区。分区表是一张逻辑表,不存储数据,数据实际是存储在分区上的。 常见的分区方案有范围分区(Range Partitioning)、间隔分区(Interval Partitioning)、哈希分区(Hash Partitioning)、列表分区(List Partitioning)、数值分区(Value Partition)等。目前行存表支持范围分区、哈希分区、列表分区。 范围分区是根据表的一列或者多列,将要插入表的记录分为若干个范围,这些范围在不同的分区里没有重叠。为每个范围创建一个分区,用来存储相应的数据。 范围分区的分区策略是指记录插入分区的方式。 范围分区策略:根据分区键值将记录映射到已创建的某个分区上,如果可以映射到已创建的某一分区上,则把记录插入到对应的分区上,否则给出报错和提示信息。这是最常用的分区策略。 哈希分区是根据表的一列,为每个分区指定模数和余数,将要插入表的记录划分到对应的分区中,每个分区所持有的行都需要满足条件:分区键的值除以为其指定的模数将产生为其指定的余数。 哈希分区策略:根据分区键值将记录映射到已创建的某个分区上,如果可以映射到已创建的某一分区上,则把记录插入到对应的分区上,否则返回报错和提示信息。 列表分区是根据表的一列,将要插入表的记录通过每一个分区中出现的键值划分到对应的分区中,这些键值在不同的分区里没有重叠。为每组键值创建一个分区,用来存储相应的数据。 列表分区策略:根据分区键值将记录映射到已创建的某个分区上,如果可以映射到已创建的某一分区上,则把记录插入到对应的分区上,否则给出报错和提示信息。 分区可以提供若干好处: 某些类型的查询性能可以得到极大提升。特别是表中访问率较高的行位于一个单独分区或少数几个分区上的情况下。分区可以减少数据的搜索空间,提高数据访问效率。 当查询或更新一个分区的大部分记录时,连续扫描该分区而不是访问整个表可以获得巨大的性能提升。 如果需要大量加载或者删除的记录位于单独的分区上,则可以通过直接读取或删除该分区以获得巨大的性能提升,同时还可以避免由于大量DELETE导致的VACUUM超载(哈希分区不支持删除分区)。
  • GLOBAL_STATIO_USER_TABLES GLOBAL_STATIO_USER_TABLES视图显示各节点的命名空间中所有用户关系表的I/O状态信息,如表1所示。 表1 GLOBAL_STATIO_USER_TABLES字段 名称 类型 描述 node_name name 节点名称。 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表索引命中缓冲区数(如果存在)。 父主题: Cache/IO
  • GS_LABELS GS_LABELS视图显示所有已配置的资源标签信息。需要有系统管理员或安全策略管理员权限才可以访问此视图。 表1 GS_LABELS字段 名称 类型 描述 labelname name 资源标签的名称。 labeltype name 资源标签的类型。对应系统表GS_POLICY_LABEL中的labeltype字段。 fqdntype name 数据库资源的类型。如table、schema、index等。 schemaname name 数据库资源所属的schema名称。 fqdnname name 数据库资源名称。 columnname name 数据库资源列名称。若标记的数据库资源不为表的列则该项为空。 父主题: 用户和权限管理
  • 示例 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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 --在存储过程中操作RAW数据 CREATE OR REPLACE PROCEDURE proc_raw AS str varchar2(100) := 'abcdef'; source raw(100); amount integer; BEGIN source := dbe_raw.cast_from_varchar2_to_raw(str);--类型转换 amount := dbe_raw.get_length(source);--获取长度 dbe_output.print_line(amount); END; / CREATE PROCEDURE --调用存储过程 CALL proc_raw(); 6 proc_raw ---------- (1 row) --删除存储过程 DROP PROCEDURE proc_raw; DROP PROCEDURE DECLARE v_raw RAW; v_double BINARY_DOUBLE; v_float FLOAT4; v_numeric NUMERIC; v_nvarchar2 NVARCHAR2; BEGIN -- RAW类型按位与 SELECT DBE_RAW.BIT_AND('AFF', 'FF0B') INTO v_raw; -- 0A0B -- RAW类型按位取反 SELECT DBE_RAW.BIT_COMPLEMENT('0AFF') INTO v_raw; -- F500 -- RAW类型按位异或 SELECT DBE_RAW.BIT_XOR('AFF', 'FF0B') INTO v_raw; -- F5F4 -- BINARY_DOUBLE类型值转RAW类型 SELECT DBE_RAW.CAST_FROM_BINARY_DOUBLE_TO_RAW(1.0001,1) INTO v_raw; -- 3FF00068DB8BAC71 -- RAW类型值转BINARY_DOUBLE类型 SELECT DBE_RAW.CAST_FROM_RAW_TO_BINARY_DOUBLE('3FF00068DB8BAC7',1) INTO v_double; -- 1.0001 -- RAW类型转FLOAT4类型 SELECT DBE_RAW.CAST_FROM_RAW_TO_BINARY_FLOAT('40200000',1) INTO v_float; -- 2.5 -- FLOAT4类型转RAW类型 SELECT DBE_RAW.CAST_FROM_BINARY_FLOAT_TO_RAW('2.5',1) INTO v_raw; -- 40200000 -- RAW类型转NUMERIC类型 SELECT DBE_RAW.CAST_FROM_RAW_TO_NUMBER('808002008813') INTO v_numeric; -- 2.5 -- NUMERIC类型转RAW类型 SELECT DBE_RAW.CAST_FROM_NUMBER_TO_RAW('2.5') INTO v_raw; -- 808002008813 -- RAW类型转NVARCHAR2类型 SELECT DBE_RAW.CAST_FROM_RAW_TO_NVARCHAR2('12345678') INTO v_nvarchar2; -- \x124Vx -- RAW类型COMPARE SELECT DBE_RAW.COMPARE('ABCD','AB') INTO v_numeric; -- 2 -- RAW类型CONCAT SELECT DBE_RAW.CONCAT('ABCD','AB') INTO v_raw; -- ABCDAB -- RAW类型CONVERT SELECT DBE_RAW.CONVERT('E695B0', 'GBK','UTF8') INTO v_raw; -- CAFD -- RAW类型COPIES SELECT DBE_RAW.COPIES('ABCD',2) INTO v_raw; -- ABCDABCD -- RAW类型指定位置和长度进行覆盖 SELECT DBE_RAW.OVERLAY('abcef', '12345678123456', 2, 5, '9966') INTO v_raw; -- 120ABCEF999956 -- RAW类型按字节翻转 SELECT DBE_RAW.REVERSE('12345678') INTO v_raw; -- 78563412 -- RAW类型字节转换(无填充码) SELECT DBE_RAW.TRANSLATE('1122112233', '1133','55') INTO v_raw; -- 55225522 -- RAW类型字节转换(有填充码) SELECT DBE_RAW.TRANSLITERATE('1122112233', '55','1133','FFEE') INTO v_raw; -- 55225522FF -- RAW类型两个字节间的所有字节 SELECT DBE_RAW.XRANGE('00','03') INTO v_raw; -- 00010203 END; / ANONYMOUS BLOCK EXECUTE
  • 概述 在嵌入式SQL中进行C语言程序和SQL语句之间的数据传递不需要把数据粘贴到语句中,只需要在SQL语句里写上C语言变量的名称,前缀加一个冒号即可。示例如下: EXEC SQL INSERT INTO sometable VALUES (:v1, 'foo', :v2); 这个语句引用了两个C语言变量:v1和v2,并且使用一个普通的SQL字串文本,这表明一条SQL语句内并不限制只使用某一种数据。 父主题: 宿主变量
  • SUMMARY_STAT_USER_FUNCTIONS 显示整个集群中各节点,用户自定义函数的统计信息的汇总求和结果(在CN节点使用,按函数名对每个节点中用户自定义函数的状态信息汇总求和),如表1所示。 表1 SUMMARY_STAT_USER_FUNCTIONS字段 名称 类型 描述 schemaname name Schema的名称。 funcname name 用户自定义函数的名称。 calls numeric 函数被调用的次数。 total_time double precision 调用此函数花费的总时间,包含调用其它函数的时间(单位:毫秒)。 self_time double precision 调用此函数本身花费的时间,不包含调用其它函数的时间(单位:毫秒)。 父主题: Object
  • V$GLOBAL_OPEN_CURSOR V$GLOBAL_OPEN_CURSOR视图显示当前所有节点中所有打开的游标的相关信息。具体字段信息如表1所示。 表1 V$GLOBAL_OPEN_CURSOR字段 名称 类型 描述 node_name name 节点名称。 saddr raw 暂不支持,值为NULL。 sid numeric 会话id。 user_name character varying(128) 用户名称。 address raw 暂不支持,值为NULL。 hash_value numeric 暂不支持,值为NULL。 sql_id character varying(13) 查询语句的id。 sql_text character varying(60) 游标的SQL文本的前60个字节。 last_sql_active_time date 暂不支持,值为NULL。 sql_exec_id numeric 暂不支持,值为NULL。 cursor_type character varying(64) 游标类型。 OPEN-PL/SQL:打开的PL/SQL游标。 OPEN:其他打开的游标。 child_address raw 暂不支持,值为NULL。 con_id numeric 暂不支持,值为NULL。 父主题: 其他系统视图
  • application_name 参数说明:当前连接请求当中,所使用的客户端名称。 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。但是需要注意的是,客户端连接后该参数会被设为客户端名称,且设置为客户端级别,所以只有设置会话级别的参数会生效,其他方式都由于级别低于客户端级别而不会生效。 在备机请求主机进行日志复制时,如果该参数非空串,那么会被用来作为备机在主机上的流复制槽名字。此时,如果该参数长度超过61个字节,那么流复制槽名字只会截取使用前61个字节的字符。 取值范围:字符串,实际查询结果取决于查询所用的客户端或用户设置。 默认值:空字符串
  • unix_socket_permissions 参数说明:设置Unix域套接字的访问权限。 Unix域套接字使用普通的Unix文件系统权限集。这个参数的值应该是数值的格式(chmod和umask命令可接受的格式)。如果使用自定义的八进制格式,数字必须以0开头。 建议设置为0770(只有当前连接数据库的用户和同组的人可以访问)或者0700(只有当前连接数据库的用户自己可以访问,同组或者其他人都没有权限)。 该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 取值范围:0000-0777 默认值:0700 在Linux中,文档具有十个属性,其中第一个属性为文档类型,后面九个为权限属性,分别为Owner,Group及Others这三个组别的read、write、execute属性。 文档的权限属性分别简写为r,w,x,这九个属性三个为一组,也可以使用数字来表示文档的权限,对照表如下: r:4 w: 2 x:1 -:0 同一组(owner/group/others)的三个属性是累加的。 例如,-rwxrwx---表示这个文档的权限为: owner = rwx = 4+2+1 = 7 group = rwx = 4+2+1 = 7 others = --- = 0+0+0 = 0 所以其权限为0770。
  • check_disconnect_query 参数说明:当客户端异常断连(如JDBC触发socketTimeout、libpq触发rwtimeout且关闭连接、运行业务过程中客户端进程终止等)后,该参数控制GaussDB服务端语句是否终止执行。 参数类型:布尔型 参数单位:无 取值范围: on:表示当客户端异常断连后,GaussDB服务端终止运行对应的语句。 off:表示当客户端异常断连后,GaussDB服务端不会终止运行对应的语句。 默认值:on 设置方式:该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 设置建议:推荐使用默认值。
  • port 参数说明:GaussDB服务侦听的TCP端口号。 该参数由安装时的配置文件指定,请勿轻易修改,否则修改后会影响数据库正常通信。 参数类型:整型 参数单位:无 取值范围:1~65535 设置端口号时,请设置一个未被占用的端口号。设置多个实例的端口号,不可冲突。 1~1023为操作系统保留端口号,请不要使用。 通过配置文件安装集群时,配置文件中的端口号需要注意通信矩阵预留端口。如:DN还需保留dataPortBase+1作为内部工具使用端口。故集群安装阶段,port最大值为:CN可设置65532,DN可设置65529,GTM可设置65534,同时需要保证端口号不冲突。 默认值:5432(实际值由安装时的配置文件指定) 设置方式:该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:该参数由安装时的配置文件指定,请勿轻易修改,否则修改后会影响数据库正常通信。
  • sysadmin_reserved_connections 参数说明:为管理员用户预留的最少连接数,不建议设置过大。该参数和max_connections参数配合使用,管理员用户的最大连接数等于max_connections + sysadmin_reserved_connections。 当启用线程池功能时,若线程池占满将形成处理瓶颈,导致管理员预留连接无法正常建立;作为逃生手段,此时可使用gsql通过主端口+1端口号连入,清理无用会话,即可正常连入。 当管理员预留连接数全部被使用后,新建连接将失败,此时只能通过重启集群来恢复,所以需要谨慎使用该预留连接数。 参数类型:整型 参数单位:无 取值范围:最小值为0,最大值为MIN(262143, max_connections),max_connections的计算方法见max_connections。 默认值:3 设置方式:该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 设置建议:无 设置不当的风险与影响:无
  • unix_socket_directory 参数说明:设置GaussDB服务器侦听客户端连接的Unix域套接字目录,仅sysadmin用户可以访问。 参数类型:字符串 参数单位:无 取值范围:合法目录路径。 该参数的取值长度限制于操作系统的最大目录路径长度,Linux系统下,套接字路径名(套接字目录与套接字文件名拼接而成)长度不得超过107bytes,目录最长不得超过92bytes。超过该限制将会导致Unix-domain socket path "xxx" is too long的问题。 默认值:空字符串(实际值由安装时配置文件中tmpMppdbPath指定) 设置方式:该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 设置建议:无 设置不当的风险与影响:若误设置出错(包括长度超过限制、非法目录等),会影响进程正常拉起,可以通过检索cm_agent路径下system_call日志定界。
  • max_inner_tool_connections 参数说明:允许和数据库连接的工具的最大并发连接数。此参数会影响GaussDB的工具连接并发能力。 参数类型:整型 参数单位:无 取值范围:整型,最小值为1,最大值的计算公式为:262143 - job_queue_processes - autovacuum_max_workers - max_connections - max_concurrent_autonomous_transactions - AUXILIARY_BACKENDS - AV_LAUNCHER_PROCS - min(max(max_connections/4,64),1024)。job_queue_processes、autovacuum_max_workers、max_connections和max_concurrent_autonomous_transactions的值与相应的GUC参数的设置有关;AUXILIARY_BACKENDS为预留辅助线程数,固定为20;AV_LAUNCHER_PROCS为预留autovacuum的launcher线程数,固定为2。 默认值:50。如果该默认值超过内核支持的最大值(在执行gs_initdb的时候判断),系统会提示错误。 设置方式:该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 设置建议:数据库主节点中此参数建议保持默认值。 设置不当的风险与影响:无
  • service_reserved_connections 参数说明:为后台运维用户(带有persistence属性)预留的最少连接数,不建议设置过大。该参数和max_connections参数配合使用,运维用户的最大连接数等于max_connections + service_reserved_connections。 参数类型:整型 参数单位:无 取值范围:整型,最小值为0,最大值为262143。 默认值:10 设置方式:该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 设置建议:推荐使用默认值。如果设置过小,会导致在max_connections满的情况下,运维用户(带有persistence属性)无法连接数据库,作业无法正常执行。 设置不当的风险与影响:无
  • extip_reserved_connections 参数说明:为用户在listen_address_ext配置的扩展IP上进行的普通gsql业务连接预留的最少连接数。该参数和max_connections参数配合使用,对应业务连接的最大连接数等于max_connections + service_reserved_connections。 该参数仅在为分布式DN配置了listen_address_ext的具体IP地址时有效。 参数类型:整型 参数单位:无 取值范围:整型,最小值为0,最大值为MIN(262143, max_connections),max_connections的计算方法见max_connections。 默认值: 5 设置方式:该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 设置建议:无 设置不当的风险与影响:无
  • listen_address_ext 参数说明:声明服务器侦听客户端的扩展TCP/IP地址。该参数指定GaussDB服务器使用哪些IP地址作为扩展侦听IP。 参数类型:字符串 参数单位:无 取值范围:IPv4格式地址,不支持多IP设置。 默认值:“localhost”。 设置方式:该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 设置建议:无 listen_address_ext参数配置涉及整个集群扩展IP的网络拓扑关系和配置,所以set/reload都必须通过OM工具实现。 listen_address_ext是用于扩展具体IP地址的网络通道,若设置为“*”,“0.0.0.0”,“localhost”,“127.0.0.1”则不生效,建议此类地址设置在listen_addresses参数中。 listen_address_ext用于配置分布式DN实例,CN配置后不生效。 设置不当的风险与影响:无
  • listen_addresses 参数说明:声明服务器侦听客户端的TCP/IP地址。 该参数指定GaussDB服务器使用哪些IP地址进行侦听,如IPv4。服务器主机上可能存在多个网卡,每个网卡可以绑定多个IP地址,该参数用来控制GaussDB绑定在哪一个或者哪几个IP地址上。而客户端则可以通过该参数中指定的IP地址来连接GaussDB或者给GaussDB发送请求。 参数类型:字符串 参数单位:无 取值范围: 主机名或IP地址,多个值之间用英文逗号分隔。 “*”或“0.0.0.0”表示侦听所有IP地址。配置侦听所有IP地址存在安全风险,不推荐用户使用。 置空则服务器不会侦听任何IP地址,这种情况下,只有Unix域套接字可以用于连接数据库。 默认值: 集群安装好后,根据public_cloud.conf配置文件中不同实例的IP地址配置不同默认值。CN的默认参数值为:“localhost,mgr.net网卡对应的IP地址,data.net网卡对应的IP地址,virtual.net网卡对应的IP地址”;DN的默认参数值为:“data.net网卡对应的IP”。 设置方式:该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 localhost表示只允许进行本地“回环”连接。 public_cloud.conf文件保存的网卡信息,包括:mgr.net(管理网卡)、data.net(数据网卡)、virtual.net(虚拟网卡)。 使用IPv6地址时,若IP为fe80地址块,则配置时需要追加'%zone index'信息。 设置不当的风险与影响:无
  • local_bind_address 参数说明:声明当前节点连接集群其他节点绑定的本地IP地址。 参数类型:字符串 参数单位:无 取值范围:IPv4格式地址,不支持多IP设置。 默认值: 集群安装好后,根据public_cloud.conf配置文件中不同实例的IP地址配置不同默认值。CN/DN的默认参数值为:“data.net网卡对应的IP地址”。 public_cloud.conf文件保存的网卡信息,包括:mgr.net(管理网卡)、data.net(数据网卡)、virtual.net(虚拟网卡)。 设置方式:该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 设置建议:推荐使用默认值。 设置不当的风险与影响:该参数由安装时的配置文件指定,请勿轻易修改,否则修改后会影响数据库正常通信。
  • PG_REWRITE PG_REWRITE系统表存储表和视图定义的重写规则。 表1 PG_REWRITE字段 名称 类型 描述 oid oid 行标识符(隐含字段,必须明确选择)。 rulename name 规则名称。 ev_class oid 使用这条规则的表名称。 ev_attr smallint 这条规则适用的字段(目前总是为零,表示整个表)。 ev_type "char" 规则适用的事件类型。 1 :SELECT 2 :UPDATE 3 :INSERT 4 :DELETE ev_enabled "char" 用于控制复制的触发。 O :“origin”和“local”模式时触发。 D :禁用触发。 R :“replica”时触发。 A :任何模式是都会触发。 is_instead boolean 如果该规则是INSTEAD规则,则为真,否则为假。 ev_qual pg_node_tree 规则的资格条件的表达式树(以nodeToString() 形式存在)。 ev_action pg_node_tree 规则动作的查询树(以nodeToString() 形式存在)。 父主题: 其他系统表
  • PG_LOCKS PG_LOCKS视图显示各打开事务所持有的锁的信息。具体字段信息如表1所示。 表1 PG_LOCKS字段 名称 类型 引用 描述 locktype text - 被锁定对象的类型:relation、extend、page、tuple、transactionid、virtualxid、object、userlock或advisory。 database oid PG_DATABASE.oid 被锁定对象所在数据库的OID。 如果被锁定的对象是共享对象,则OID为0。 如果被锁定的对象是一个事务,则OID为NULL。 relation oid PG_CLASS.oid 关系的OID,如果锁定的对象不是关系,也不是关系的一部分,则为NULL。 page integer - 关系内部的页面编号,如果对象不是关系页或者不是行页,则为NULL。 tuple smallint - 页面里边的行编号,如果对象不是行,则为NULL。 bucket integer - 哈希桶编号。 virtualxid text - 虚拟事务的id,如果对象不是一个虚拟事务,则为NULL。 transactionid xid - 事务的id,如果对象不是一个事务,则为NULL。 classid oid PG_CLASS.oid 包含该对象的系统表的OID,如果对象不是普通的数据库对象,则为NULL。 objid oid - 对象在其系统表内的OID,如果对象不是普通的数据库对象,则为NULL。 objsubid smallint - 对于表的一个字段,这是字段编号;对于其他对象类型,这个字段是零;如果这个对象不是普通数据库对象,则为NULL。 virtualtransaction text - 持有此锁或者在等待此锁的虚拟事务的虚拟id。 pid bigint - 持有或者等待这个锁的服务器线程的逻辑id。如果锁是被一个预备事务持有的,则为NULL。 sessionid bigint - 持有或者等待这个锁的会话的id。 mode text - 这个线程持有的或者是期望的锁模式。 取值为:AccessShareLock、RowShareLock、RowExclusiveLock、ShareLock、ShareRowExclusiveLock、ExclusiveLock或AccessExclusiveLock。 granted boolean - 如果锁是持有锁,则为TRUE。 如果锁是等待锁,则为FALSE。 fastpath boolean - 如果通过fast-path获得锁,则为TRUE;如果通过主要的锁表获得,则为FALSE。 locktag text - 会话等待锁信息,可通过locktag_decode()函数解析。 global_sessionid text - 全局会话id。 父主题: 其他系统视图
  • 参数说明 SESSION 声明这个命令只对当前会话起作用,此参数为缺省值。 LOCAL 声明该命令只在当前事务中有效。 role_name 角色名。 取值范围:字符串,数据库中已存在的用户名。 password 角色的密码。要求符合密码的命名规则。 使用密文密码限制如下: 管理员用户不能使用密文密码切换到其他管理员用户,只能向权限更低用户切换。 使用密文密码通常用于gs_dump、gs_dumpall导出场景,其他场景不建议直接使用密文密码。 RESET ROLE 用于重置当前用户标识。
  • 注意事项 当前会话的用户必须是指定的rolename角色的成员,当三权分立关闭时,系统管理员可以选择任何角色。 使用这条命令,它可能会增加一个用户的权限,也可能会限制一个用户的权限。如果会话用户的角色有INHERITS属性,则它自动拥有它能SET ROLE变成的角色的所有权限;在这种情况下,SET ROLE实际上是删除了所有直接赋予会话用户的权限,以及它的所属角色的权限,只剩下指定角色的权限。另一方面,如果会话用户的角色有NOINHERITS属性,SET ROLE删除直接赋予会话用户的权限,而获取指定角色的权限。
共100000条