华为云用户手册

  • 咨询锁函数 咨询锁函数用于管理咨询锁(Advisory Lock)。 pg_advisory_lock(key bigint) 描述:获取会话级别的排它咨询锁。 返回值类型:void 备注:pg_advisory_lock锁定应用程序定义的资源,该资源可以用一个64位或两个不重叠的32位键值标识。如果已经有另外的会话锁定了该资源,则该函数将阻塞到该资源可用为止。这个锁是排它的。多个锁定请求将会被压入栈中,因此,如果同一个资源被锁定了三次,它必须被解锁三次以将资源释放给其他会话使用。 pg_advisory_lock(key1 int, key2 int) 描述:获取会话级别的排它咨询锁。 返回值类型:void 备注:只允许sysadmin对键值对(65535, 65535)加会话级别的排它咨询锁,普通用户无权限。 pg_advisory_lock(int4, int4, Name) 描述:获取指定数据库的排它咨询锁。 返回值类型:void pg_advisory_lock_shared(key bigint) 描述:获取会话级别的共享咨询锁。 返回值类型:void pg_advisory_lock_shared(key1 int, key2 int) 描述:获取会话级别的共享咨询锁。 返回值类型:void 备注:pg_advisory_lock_shared类似于pg_advisory_lock,不同之处仅在于共享锁会话可以和其他请求共享锁的会话共享资源,但排它锁除外。 pg_advisory_unlock(key bigint) 描述:释放会话级别的排它咨询锁。 返回值类型:Boolean pg_advisory_unlock(key1 int, key2 int) 描述:释放会话级别的排它咨询锁。 返回值类型:Boolean 备注:pg_advisory_unlock释放先前取得的排它咨询锁。如果释放成功则返回true。如果实际上并未持有指定的锁,将返回false并在服务器中产生一条SQL警告信息。 pg_advisory_unlock(int4, int4, Name) 描述:释放指定数据库上的排它咨询锁。 返回值类型:Boolean 备注:如果释放成功则返回true;如果未持有锁,则返回false。 pg_advisory_unlock_shared(key bigint) 描述:释放会话级别的共享咨询锁。 返回值类型:Boolean pg_advisory_unlock_shared(key1 int, key2 int) 描述:释放会话级别的共享咨询锁。 返回值类型:Boolean 备注:pg_advisory_unlock_shared类似于pg_advisory_unlock,不同之处在于该函数释放的是共享咨询锁。 pg_advisory_unlock_all() 描述:释放当前会话持有的所有咨询锁。 返回值类型:void 备注:pg_advisory_unlock_all将会释放当前会话持有的所有咨询锁,该函数在会话结束的时候被隐含调用,即使客户端异常地断开连接也是一样。 pg_advisory_xact_lock(key bigint) 描述:获取事务级别的排它咨询锁。 返回值类型:void pg_advisory_xact_lock(key1 int, key2 int) 描述:获取事务级别的排它咨询锁。 返回值类型:void 备注:pg_advisory_xact_lock类似于pg_advisory_lock,不同之处在于锁是自动在当前事务结束时释放,而且不能被显式的释放。只允许sysadmin对键值对(65535, 65535)加事务级别的排它咨询锁,普通用户无权限。 pg_advisory_xact_lock_shared(key bigint) 描述:获取事务级别的共享咨询锁。 返回值类型:void pg_advisory_xact_lock_shared(key1 int, key2 int) 描述:获取事务级别的共享咨询锁。 返回值类型:void 备注:pg_advisory_xact_lock_shared类似于pg_advisory_lock_shared,不同之处在于锁是在当前事务结束时自动释放,而且不能被显式的释放。 pg_try_advisory_lock(key bigint) 描述:尝试获取会话级排它咨询锁。 返回值类型:Boolean 备注:pg_try_advisory_lock类似于pg_advisory_lock,不同之处在于该函数不会阻塞以等待资源的释放。它要么立即获得锁并返回true,要么返回false表示目前不能锁定。 pg_try_advisory_lock(key1 int, key2 int) 描述:尝试获取会话级排它咨询锁。 返回值类型:Boolean 备注:只允许sysadmin对键值对(65535, 65535)加会话级别的排它咨询锁,普通用户无权限。 pg_try_advisory_lock_shared(key bigint) 描述:尝试获取会话级共享咨询锁。 返回值类型:Boolean pg_try_advisory_lock_shared(key1 int, key2 int) 描述:尝试获取会话级共享咨询锁。 返回值类型:Boolean 备注:pg_try_advisory_lock_shared类似于pg_try_advisory_lock,不同之处在于该函数尝试获得共享锁而不是排它锁。 pg_try_advisory_xact_lock(key bigint) 描述:尝试获取事务级别的排它咨询锁。 返回值类型:Boolean pg_try_advisory_xact_lock(key1 int, key2 int) 描述:尝试获取事务级别的排它咨询锁。 返回值类型:Boolean 备注:pg_try_advisory_xact_lock类似于pg_try_advisory_lock,不同之处在于如果得到锁,在当前事务的结束时自动释放,而且不能被显式的释放。只允许sysadmin对键值对(65535, 65535)加事务级别的排它咨询锁,普通用户无权限。 pg_try_advisory_xact_lock_shared(key bigint) 描述:尝试获取事务级别的共享咨询锁。 返回值类型:Boolean pg_try_advisory_xact_lock_shared(key1 int, key2 int) 描述:尝试获取事务级别的共享咨询锁。 返回值类型:Boolean 备注:pg_try_advisory_xact_lock_shared类似于pg_try_advisory_lock_shared,不同之处在于如果得到锁,在当前事务结束时自动释放,而且不能被显式的释放。 lock_cluster_ddl() 描述:尝试对数据库内所有存活的数据库主节点获取会话级别的排他咨询锁。 返回值类型:Boolean 备注:只允许sysadmin调用,普通用户无权限。 unlock_cluster_ddl() 描述:尝试对数据库主节点会话级别的排他咨询锁。 返回值类型:Boolean 父主题: 系统管理函数
  • HashFunc函数 hash_array(anyarray) 描述:数组哈希,将数组的元素通过哈希函数得到结果,并返回合并结果。 参数:数据类型为anyarray。 返回值类型:integer 示例: 12345 openGauss=# select hash_array(ARRAY[[1,2,3],[1,2,3]]); hash_array ------------ -382888479(1 row) hash_group(key) 描述:流引擎(由于规格变更,当前版本已经不再支持本特性,请不要使用)中,该函数可将Group Clause中的各列计算为一个hash值。 参数:key为Group Clause中各列的值。 返回值类型:32位hash值 示例: 1 2 3 4 5 6 7 8 91011121314151617181920212223242526272829303132 按照步骤依次执行。openGauss=# CREATE TABLE tt(a int, b int,c int,d int);NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'a' as the distribution column by default.HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column.CREATE TABLEopenGauss=# select * from tt; a | b | c | d ---+---+---+---(0 rows)openGauss=# insert into tt values(1,2,3,4);INSERT 0 1openGauss=# select * from tt; a | b | c | d ---+---+---+--- 1 | 2 | 3 | 4(1 row)openGauss=# insert into tt values(5,6,7,8);INSERT 0 1openGauss=# select * from tt; a | b | c | d ---+---+---+--- 1 | 2 | 3 | 4 5 | 6 | 7 | 8(2 rows)openGauss=# select hash_group(a,b) from tt where a=1 and b=2; hash_group ------------ 990882385(1 row) hash_numeric(numeric) 描述:计算Numeric类型的数据的hash值。 参数:Numeric类型的数据。 返回值类型:integer 示例: 12345 openGauss=# select hash_numeric(30); hash_numeric -------------- -282860963(1 row) hash_range(anyrange) 描述:计算range的哈希值。 参数:anyrange类型的数据。 返回值类型:integer 示例: 12345 openGauss=# select hash_range(numrange(1.1,2.2)); hash_range ------------ 683508754(1 row) hashbpchar(character) 描述:计算bpchar的哈希值。 参数:character类型的数据。 返回值类型:integer 示例: 12345 openGauss=# select hashbpchar('hello'); hashbpchar ------------- -1870292951(1 row) hashchar(char) 描述:char和布尔数据转换为哈希值。 参数:char类型的数据或者bool类型的数据。 返回值类型:integer 示例: 1 2 3 4 5 6 7 8 91011 openGauss=# select hashbpchar('hello'); hashbpchar ------------- -1870292951(1 row)openGauss=# select hashchar('true'); hashchar ------------ 1686226652(1 row) hashenum(anyenum) 描述:枚举类型转哈希值。 参数:anyenum类型的数据。 返回值类型:integer 示例: 1234567 openGauss=# CREATE TYPE b1 AS ENUM('good', 'bad', 'ugly');CREATE TYPEopenGauss=# call hashenum('good'::b1); hashenum ------------ 1821213359(1 row) hashfloat4(real) 描述:float4转哈希值。 参数:real类型的数据。 返回值类型:integer 示例: 12345 openGauss=# select hashfloat4(12.1234); hashfloat4 ------------ 1398514061(1 row) hashfloat8(double precision) 描述:float8转哈希值。 参数:double precision类型的数据。 返回值类型:integer 示例: 12345 openGauss=# select hashfloat8(123456.1234); hashfloat8 ------------ 1673665593(1 row) hashinet(inet) 描述:支持inet / cidr上的哈希索引的功能。返回传入inet的hash值。 参数:inet类型的数据。 返回值类型:integer 示例: 12345 openGauss=# select hashinet('127.0.0.1'::inet); hashinet ------------- -1435793109(1 row) hashint1(tinyint) 描述:INT1转哈希值。 参数:tinyint类型的数据。 返回值类型:uint32 示例: 12345 openGauss=# select hashint1(20); hashint1 ------------- -2014641093(1 row) hashint2(smallint) 描述:INT2转哈希值。 参数:smallint类型的数据。 返回值类型:uint32 示例: openGauss=# select hashint2(20000); hashint2 ------------ -863179081(1 row) 父主题: 函数和操作符
  • 逻辑复制函数 pg_create_logical_replication_slot('slot_name', 'plugin_name') 描述:创建逻辑复制槽。 参数说明: slot_name 流复制槽名称。 取值范围:字符串,仅支持小写字母,数字,以及_?-.字符,且不支持'.'或'..'单独作为复制槽名称。 plugin_name 插件名称。 取值范围:字符串,当前支持mppdb_decoding。 返回值类型:name, text 备注:第一个返回值表示slot_name,第二个返回值表示该逻辑复制槽解码的起始LSN位置。调用该函数的用户需要具有SYSADMIN权限或具有REPLICATION权限或继承了内置角色gs_role_replication的权限。此函数目前只支持在主机调用。 pg_create_physical_replication_slot('slot_name', 'isDummyStandby') 描述:创建新的物理复制槽。 参数说明: slot_name 流复制槽名称。 取值范围:字符串,仅支持小写字母,数字,以及_?-.字符,且不支持“.”或“..”单独作为复制槽名称。 isDummyStandby 是否是从从备连接主机创建的复制槽。 类型:bool。 返回值类型:name, text 备注:调用该函数的用户需要具有SYSADMIN权限或具有REPLICATION权限或继承了内置角色gs_role_replication的权限。目前默认不支持主备从部署模式。 pg_drop_replication_slot('slot_name') 描述:删除流复制槽。 参数说明: slot_name 流复制槽名称。 取值范围:字符串,仅支持小写字母,数字,以及_?-.字符,且不支持“.”或“..”单独作为复制槽名称。 返回值类型:void 备注:调用该函数的用户需要具有SYSADMIN权限或具有REPLICATION权限或继承了内置角色gs_role_replication的权限。此函数目前只支持在主机调用。 pg_logical_slot_peek_changes('slot_name', 'LSN', upto_nchanges, 'options_name', 'options_value') 描述:解码并不推进流复制槽(下次解码可以再次获取本次解出的数据)。 参数说明: slot_name 流复制槽名称。 取值范围:字符串,仅支持小写字母,数字,以及_?-.字符,且不支持“.”或“..”单独作为复制槽名称。 LSN 日志的LSN,表示只解码小于等于此LSN的日志。 取值范围:字符串(LSN,格式为xlogid/xrecoff),如'1/2AAFC60'。为NULL时表示不对解码截止的日志位置做限制。 upto_nchanges 解码条数(包含begin和commit)。假设一共有三条事务,分别包含3、5、7条记录,如果upto_nchanges为4,那么会解码出前两个事务共8条记录。解码完第二条事务时发现解码条数记录大于等于upto_nchanges,会停止解码。 取值范围:非负整数。 LSN和upto_nchanges中任一参数达到限制,解码都会结束。 options:此项为可选参数,由一系列options_name和options_value一一对应组成。 include-xids 解码出的data列是否包含xid信息。 取值范围:0或1,默认值为1。 0:设为0时,解码出的data列不包含xid信息。 1:设为1时,解码出的data列包含xid信息。 skip-empty-xacts 解码时是否忽略空事务信息。 取值范围:0或1,默认值为0。 0:设为0时,解码时不忽略空事务信息。 1:设为1时,解码时会忽略空事务信息。 include-timestamp 解码信息是否包含commit时间戳。 取值范围:0或1,默认值为0。 0:设为0时,解码信息不包含commit时间戳。 1:设为1时,解码信息包含commit时间戳。 only-local 是否仅解码本地日志。 取值范围:0或1,默认值为1。 0:设为0时,解码非本地日志和本地日志。 1:设为1时,仅解码本地日志。 force-binary 是否以二进制格式输出解码结果。 取值范围:0,默认值为0。 0:设为0时,以文本格式输出解码结果。 white-table-list 白名单参数,包含需要进行解码的schema和表名。 取值范围:包含白名单中表名的字符串,不同的表以','为分隔符进行隔离;使用'*'来模糊匹配所有情况;schema名和表名间以'.'分割,不允许存在任意空白符。例:select * from pg_logical_slot_peek_changes('slot1', NULL, 4096, 'white-table-list', 'public.t1,public.t2'); max-txn-in-memory 内存管控参数,单位为MB,单个事务占用内存大于该值即进行落盘。 取值范围:0~100的整型,默认值为0,即不开启此种管控。 max-reorderbuffer-in-memory 内存管控参数,单位为GB,拼接-发送线程中正在拼接的事务总内存(包含缓存)大于该值则对当前解码事务进行落盘。 取值范围:0~100的整型,默认值为0,即不开启此种管控。 返回值类型:text, xid, text 备注:函数返回解码结果,每一条解码结果包含三列,对应上述返回值类型,分别表示LSN位置、xid和解码内容。 调用该函数的用户需要具有SYSADMIN权限或具有REPLICATION权限或继承了内置角色gs_role_replication的权限。 pg_logical_slot_get_changes('slot_name', 'LSN', upto_nchanges, 'options_name', 'options_value') 描述:解码并推进流复制槽。 参数说明:与pg_logical_slot_peek_changes一致,详细内容请参见•pg_logical_slot_peek_ch...。 备注:调用该函数的用户需要具有SYSADMIN权限或具有REPLICATION权限或继承了内置角色gs_role_replication的权限。此函数目前只支持在主机调用。 pg_logical_slot_peek_binary_changes('slot_name', 'LSN', upto_nchanges, 'options_name', 'options_value') 描述:以二进制格解码且不推进流复制槽(下次解码可以再次获取本次解出的数据)。 参数说明: slot_name 流复制槽名称。 取值范围:字符串,仅支持小写字母,数字,以及_?-.字符,且不支持“.”或“..”单独作为复制槽名称。 LSN 日志的LSN,表示只解码小于等于此LSN的日志。 取值范围:字符串(LSN,格式为xlogid/xrecoff),如'1/2AAFC60'。为NULL时表示不对解码截止的日志位置做限制。 upto_nchanges 解码条数(包含begin和commit)。假设一共有三条事务,分别包含3、5、7条记录,如果upto_nchanges为4,那么会解码出前两个事务共8条记录。解码完第二条事务时发现解码条数记录大于等于upto_nchanges,会停止解码。 取值范围:非负整数。 LSN和upto_nchanges中任一参数达到限制,解码都会结束。 options:此项为可选参数,由一系列options_name和options_value一一对应组成。 include-xids 解码出的data列是否包含xid信息。 取值范围:0或1,默认值为1。 0:设为0时,解码出的data列不包含xid信息。 1:设为1时,解码出的data列包含xid信息。 skip-empty-xacts 解码时是否忽略空事务信息。 取值范围:0或1,默认值为0。 0:设为0时,解码时不忽略空事务信息。 1:设为1时,解码时会忽略空事务信息。 include-timestamp 解码信息是否包含commit时间戳。 取值范围:0或1,默认值为0。 0:设为0时,解码信息不包含commit时间戳。 1:设为1时,解码信息包含commit时间戳。 only-local 是否仅解码本地日志。 取值范围:0或1,默认值为1。 0:设为0时,解码非本地日志和本地日志。 1:设为1时,仅解码本地日志。 force-binary 是否以二进制格式输出解码结果。 取值范围:0或1,默认值为0,均以二进制格式输出结果。 white-table-list 白名单参数,包含需要进行解码的schema和表名。 取值范围:包含白名单中表名的字符串,不同的表以','为分隔符进行隔离;使用'*'来模糊匹配所有情况;schema名和表名间以'.'分割,不允许存在任意空白符。例:select * from pg_logical_slot_peek_binary_changes('slot1', NULL, 4096, 'white-table-list', 'public.t1,public.t2'); 返回值类型:text, xid, bytea 备注:函数返回解码结果,每一条解码结果包含三列,对应上述返回值类型,分别表示LSN位置、xid和二进制格式的解码内容。调用该函数的用户需要具有SYSADMIN权限或具有REPLICATION权限或继承了内置角色gs_role_replication的权限。 pg_logical_slot_get_binary_changes('slot_name', 'LSN', upto_nchanges, 'options_name', 'options_value') 描述:以二进制格式解码并推进流复制槽。 参数说明:与pg_logical_slot_peek_binary_changes一致,详细内容请参见•pg_logical_slot_peek_bi...。 备注:调用该函数的用户需要具有SYSADMIN权限或具有REPLICATION权限或继承了内置角色gs_role_replication的权限。 pg_replication_slot_advance ('slot_name', 'LSN') 描述:直接推进流复制槽到指定LSN,不输出解码结果。 参数说明: slot_name 流复制槽名称。 取值范围:字符串,仅支持小写字母,数字,以及_?-.字符,且不支持“.”或“..”单独作为复制槽名称。 LSN 推进到的日志LSN位置,下次解码时只会输出提交位置比该LSN大的事务结果。如果输入的LSN比当前流复制槽记录的推进位置还要小,则直接返回;如果输入的LSN比当前最新物理日志LSN还要大,则推进到当前最新物理日志LSN。 取值范围:字符串(LSN,格式为xlogid/xrecoff)。 返回值类型:name, text 备注:返回值分别对应slot_name和实际推进至的LSN。调用该函数的用户需要具有SYSADMIN权限或具有REPLICATION权限或继承了内置角色gs_role_replication的权限。此函数目前只支持在主机调用。 pg_logical_get_area_changes('LSN_start', 'LSN_end', upto_nchanges, 'decoding_plugin', 'xlog_path', 'options_name', 'options_value') 描述:没有ddl的前提下,指定lsn区间进行解码,或者指定xlog文件进行解码。 约束条件如下: 调用接口时,日志级别wal_level=logical,且只有在wal_level=logical期间产生的日志文件才能被解析,如果使用的xlog文件为非logical级别,则解码内容没有对应的值和类型,无其他影响。 xlog文件只能被完全同构的dn的某个副本解析,确保可以找到数据对应的元信息,且没有DDL操作和VACUUM FULL。 用户可以找到需要解析的xlog。 用户需要注意一次不要读入过多xlog文件,推荐一次一个,一个xlog文件估测占用内存为xlog文件大小的2~3倍。 无法解码扩容前的xlog文件。 参数说明: LSN_start 指定开始解码的lsn。 取值范围:字符串(LSN,格式为xlogid/xrecoff),如'1/2AAFC60'。为NULL时表示不对解码截止的日志位置做限制。 LSN_end 指定解码结束的lsn。 取值范围:字符串(LSN,格式为xlogid/xrecoff),如'1/2AAFC60'。为NULL时表示不对解码截止的日志位置做限制。 upto_nchanges 解码条数(包含begin和commit)。假设一共有三条事务,分别包含3、5、7条记录,如果upto_nchanges为4,那么会解码出前两个事务共8条记录。解码完第二条事务时发现解码条数记录大于等于upto_nchanges,会停止解码。 取值范围:非负整数。 LSN和upto_nchanges中任一参数达到限制,解码都会结束。 decoding_plugin 解码插件,指定解码内容输出格式的so插件。 取值范围:提供mppdb_decoding和sql_decoding两个解码插件。 xlog_path 解码插件,指定解码文件的xlog绝对路径,文件级别 取值范围:NULL 或者 xlog文件绝对路径的字符串。 options:此项为可选参数,由一系列options_name和options_value一一对应组成,可以缺省,详见pg_logical_slot_peek_changes。 示例: openGauss=# SELECT pg_current_xlog_location(); pg_current_xlog_location -------------------------- 0/E62E238(1 row)openGauss=# create table t1 (a int primary key,b int,c int);NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "t1_pkey" for table "t1"CREATE TABLEopenGauss=# insert into t1 values(1,1,1);INSERT 0 1openGauss=# insert into t1 values(2,2,2);INSERT 0 1openGauss=# select data from pg_logical_get_area_changes('0/E62E238',NULL,NULL,'sql_decoding',NULL); location | xid | data -----------+-------+--------------------------------------------------- 0/E62E8D0 | 27213 | COMMIT (at 2022-01-26 15:08:03.349057+08) 3020226 0/E6325F0 | 27214 | COMMIT (at 2022-01-26 15:08:07.309869+08) 3020234…… pg_get_replication_slots() 描述:获取复制槽列表。 返回值类型:text,text,text,oid,boolean,xid,xid,text,boolean, text 示例: openGauss=# select * from pg_get_replication_slots(); slot_name | plugin | slot_type | datoid | active | xmin | catalog_xmin | restart_lsn | dummy_standby | confirmed_flush-----------+----------------+-----------+--------+--------+------+--------------+-------------+---------------+----------------- dn_s1 | | physical | 0 | t | | | 0/23DB14E0 | f | slot1 | mppdb_decoding | logical | 16304 | f | | 60966 | 0/1AFA1BB0 | f | 0/23DA5700(2 rows) gs_get_parallel_decode_status() 描述:监控各个解码线程的读取日志队列和解码结果队列的长度,以便定位并行解码性能瓶颈。 返回值类型:text, int, text, text, text, int64, int64 示例: openGauss=# select * from gs_get_parallel_decode_status(); slot_name | parallel_decode_num | read_change_queue_length | decode_change_queue_length | reader_lsn | working_txn_cnt | working_txn_memory-----------+---------------------+---------------------------+----------------------------+------------+-----------------+-------------------- slot1 | 2 | queue0: 1005, queue1: 320 | queue0: 63, queue1: 748 | 0/1DCE2578 | 42 | 192927504(1 row) 备注:返回值的slot_name代表复制槽名,parallel_decode_num代表该复制槽的并行解码线程数,read_change_queue_length列出了每个解码线程读取日志队列的当前长度,decode_change_queue_length列出了每个解码线程解码结果队列的当前长度,reader_lsn表示当前reader线程读取的日志位置,working_txn_cnt表示当前拼接-发送线程中正在拼接的事务个数,working_txn_memory代表拼接-发送线程中拼接事务占用总内存(单位字节)。 pg_replication_origin_create (node_name) 描述:用给定的外部名称创建一个复制源,并且返回分配给它的内部ID。 备注:调用该函数的用户需要具有SYSADMIN权限。 参数说明: node_name 待创建的复制源的名称。 取值范围:字符串,不支持除字母,数字,以及(_?-.)以外的字符。 返回值类型:oid pg_replication_origin_drop (node_name) 描述:删除一个以前创建的复制源,包括任何相关的重放进度。 备注:调用该函数的用户需要具有SYSADMIN权限。 参数说明: node_name 待删除的复制源的名称。 取值范围:字符串,不支持除字母,数字,以及(_?-.)以外的字符。 pg_replication_origin_oid (node_name) 描述:根据名称查找复制源并返回内部ID。如果没有发现这样的复制源,则抛出错误。 备注:调用该函数的用户需要具有SYSADMIN权限。 参数说明: node_name 要查找的复制源的名称 取值范围:字符串,不支持除字母,数字,以及(_?-.)以外的字符。 返回值类型:oid pg_replication_origin_session_setup (node_name) 描述:将当前会话标记为从给定的原点回放,从而允许跟踪回放进度。只能在当前没有选择原点时使用。使用pg_replication_origin_session_reset 命令来撤销。 备注:调用该函数的用户需要具有SYSADMIN权限。 参数说明: node_name 复制源名称。 取值范围:字符串,不支持除字母,数字,以及(_?-.)以外的字符。 pg_replication_origin_session_reset () 描述:取消pg_replication_origin_session_setup()的效果。 备注:调用该函数的用户需要具有SYSADMIN权限。 pg_replication_origin_session_is_setup () 描述:如果在当前会话中选择了复制源则返回真。 备注:调用该函数的用户需要具有SYSADMIN权限。 返回值类型:boolean pg_replication_origin_session_progress (flush) 描述:返回当前会话中选择的复制源的重放位置。 备注:调用该函数的用户需要具有SYSADMIN权限。 参数说明: flush 决定对应的本地事务是否被确保已经刷入磁盘。 取值范围:boolean 返回值类型:LSN pg_replication_origin_xact_setup (origin_lsn, origin_timestamp) 描述:将当前事务标记为重放在给定LSN和时间戳上提交的事务。只能在使用pg_replication_origin_session_setup选择复制源时调用。 备注:调用该函数的用户需要具有SYSADMIN权限。 参数说明: origin_lsn 复制源回放位置。 取值范围:LSN origin_timestamp 事务提交时间。 取值范围:timestamp with time zone pg_replication_origin_xact_reset () 描述:取消pg_replication_origin_xact_setup()的效果。 备注:调用该函数的用户需要具有SYSADMIN权限。 pg_replication_origin_advance (node_name, lsn) 描述: 将给定节点的复制进度设置为给定的位置。这主要用于设置初始位置,或在配置更改或类似的变更后设置新位置。 注意:这个函数的使用不当可能会导致不一致的复制数据。 备注:调用该函数的用户需要具有SYSADMIN权限。 参数说明: node_name 已有复制源名称。 取值范围:字符串,不支持除字母,数字,以及(_?-.)以外的字符。 lsn 复制源回放位置。 取值范围:LSN pg_replication_origin_progress (node_name, flush) 描述:返回给定复制源的重放位置。 备注:调用该函数的用户需要具有SYSADMIN权限。 参数说明: node_name 复制源名称。 取值范围:字符串,不支持除字母,数字,以及(_?-.)以外的字符。 flush 决定对应的本地事务是否被确保已经刷入磁盘。 取值范围:boolean pg_show_replication_origin_status() 描述:获取复制源的复制状态。 备注:调用该函数的用户需要具有SYSADMIN权限。 返回值类型: local_id:oid,复制源id。 external_id:text,复制源名称。 remote_lsn:LSN,复制源的lsn位置。 local_lsn:LSN,本地的lsn位置。 pg_get_publication_tables(pub_name) 描述:根据发布的名称,返回对应发布要发布的表的relid列表 参数说明: pub_name 已存在的发布名称 取值范围:字符串,不支持除字母,数字,以及(_?-.)以外的字符。 返回值类型:relid列表 pg_stat_get_subscription(sub_oid oid) → record 描述: 输入订阅的oid,返回订阅的状态信息。 参数说明: subid 订阅的oid。 取值范围:oid 返回值类型: relid:oid,表的oid。 pid:thread_id,后台apply/sync线程的thread id。 received_lsn:pg_lsn,从发布端接收到的最近的lsn。 last_msg_send_time:timestamp,最近发布端发送消息的时间。 last_msg_receipt_time:timestamp,最新订阅端收到消息的时间。 latest_end_lsn:pg_lsn,最近一次收到保活消息时发布端的lsn。 latest_end_time:timstamp,最近一次收到保活消息的时间。 父主题: 系统管理函数
  • 提示信息函数 report_application_error 描述:PL执行过程中,可以使用此函数来抛ERROR。 返回值类型:void 表1 report_application_error参数说明 参数 类型 说明 是否必选 log text error消息的内容。 是 code int4 error消息对应的error code,范围为:-20999 ~ -20000。 否 父主题: 函数和操作符
  • 数据库对象位置函数 pg_relation_filenode(relation regclass) 描述:指定关系的文件节点数。 返回值类型:oid 备注:pg_relation_filenode接受一个表、索引、序列或压缩表的OID或者名称,并且返回当前分配给它的“filenode”数。文件节点是关系使用的文件名称的基本组件。对大多数表来说,结果和pg_class.relfilenode相同,但对确定的系统目录来说,relfilenode为0而且这个函数必须用来获取正确的值。如果传递一个没有存储的关系,比如一个视图,那么这个函数返回NULL。 pg_relation_filepath(relation regclass) 描述:指定关系的文件路径名。 返回值类型:text 备注:pg_relation_filepath类似于pg_relation_filenode,但是它返回关系的整个文件路径名(相对于数据库的数据目录PGDATA)。 pg_filenode_relation(tablespace oid, filenode oid) 描述:获取对应的tablespace和relfilenode所对应的表名。 返回类型:regclass pg_partition_filenode(partition_oid) 描述:获取到指定分区表的oid锁对应的filenode。 返回类型:oid pg_partition_filepath(partition_oid) 描述:指定分区的文件路径名 返回值类型:text
  • 数据库对象尺寸函数 数据库对象尺寸函数计算数据库对象使用的实际磁盘空间。 pg_column_size(any) 描述:存储一个指定的数值需要的字节数(可能压缩过)。 返回值类型:int 备注:pg_column_size显示用于存储某个独立数据值的空间。 12345 openGauss=# SELECT pg_column_size(1); pg_column_size ---------------- 4(1 row) pg_database_size(oid) 描述:指定OID代表的数据库使用的磁盘空间。 返回值类型:bigint pg_database_size(name) 描述:指定名称的数据库使用的磁盘空间。 返回值类型:bigint 备注:pg_database_size接受一个数据库的OID或者名称,然后返回该对象使用的全部磁盘空间。 示例: 12345 openGauss=# SELECT pg_database_size('postgres'); pg_database_size ------------------ 51590112(1 row) pg_relation_size(oid) 描述:指定OID代表的表或者索引所使用的磁盘空间。 返回值类型:bigint get_db_source_datasize() 描述:估算当前数据库非压缩态的数据总容量 返回值类型:bigint 备注:(1)调用该函数前需要做analyze;(2)通过估算列存的压缩率计算非压缩态的数据总容量。 示例: 1234567 openGauss=# analyze;ANALYZEopenGauss=# select get_db_source_datasize(); get_db_source_datasize------------------------ 35384925667(1 row) pg_relation_size(text) 描述:指定名称的表或者索引使用的磁盘空间。表名称可以用模式名修饰。 返回值类型:bigint pg_relation_size(relation regclass, fork text) 描述:指定表或索引的指定分叉树('main','fsm'或'vm')使用的磁盘空间。 返回值类型:bigint pg_relation_size(relation regclass) 描述:pg_relation_size(..., 'main')的简写。 返回值类型:bigint 备注:pg_relation_size接受一个表、索引、压缩表的OID或者名称,然后返回它们的字节大小。 pg_partition_size(oid,oid) 描述:指定OID代表的分区使用的磁盘空间。其中,第一个oid为表的OID,第二个oid为分区的OID。 返回值类型:bigint pg_partition_size(text, text) 描述:指定名称的分区使用的磁盘空间。其中,第一个text为表名,第二个text为分区名。 返回值类型:bigint pg_partition_indexes_size(oid,oid) 描述:指定OID代表的分区的索引使用的磁盘空间。其中,第一个oid为表的OID,第二个oid为分区的OID。 返回值类型:bigint pg_partition_indexes_size(text,text) 描述:指定名称的分区的索引使用的磁盘空间。其中,第一个text为表名,第二个text为分区名。 返回值类型:bigint pg_indexes_size(regclass) 描述:附加到指定表的索引使用的总磁盘空间。 返回值类型:bigint pg_size_pretty(bigint) 描述:将以64位整数表示的字节值转换为具有单位的易读格式。 返回值类型:text pg_size_pretty(numeric) 描述:将以数值表示的字节值转换为具有单位的易读格式。 返回值类型:text 备注:pg_size_pretty用于把其他函数的结果格式化成一种易读的格式,可以根据情况使用kB 、MB 、GB 、TB。 pg_table_size(regclass) 描述:指定的表使用的磁盘空间,不计索引(但是包含TOAST,自由空间映射和可见性映射)。 返回值类型:bigint pg_tablespace_size(oid) 描述:指定OID代表的表空间使用的磁盘空间。 返回值类型:bigint pg_tablespace_size(name) 描述:指定名称的表空间使用的磁盘空间。 返回值类型:bigint 备注: pg_tablespace_size接受一个数据库的OID或者名称,然后返回该对象使用的全部磁盘空间。 pg_total_relation_size(oid) 描述:指定OID代表的表使用的磁盘空间,包括索引和压缩数据。 返回值类型:bigint pg_total_relation_size(regclass) 描述:指定的表使用的总磁盘空间,包括所有的索引和TOAST数据。 返回值类型:bigint pg_total_relation_size(text) 描述:指定名称的表所使用的全部磁盘空间,包括索引和压缩数据。表名称可以用模式名修饰。 返回值类型:bigint 备注:pg_total_relation_size接受一个表或者一个压缩表的OID或者名称,然后返回以字节计的数据和所有相关的索引和压缩表的尺寸。 datalength(any) 描述:计算一个指定的数据需要的字节数(不考虑数据的管理空间和数据压缩,数据类型转换等情况)。 返回值类型:int 备注:datalength用于计算某个独立数据值的空间。 示例: openGauss=# SELECT datalength(1);datalength------------4(1 row) 目前支持的数据类型及计算方式见下表: 数据类型 存储空间 数值类型 整数类型 TINYINT 1 SMALLINT 2 INTEGER 4 BINARY_INTEGER 4 BIGINT 8 任意精度型 DECIMAL 每4位十进制数占两个字节,小数点前后数字分别计算 NUMERIC 每4位十进制数占两个字节,小数点前后数字分别计算 NUMBER 每4位十进制数占两个字节,小数点前后数字分别计算 序列整型 SMALLSERIAL 2 SERIAL 4 BIGSERIAL 8 LARGESERIAL 每4位十进制数占两个字节,小数点前后数字分别计算 浮点类型 FLOAT4 4 DOUBLE PRECISION 8 FLOAT8 8 BINARY_DOUBLE 8 FLOAT[(p)] 每4位十进制数占两个字节,小数点前后数字分别计算 DEC[(p[,s])] 每4位十进制数占两个字节,小数点前后数字分别计算 INTEGER[(p[,s])] 每4位十进制数占两个字节,小数点前后数字分别计算 布尔类型 布尔类型 BOOLEAN 1 字符类型 字符类型 CHAR n CHAR(n) n CHARACTER(n) n NCHAR(n) n VARCHAR(n) n CHARACTER 字符实际字节数 VARYING(n) 字符实际字节数 VARCHAR2(n) 字符实际字节数 NVARCHAR(n) 字符实际字节数 NVARCHAR2(n) 字符实际字节数 TEXT 字符实际字节数 CLOB 字符实际字节数 时间类型 时间类型 DATE 8 TIME 8 TIMEZ 12 TIMESTAMP 8 TIMESTAMPZ 8 SMALLDATETIME 8 INTERVAL DAY TO SECOND 16 INTERVAL 16 RELTIME 4 ABSTIME 4 TINTERVAL 12
  • 动态数据脱敏函数 该函数为内部功能调用函数,详见《特性描述》中“数据库安全-动态数据脱敏机制”章节。 creditcardmasking(col text, letter char default 'x') 描述:将col字符串后四位之前的数字使用letter替换。 参数:待替换的字符串、替换字符。 返回值类型:text basicmailmasking(col text, letter char default 'x') 描述:将col字符串中第一个'@'之前的字符使用letter替换。 参数:待替换的字符串、替换字符。 返回值类型:text fullmailmasking(col text, letter char default 'x') 描述:将col字符串中出现最后一个'.'之前的字符(除'@'外)使用letter替换。 参数:待替换的字符串、替换字符。 返回值类型:text alldigitsmasking(col text, letter char default '0') 描述:将col字符串中出现的数字使用letter替换。 参数:待替换的字符串、替换字符。 返回值类型:text shufflemasking(col text) 描述:将col字符串中的字符乱序排列。 参数:待替换的字符串、替换字符。 返回值类型:text randommasking(col text) 描述:将col字符串中的字符随机化。 参数:待替换的字符串、替换字符。 返回值类型:text regexpmasking 描述:脱敏策略的内部函数,对字符进行正则表达式替换。 参数:col text, reg text, replace_text text, pos INTEGER default 0, reg_len INTEGER default -1 返回值类型:text 父主题: 函数和操作符
  • 故障注入系统函数 gs_fault_inject(int64, text, text, text, text, text) 描述:该函数不能调用,调用时会报WARNING信息:"unsupported fault injection",并不会对数据库产生任何影响和改变。 参数:int64注入故障类型(0:CLOG扩展页面,1:读取CLOG页面,2:强制死锁)。 text第二个入参在第一入参为2的模式下若为“1”则死锁,其余不死锁;第二个入参在第一入参为0,1时,表示CLOG开始扩展或读取的起始页面号。 text第三个入参在第一入参为0,1时,表示扩展或读取的页面个数。 text第四到六入参为预留参数。 返回值类型:int64 父主题: 函数和操作符
  • 层次递归查询函数 层次递归查询语句中可使用以下函数返回连接路径上的相关信息。 sys_connect_by_path(col, separator) 描述:仅在层次递归查询中适用,用于返回从根节点到当前行的连接路径。 参数col为在路径中显示的列的名称,只支持类型为CHAR/VARCHAR/NVARCHAR2/TEXT的列,参数separator为路径节点之间的分割符。 返回值类型:text 示例: 12345678 openGauss=# select *, sys_connect_by_path(name, '-') from connect_table start with id = 1 connect by prior id = pid; id | pid | name | sys_connect_by_path----+-----+------+--------------------- 1 | 0 | a | -a 2 | 1 | b | -a-b 4 | 1 | d | -a-d 3 | 2 | c | -a-b-c(4 rows) connect_by_root(col) 描述:仅在层次递归查询中适用,用于返回当前行最顶层父亲行中某列的值。 参数col为输出列的名称。 返回值类型:即为所指定列col的数据类型。 示例: 12345678 openGauss=# select *, connect_by_root(name) from connect_table start with id = 1 connect by prior id = pid; id | pid | name | connect_by_root----+-----+------+----------------- 1 | 0 | a | a 2 | 1 | b | a 4 | 1 | d | a 3 | 2 | c | a(4 rows) 父主题: 函数和操作符
  • 全局临时表函数 pg_get_gtt_relstats(relOid) 描述:显示当前会话指定的全局临时表的基本信息。 参数:全局临时表的OID。 返回值类型:record 示例: openGauss=# select * from pg_get_gtt_relstats(74069); relfilenode | relpages | reltuples | relallvisible | relfrozenxid | relminmxid -------------+----------+-----------+---------------+--------------+------------ 74069 | 58 | 13000 | 0 | 11151 | 0(1 row) pg_get_gtt_statistics(relOid, attnum, ''::text) 描述:显示当前会话指定的全局临时表的单列统计信息。 参数:全局临时表的OID和属性attnum。 返回值类型:record 示例: openGauss=# select * from pg_get_gtt_statistics(74069,1,''::text); starelid | starelkind | staattnum | stainherit | stanullfrac | stawidth | stadistinct | stakind1 | stakind2 | stakind3 | stakind4 | stakind5 | staop1 | staop2 | staop3 | staop4 | staop5 | stanumbers1 | stanumbers2 | stanumbers3 | stanumbers4 | stanumbers5 | stavalues1 | stavalues2 | stavalues3 | stavalues4 | stavalues5 | stadndistinct | staextinfo ----------+------------+-----------+------------+-------------+----------+-------------+----------+----------+----------+----------+----------+--------+--------+--------+--------+--------+-------------+-------------+-------------+-------------+-------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------+------------+------------+------------+---------------+------------ 74069 | c | 1 | f | 0 | 4 | -1 | 2 | 3 | 0 | 0 | 0 | 97 | 97 | 0 | 0 | 0 | | {1} | | | | {1,130,260,390,520,650,780,910,1040,1170,1300,1430,1560,1690,1820,1950,2080,2210,2340,2470,2600,2730,2860,2990,3120,3250,3380,3510,3640,3770,3900,4030,4160,4290,4420,4550,4680,4810,4940,5070,5200,5330,5460,5590,5720,5850,5980,6110,6240,6370,6500,6630,6760,6890,7020,7150,7280,7410,7540,7670,7800,7930,8060,8190,8320,8450,8580,8710,8840,8970,9100,9230,9360,9490,9620,9750,9880,10010,10140,10270,10400,10530,10660,10790,10920,11050,11180,11310,11440,11570,11700,11830,11960,12090,12220,12350,12480,12610,12740,12870,13000} | | | | | 0 | (1 row) pg_gtt_attached_pid(relOid) 描述:显示正在使用指定全局临时表的所有线程pid和会话ID。当线程池开启时,如果正在使用全局临时表的会话为detach状态,pid会显示为0,sessionid为会话的ID。 参数:全局临时表的OID。 返回值类型:record 示例: openGauss=# select * from pg_gtt_attached_pid(74069); relid | pid | sessionid -------+-----------------+----------------- 74069 | 139648170456832 | 139648170456832 74069 | 139648123270912 | 139648123270912(2 rows) dbe_perf.get_global_full_sql_by_timestamp(start_timestamp timestamp, end_timestamp timestamp) 描述:获取实例级的全量SQL(Full SQL)信息。 返回值类型:record 表1 dbe_perf.get_global_full_sql_by_timestamp参数说明 参数 类型 描述 start_timestamp timestamp SQL启动时间范围的开始时间点。 end_timestamp timestamp SQL启动时间范围的结束时间点。 dbe_perf.get_global_slow_sql_by_timestamp(start_timestamp timestamp, end_timestamp timestamp) 描述:获取实例级的慢SQL(Slow SQL)信息。 返回值类型:record 表2 dbe_perf.get_global_slow_sql_by_timestamp参数说明 参数 类型 描述 start_timestamp timestamp SQL启动时间范围的开始时间点。 end_timestamp timestamp SQL启动时间范围的结束时间点。 statement_detail_decode(detail text, format text, pretty bool) 解析全量/慢SQL语句中的details字段的信息。 表3 statement_detail_decode参数说明 参数 类型 描述 detail text SQL语句产生的事件的集合(不可读)。 format text 解析输出格式,取值为plaintext或json。 pretty bool 当format为plaintext时,是否以优雅的格式展示: true表示通过“\n”分隔事件。 false表示通过“,”分隔事件。 pg_list_gtt_relfrozenxids() 描述:显示各会话的冻结事务xid。 pid=0的行,显示所有会话中最老的冻结事务xid。 参数:无。 返回值类型:record 示例: openGauss=# select * from pg_list_gtt_relfrozenxids(); pid | relfrozenxid -----------------+-------------- 139648123270912 | 11151 139648170456832 | 11155 0 | 11151(3 rows) 父主题: 函数和操作符
  • Global SysCache特性函数 当前特性是实验室特性,使用时请联系华为工程师提供技术支持。 gs_gsc_table_detail(database_id default NULL, rel_id default NULL) 描述:查看数据库里全局系统缓存的表元数据。调用该函数的用户需要具有SYSADMIN权限。 参数:指定需要查看全局系统缓存的数据库和表,database_id默认值NULL或者-1表示所有的数据库,0表示共享表,其他数字表示指定数据库及共享表,rel_id表示指定表的oid,默认值NULL或者-1表示所有的表,其他值表示指定的表,database_id不存在会报错,rel_id不存在结果为空。 返回值类型:Tuple 示例: select * from gs_gsc_table_detail(-1) limit 1;database_oid | database_name | reloid | relname | relnamespace | reltype | reloftype | relowner | relam | relfilenode | reltablespace | relhasindex | relisshared | relkind | relnatts | relhasoids | relhaspkey | parttype | tdhasuids | attnames | extinfo--------------+---------------+--------+-------------------------+--------------+---------+-----------+----------+-------+-------------+---------------+-------------+-------------+---------+----------+------------+------------+----------+-----------+-----------+---------0 | | 2676 | pg_authid_rolname_index | 11 | 0 | 0 | 10 | 403 | 0 | 1664 | f | t | i | 1 | f | f | n | f | 'rolname' |(1 row) gs_gsc_catalog_detail(database_id default NULL, rel_id default NULL) 描述:查看数据库里全局系统缓存的系统表行信息。调用该函数的用户需要具有SYSADMIN权限。 参数:指定需要查看全局系统缓存的数据库和表,database_id默认值NULL或者-1表示所有的数据库,0表示共享表,其他数字表示指定数据库及共享表,rel_id表示指定表的id,仅包含所有有系统缓存的系统表,默认值NULL或者-1表示所有的表,其他值表示指定的表,database_id不存在会报错,rel_id不存在结果为空。 返回值类型:Tuple 示例: openGauss=# select * from gs_gsc_catalog_detail(16574, 1260); database_id | database_name | rel_id | rel_name | cache_id | self | ctid | infomask | infomask2 | hash_value | refcount-------------+---------------+--------+-----------+----------+--------+--------+----------+-----------+------------+---------- 0 | | 1260 | pg_authid | 10 | (0, 9) | (0, 9) | 10507 | 26 | 531311568 | 10 0 | | 1260 | pg_authid | 11 | (0, 4) | (0, 4) | 2313 | 26 | 365368336 | 1 0 | | 1260 | pg_authid | 11 | (0, 9) | (0, 9) | 10507 | 26 | 3911517328 | 10 0 | | 1260 | pg_authid | 11 | (0, 7) | (0, 7) | 2313 | 26 | 1317799983 | 1 0 | | 1260 | pg_authid | 11 | (0, 5) | (0, 5) | 2313 | 26 | 3664347448 | 1 0 | | 1260 | pg_authid | 11 | (0, 1) | (0, 1) | 2313 | 26 | 276477273 | 1 0 | | 1260 | pg_authid | 11 | (0, 3) | (0, 3) | 2313 | 26 | 2465837659 | 1 0 | | 1260 | pg_authid | 11 | (0, 8) | (0, 8) | 2313 | 26 | 3205288035 | 1 0 | | 1260 | pg_authid | 11 | (0, 6) | (0, 6) | 2313 | 26 | 131811687 | 1 0 | | 1260 | pg_authid | 11 | (0, 2) | (0, 2) | 2313 | 26 | 1226484587 | 1(10 rows) gs_gsc_clean(database_id default NULL) 描述:清理global syscache的缓存,需要注意,正在使用中的数据不会被清理。调用该函数的用户需要具有SYSADMIN权限。 参数:指定需要清理全局系统缓存的数据库,默认值NULL或者-1表示强制清理所有的数据库全局系统缓存,0表示只淘汰共享表的全局系统缓存,其他数字表示淘汰指定数据库以及共享表的全局系统缓存,database_id不存在会报错。 返回值类型:bool 示例: openGauss=# select * from gs_gsc_clean();gs_gsc_clean--------------t(1 row) gs_gsc_dbstat_info(database_id default NULL) 描述:获取本地节点的GSC的内存统计信息,包括tuple、relation、partition的缓存查询,命中,加载、失效、占用空间信息,DB级别的淘汰信息,线程引用信息,内存占用信息。可以用于定位性能问题,例如当发现hits/searches数组远小于1时,可能是global_syscache_threshold设置太小,导致查询命中率下降。调用该函数的用户需要具有SYSADMIN权限。 参数:指定需要查看的数据库全局系统缓存统计信息,NULL或者-1表示查看所有的数据库,0表示只查看共享表信息,其他数字表示查看指定的数据库和共享表的信息。不合法的输入值,database_id不存在会报错。 返回值类型:Tuple 示例: openGauss=# select * from gs_gsc_dbstat_info();database_id | database_name | tup_searches | tup_hits | tup_miss | tup_count | tup_dead | tup_memory | rel_searches | rel_hits | rel_miss | rel_count | rel_dead | rel_memory | part_searches | part_hits | part_miss | part_count | part_dead | part_memory | total_memory | swapout_count | refcount-------------+---------------+--------------+----------+----------+-----------+----------+------------+--------------+----------+----------+-----------+----------+------------+---------------+-----------+-----------+------------+-----------+-------------+--------------+---------------+---------- 0 | | 300 | 235 | 31 | 22 | 2 | 9752 | 598 | 108 | 18 | 18 | 0 | 77720 | 0 | 0 | 0 | 0 | 0 | 0 | 752912 | 0 | 0 16574 | postgres | 3368 | 2289 | 329 | 273 | 0 | 92593 | 1113 | 524 | 48 | 48 | 0 | 340456 | 0 | 0 | 0 | 0 | 0 | 0 | 4124792 | 0 | 10(2 rows) 父主题: 函数和操作符
  • 废弃函数 GaussDB中下列函数在最新版本中已废弃: gs_wlm_get_session_info gs_wlm_get_user_session_info pgxc_get_csn pgxc_get_stat_dirty_tables pgxc_get_thread_wait_status pgxc_gtm_snapshot_status pgxc_is_committed pgxc_lock_for_backup pgxc_lock_for_sp_database pgxc_lock_for_transfer pgxc_log_comm_status pgxc_max_datanode_size pgxc_node_str pgxc_pool_check pgxc_pool_connection_status pgxc_pool_reload pgxc_prepared_xact pgxc_snapshot_status pgxc_stat_dirty_tables pgxc_unlock_for_sp_database pgxc_unlock_for_transfer pgxc_version array_extend prepare_statement_status remote_rto_stat dbe_perf.global_slow_query_info dbe_perf.global_slow_query_info_bytime dbe_perf.global_slow_query_history pg_stat_get_pooler_status pg_stat_get_wlm_node_resource_info pg_stat_get_wlm_session_info_internal DBE_PERF.get_wlm_controlgroup_ng_config() DBE_PERF.get_wlm_user_resource_runtime() global_space_shrink pg_pool_validate gs_stat_ustore table_skewness(text) table_skewness(text, text, text) - - - - 父主题: 函数和操作符
  • 数据损坏检测修复函数 gs_verify_data_file(verify_segment bool) 描述:校验当前实例当前库是否存在文件丢失的情况。校验只包括数据表主文件是否有中间段丢失的情况。默认参数是false,表示不校验段页式表数据文件。参数设置为true时仅校验段页式表文件。默认只有初始化用户、具有sysadmin属性的用户以及在运维模式下具有运维管理员属性的用户可以查看,其余用户需要赋权后才可以使用。 返回的结果: 非段页式表:rel_oid和rel_name是对应文件的表oid和表名,miss_file_path表示丢失文件的相对路径。 段页式表:因所有表存放在相同文件中,所以rel_oid和rel_name无法显示具体表的信息。对于段页式表,如果第一个文件损坏,不会检查出后面的.1 .2等文件。例如3、3.1、3.2损坏,只能检查出3损坏。当段页式文件不足5个时,使用函数检测时,未生成的文件也会校验出来,例如只有1和2文件,校验段页式时,也会检测出3,4,5文件。以下示例,第一个是校验非段页式表的示例,第二是校验段页式表的示例。 参数说明: verify_segment 指定文件校验的范围。false校验非段页式表;true校验段页式表。 取值范围:true和false,默认是false。 返回值类型:record 示例: 校验非段页式表 openGauss=# select * from gs_verify_data_file();node_name | rel_oid | rel_name | miss_file_path------------------+---------+--------------+------------------dn_6001_6002_6003 | 16554 | test | base/16552/24745 校验段页式表 openGauss=# select * from gs_verify_data_file(true); node_name | rel_oid | rel_name | miss_file_path-------------------+---------+----------+---------------- dn_6001_6002_6003 | 0 | none | base/16573/2 gs_repair_file(tableoid Oid,path text, timeout int) 描述:根据传入的参数修复文件,仅支持有正常主备连接的主DN使用。参数依据gs_verify_data_file函数返回的oid和路径填写。段页式表tableoid赋值为0到4,294,967,295的任意值(内部校验根据文件路径判断是否是段页式表文件,段页式表文件则不使用tableoid)。修复成功返回值为true,修复失败会显示具体失败原因。默认只有在主DN节点上,使用初始化用户、具有sysadmin属性的用户以及在运维模式下具有运维管理员属性的用户可以查看,其余用户需要赋权后才可以使用。 当DN实例上存在文件损坏时,进行升主会校验出错,报PANIC退出无法升主,为正常现象。 当文件存在但是大小为0时,此时不会去修复该文件,若想要修复该文件,需要将为0的文件删除后再修复。 删除文件需要等文件fd自动关闭后再修复,人工操作可以执行重启进程、主备切换命令。 参数说明: tableoid 要修复的文件对应的表oid,依据gs_verify_data_file函数返回的列表中rel_oid一列填写。 取值范围: Oid,0 - 4294967295。注意:输入负值等都会被强制转成非负整数类型。 path 需要修复的文件路径,依据gs_verify_data_file函数返回的列表中miss_file_path一列填写。 取值范围:字符串。 timeout 等待备DN回放的时长,修复文件需要等待备DN回放到当前主DN对应的位置,根据备DN回放所需时长设定。 取值范围:60s - 3600s。 返回值类型:bool 示例: openGauss=# select * from gs_repair_file(16554,'base/16552/24745',360);gs_repair_file----------------t local_bad_block_info() 描述:显示本实例页面损坏的情况。从磁盘读取页面,发现页面CRC校验失败时进行记录。默认只有初始化用户、具有sysadmin属性的用户、具有监控管理员属性的用户以及在运维模式下具有运维管理员属性的用户、以及监控用户可以查看,其余用户需要赋权后才可以使用。 显示信息:file_path是损坏文件的相对路径,如果是段页式表,则显示的是逻辑信息,不是实际的物理文件信息。block_num是该文件损坏的具体页面号,页面号从0开始。check_time表示发现页面损坏的时间。repair_time表示修复页面的时间。 返回值类型:record 示例: openGauss=# select * from local_bad_block_info();node_name | spc_node | db_node | rel_node| bucket_node | fork_num | block_num | file_path | check_time | repair_time-----------------+-------+--------+--------+--------------+----------+-----------+-----------------+--------------------------+-------------------------------dn_6001_6002_6003| 1663 | 16552 | 24745 | -1 | 0 | 0 | base/16552/24745 | 2022-01-13 20:19:08.385004+08 | 2022-01-13 20:19:08.407314+08 local_clear_bad_block_info() 描述:清理local_bad_block_info中已修复页面的数据,也就是repair_time不为空的信息。默认只有初始化用户、具有sysadmin属性的用户以及在运维模式下具有运维管理员属性的用户、以及监控用户可以查看,其余用户需要赋权后才可以使用。 返回值类型:bool 示例: openGauss=# select * from local_clear_bad_block_info();result--------t gs_verify_and_tryrepair_page (path text, blocknum oid, verify_mem bool, is_segment bool) 描述:校验本实例指定页面的情况。默认只有在主DN节点上,使用初始化用户、具有sysadmin属性的用户以及在运维模式下具有运维管理员属性的用户可以查看,其余用户需要赋权后才可以使用。 返回的结果信息:disk_page_res表示磁盘上页面的校验结果;mem_page_res表示内存中页面的校验结果;is_repair表示在校验的过程中是否触发修复功能,t表示已修复,f表示未修复。 注意:当DN实例上存在页面损坏时,进行升主会校验出错,报PANIC退出无法升主,为正常现象。不支持hashbucket表页面损坏的修复。 参数说明: path 损坏文件的路径。依据local_bad_block_info中file_path一列填写。 取值范围:字符串。 blocknum 损坏文件的页号。依据local_bad_block_info中block_num一列填写。 取值范围:Oid,0 - 4294967295。注意:输入负值等都会被强制转成非负整数类型。 verify_mem 指定是否校验内存中的指定页面。设定为false时,只校验磁盘上的页面。设置为true时,校验内存中的页面和磁盘上的页面。如果发现磁盘上页面损坏,会将内存中的页面做一个基本信息校验刷盘,修复磁盘上页面。如果校验内存页面时发现页面不在内存中,会经内存接口读取磁盘上的页面。此过程中如果磁盘页面有问题,则会触发远程读自动修复功能。 取值范围:bool,true和false。 is_segment 是否是段页式表。根据local_bad_block_info中的bucket_node列值决定。如果bucket_node为-1时,表示不是段页式表,将is_segment设置为false;非-1的情况将is_segment设置为true。 取值范围:bool,true和false。 返回值类型:record 示例: openGauss=# select * from gs_verify_and_tryrepair_page('base/16552/24745',0,false,false);node_name | path | blocknum | disk_page_res | mem_page_res | is_repair------------------+------------------+------------+-----------------------------+---------------+----------dn_6001_6002_6003 | base/16552/24745 | 0 | page verification succeeded.| | f gs_repair_page(path text, blocknum oid, is_segment bool, timeout int) 描述:修复本实例指定页面,仅支持有正常主备连接的主DN使用。页面修复成功返回true,修复过程中出错会有报错信息提示。默认只有在主DN节点上,使用初始化用户、具有sysadmin属性的用户以及在运维模式下具有运维管理员属性的用户可以查看,其余用户需要赋权后才可以使用。 注意:当DN实例上存在页面损坏时,进行升主会校验出错,报PANIC退出无法升主,为正常现象。不支持hashbucket表页面损坏的修复。 参数说明: path 损坏页面的路径。根据local_bad_block_info中file_path一列设置,或者是gs_verify_and_tryrepair_page函数中path一列设置。 取值范围:字符串。 blocknum 损坏页面的页面号。根据local_bad_block_info中block_num一列设置,或者是gs_verify_and_tryrepair_page函数中blocknum一列设置。 取值范围:Oid,0 - 4294967295。注意:输入负值等都会被强制转成非负整数类型。 is_segment 是否是段页式表。根据local_bad_block_info中的bucket_node列值决定,如果bucket_node为-1时,表示不是段页式表,将is_segment设置为false;非-1的情况将is_segment设置为true。 取值范围:bool,true或者false。 timeout 等待备DN回放的时长。修复页面需要等待备DN回放到当前主DN对应的位置,根据备DN回放所需时长设定。 取值范围:60s - 3600s。 返回值类型:bool 示例: openGauss=# select * from gs_repair_page('base/16552/24745',0,false,60);result--------t gs_verify_urq(index_oid oid, queue_type text, blocknum bigint, verify_type text) 描述:校验索引回收队列的正确性或校验回收队列取索引页性能。 参数说明: index_oid(ubtree索引oid) queue_type(队列类型) empty queue表示潜在队列。 free queue表示可用队列。 single page表示队列单页面。 blocknum(页面号) 队列类型为single page时,校验单个页面blocknum的所有元组。取值范围为[0, 队列文件大小/8192)。 队列类型为empty queue或free queue时,blocknum不等于0校验这个队列所有页面的所有元组,blocknum=0不校验页面元组。 verify_type(验证类型) physics表示校验队列物理结构正确性。 performance表示校验从回收队列取页面的性能。 返回值类型:record 表1 gs_verify_urq参数说明 参数类型 参数名 类型 描述 输入参数 index_oid oid UBTree索引oid 输入参数 queue_type text 队列类型 empty queue:潜在队列。 free queue:可用队列。 single page:队列单页面。 输入参数 blocknum bigint 页面号 输入参数 verify_type text 验证类型 physics:校验校验列物理结构。 performance:校验从回收队列取页面的性能 输出参数 verify_code text 错误码 输出参数 detail text 具体报错描述 示例: openGauss=# select * from gs_verify_urq(16387,'free queue',1,'physics'); verify_code | detail-------------+-------- 该接口当前仅支持USTORE索引表,暂不支持分区Local索引。 gs_repair_urq(index_oid oid) 描述:重建索引回收队列(潜在队列和可用队列)。修复成功显示reinitial the recycle queue of index relation sucessfully。 参数说明: index_oid(ubtree索引oid) 返回值类型:text 示例: openGauss=# select * from gs_repair_urq(16387); result------------------------------------------------------------ reinitial the recycle queue of index relation sucessfully. 该接口当前仅支持USTORE索引表,暂不支持分区Local索引。 父主题: 函数和操作符
  • 其它函数 plan_seed() 描述:获取前一次查询语句的seed值(内部使用)。 返回值类型:int pg_stat_get_env() 描述:获取当前节点的环境变量信息,仅sysadmin和monitor admin可以访问。 返回值类型:record 示例: openGauss=# select pg_stat_get_env(); pg_stat_get_env--------------------------------------------------------------------------------------------------------------------------------------- (sgnode,"localhost,XXX.XXX.XXX.XXX",28589,26000,/home/omm,/home/omm/data/single_node,pg_log)(1 row) pg_catalog.plancache_clean() 描述:清理节点上无人使用的全局计划缓存。 返回值类型:bool pg_catalog.plancache_status() 描述:显示节点上全局计划缓存的信息,函数返回信息和GLOBAL_PLANCACHE_STATUS一致。 返回值类型:record textlen(text) 描述:提供查询text的逻辑长度的方法。 返回值类型:int threadpool_status() 描述:显示线程池中工作线程及会话的状态信息。 返回值类型:record get_local_active_session() 描述:提供当前节点保存在内存中的历史活跃session状态的采样记录。 返回值类型:record pg_stat_get_thread() 描述:提供当前节点下所有线程的状态信息,sysadmin和monitor admin用户可以查看所有线程信息,普通用户查看本用户的线程信息。 返回值类型:record pg_stat_get_sql_count() 描述:提供当前节点中用户执行的SELECT/UPDATE/INSERT/DELETE/MERGE INTO语句的计数结果,sysadmin和monitor admin用户可以查看所有用户的信息,普通用户查看本用户的统计信息。 返回值类型:record pg_stat_get_data_senders() 描述:提供当前活跃的数据复制发送线程的详细信息。 返回值类型:record get_wait_event_info() 描述:提供wait event事件的具体信息。 返回值类型:record generate_wdr_report(begin_snap_id bigint, end_snap_id bigint, report_type cstring, report_scope cstring, node_name cstring) 描述:基于两个snapshot生成系统诊断报告。需要在postgres库下执行,默认初始化用户或monadmin用户可以访问。只可在系统库中查询到结果,用户库中无法查询。 返回值类型:record 表1 generate_wdr_report 参数说明 参数 说明 取值范围 begin_snap_id 生成某段时间内性能诊断报告的开始snapshotid。 - end_snap_id 结束snapshot的id,默认end_snap_id大于begin_snap_id。 - report_type 指定生成report的类型。 summary detail all,即同时包含summary 和 detail。 report_scope 指定生成report的范围。 cluster:数据库级别的信息 node:节点级别的信息 node_name 在report_scope指定为node时,需要把该参数指定为对应节点的名称。(节点名称可以执行select * from pg_node_env;查询)。 在report_scope为cluster时,该值可以省略或者指定为空或NULL。 cluster:省略/空/NULL node:GaussDB中的节点名称 create_wdr_snapshot() 描述:手工生成系统诊断快照,该函数需要sysadmin权限。 返回值类型:text kill_snapshot() 描述:kill后台的WDR snapshot线程,调用该函数的用户需要具有SYSADMIN权限或具有REPLICATION权限或继承了内置角色gs_role_replication的权限。 返回值类型:void capture_view_to_json(text,integer) 描述:将视图的结果存入GUC: perf_directory所指定的目录,如果is_crossdb为1,则表示对于所有的database都会访问一次view;如果is_crossdb为0,则表示仅对当前database进行一次视图访问。该函数只有sysadmin和monitor admin用户可以执行。 返回值类型:int reset_unique_sql 描述:用来清理数据库节点内存中的Unique SQL(需要sysadmin权限)。 返回值类型:bool 表2 reset_unique_sql参数说明 参数 类型 描述 scope text 清理范围类型: 'GLOBAL':清理所有的节点,如果是'GLOBAL',则只可以为主节点执行此函数。 'LOCAL':清理本节点。 clean_type text 'BY_USERID':按用户ID来进行清理Unique SQL。 'BY_CNID':按主节点的ID来进行清理Unique SQL。 'ALL':全部清理。 clean_value int8 具体清理type对应的清理值。 wdr_xdb_query(db_name_str text, query text) 描述:提供本地跨数据库执行query的能力。例如: 在连接到postgres库时, 访问test库下的表。 select col1 from wdr_xdb_query('dbname=test','select col1 from t1') as dd(col1 int); 返回值类型:record pg_wlm_jump_queue(pid int) 描述:调整任务到数据库主节点队列的最前端。 返回值类型:boolean true:成功。 false:失败。 gs_wlm_switch_cgroup(pid int, cgroup text) 描述:调整作业的优先级到新控制组。 返回值类型:boolean true:成功。 false:失败。 pv_session_memctx_detail(threadid tid, MemoryContextName text) 描述:将线程tid的MemoryContextName内存上下文信息记录到“$GAUSSLOG/pg_log/${node_name}/dumpmem”目录下的“threadid_timestamp.log”文件中。其中threadid可通过视图GS_SESSION_MEMORY_DETAIL中的sessid后获得。在正式发布的版本中仅接受MemoryContextName为空串(两个单引号表示输入为空串,即'')的输入,此时会记录所有的内存上下文信息,否则不会有任何操作。对供内部开发人员和测试人员调试用的DEBUG版本,可以指定需要统计的MemoryContextName,此时会将该Context所有的内存使用情况记录到指定文件。该函数需要管理员权限的用户才能执行。 返回值类型:boolean true:成功。 false:失败。 pg_shared_memctx_detail(MemoryContextName text) 描述:将MemoryContextName内存上下文信息记录到“$GAUSSLOG/pg_log/${node_name}/dumpmem”目录下的“threadid_timestamp.log”文件中。该函数功能仅在DEBUG版本中供内部开发人员和测试人员调试使用,在正式发布版本中调用该函数不会有任何操作。该函数需要管理员权限的用户才能执行。 返回值类型:boolean true:成功。 false:失败。 local_bgwriter_stat() 描述:显示本实例的bgwriter线程刷页信息,候选buffer链中页面个数,buffer淘汰信息。 返回值类型:record local_candidate_stat() 描述:显示本实例的候选buffer链中页面个数,buffer淘汰信息,包含normal buffer pool和segment buffer pool。 返回值类型:record local_ckpt_stat() 描述:显示本实例的检查点信息和各类日志刷页情况。 返回值类型:record local_double_write_stat() 描述:显示本实例的双写文件的情况。 返回值类型:record 表3 local_double_write_stat参数说明 参数 类型 描述 node_name text 实例名称。 curr_dwn int8 当前双写文件的序列号。 curr_start_page int8 当前双写文件恢复起始页面。 file_trunc_num int8 当前双写文件复用的次数。 file_reset_num int8 当前双写文件写满后发生重置的次数。 total_writes int8 当前双写文件总的I/O次数。 low_threshold_writes int8 低效率写双写文件的I/O次数(一次I/O刷页数量少于16页面)。 high_threshold_writes int8 高效率写双写文件的I/O次数(一次I/O刷页数量多于一批,421个页面)。 total_pages int8 当前刷页到双写文件区的总的页面个数。 low_threshold_pages int8 低效率刷页的页面个数。 high_threshold_pages int8 高效率刷页的页面个数。 file_id int8 当前双写文件的id号。 local_single_flush_dw_stat() 描述:显示本实例的单页面淘汰双写文件的情况。 返回值类型:record local_pagewriter_stat() 描述:显示本实例的刷页信息和检查点信息。 返回值类型:record local_redo_stat() 描述:显示本实例的备机的当前回放状态。 返回值类型:record 备注:返回的回放状态主要包括当前回放位置,回放最小恢复点位置等信息。 local_recovery_status() 描述:显示本实例的主机和备机的日志流控信息。 返回值类型:record gs_wlm_node_recover(boolean isForce) 描述:获取当前内存中记录的TopSQL查询语句级别相关统计信息,当传入的参数不为0时,会将这部分信息从内存中清理掉。 返回值类型:record gs_wlm_node_clean(cstring nodename) 描述:动态负载管理(当前特性是实验室特性,使用时请联系华为工程师提供技术支持)节点故障后做数据清理操作。该函数只有管理员用户可以执行,属于数据库实例管理模块调用的,不建议用户直接调用。该视图在集中式和单机环境上不支持。 返回值类型:bool gs_cgroup_map_ng_conf(group name) 描述:读取指定逻辑数据库的cgroup配置文件。 返回值类型:record gs_wlm_switch_cgroup(sess_id int8, cgroup name) 描述:切换指定会话的控制组。 返回值类型:record comm_client_info() 描述:用于查询单个节点活跃的客户端连接信息。 返回值类型:setof record pg_sync_cstore_delta(text) 描述:同步指定列存表的delta表表结构,使其与列存表主表一致。 返回值类型:bigint pg_sync_cstore_delta() 描述:同步所有列存表的delta表表结构,使其与列存表主表一致。 返回值类型:bigint pg_get_flush_lsn() 描述:返回当前节点flush的xlog位置。 返回值类型:text pg_get_sync_flush_lsn() 描述:返回当前节点多数派flush的xlog位置。 返回值类型:text gs_create_log_tables() 描述:用于创建运行日志和性能日志(当前特性是实验室特性,使用时请联系华为工程师提供技术支持)的外表和视图。 返回值类型:void 示例: openGauss=# select gs_create_log_tables(); gs_create_log_tables----------------------(1 row) dbe_perf.get_global_full_sql_by_timestamp(start_timestamp timestamp with time zone, end_timestamp timestamp with time zone) 描述:获取数据库级的全量SQL(Full SQL)信息。只可在系统库中查询到结果,用户库中无法查询。 返回值类型:record 表4 dbe_perf.get_global_full_sql_by_timestamp参数说明 参数 类型 描述 start_timestamp timestamp with time zone SQL启动时间范围的开始时间点。 end_timestamp timestamp with time zone SQL启动时间范围的结束时间点。 dbe_perf.get_global_slow_sql_by_timestamp(start_timestamp timestamp with time zone, end_timestamp timestamp with time zone) 描述:获取数据库级的慢SQL(Slow SQL)信息。只可在系统库中查询到结果,用户库中无法查询。 返回值类型:record 表5 dbe_perf.get_global_slow_sql_by_timestamp参数说明 参数 类型 描述 start_timestamp timestamp with time zone SQL启动时间范围的开始时间点。 end_timestamp timestamp with time zone SQL启动时间范围的结束时间点。 statement_detail_decode(detail text, format text, pretty boolean) 描述:解析全量/慢SQL语句中的details字段的信息。只可在系统库中查询到结果,用户库中无法查询。 返回值类型:text 表6 statement_detail_decode参数说明 参数 类型 描述 detail text SQL语句产生的事件的集合(不可读)。 format text 解析输出格式,取值为 plaintext。 pretty boolean 当format为plaintext时,是否以优雅的格式展示: true表示通过“\n”分隔事。 false表示通过“,”分隔事件。 pg_control_system() 描述:返回系统控制文件状态。 返回类型:SETOF record pg_control_checkpoint() 描述:返回系统检查点状态。 返回类型:SETOF record get_prepared_pending_xid 描述:当恢复完成时,返回nextxid。 参数:nan 返回值类型:text pg_clean_region_info 描述:清理regionmap。 参数:nan 返回值类型:character varying pg_get_delta_info 描述:从单个dn获取delta info。 参数:rel text, schema_name text 返回值类型:part_name text, live_tuple bigint, data_size bigint, blocknum bigint pg_get_replication_slot_name 描述:获取slot name。 参数:nan 返回值类型:text pg_get_running_xacts 描述:获取运行中的xact。 参数:nan 返回值类型:handle integer, gxid xid, state tinyint, node text, xmin xid, vacuum boolean, timeline bigint, prepare_xid xid, pid bigint, next_xid xid pg_get_variable_info 描述:获取共享内存变量cache。 参数:nan 返回值类型:node_name text, nextOid oid, nextXid xid, oldestXid xid, xidVacLimit xid, oldestXidDB oid, lastExtendCSNLogpage xid, startExtendCSNLogpage xid, nextCommitSeqNo xid, latestCompletedXid xid, startupMaxXid xid pg_get_xidlimit 描述:从共享内存获取事物id信息。 参数:nan 返回值类型:nextXid xid, oldestXid xid, xidVacLimit xid, xidWarnLimit xid, xidStopLimit xid, xidWrapLimit xid, oldestXidDB oid pg_relation_compression_ratio 描述:查询表压缩率,默认返回1.0。 参数:text 返回值类型:real pg_relation_with_compression 描述:查询表是否压缩。 参数:text 返回值类型:boolean pg_stat_file_recursive 描述:列出路径下所有文件。 参数:location text 返回值类型:path text, filename text, size bigint, isdir boolean pg_stat_get_activity_for_temptable 描述:返回临时表相关的后台进程的记录。 参数:nan 返回值类型:datid oid, timelineid integer, tempid integer, sessionid bigint pg_stat_get_activity_ng 描述:返回nodegroup相关的后台进程的记录。 参数:pid bigint 返回值类型:datid oid, pid bigint, sessionid bigint, node_group text pg_stat_get_cgroup_info 描述:返回cgroup信息。 参数:nan 返回值类型:cgroup_name text, percent integer, usage_percent integer, shares bigint, usage bigint, cpuset text, relpath text, valid text, node_group text pg_stat_get_realtime_info_internal 描述:返回实时信息,当前该接口已不可用,返回FailedToGetSessionInfo。 参数:oid, oid, bigint, cstring, oid 返回值类型:text pg_stat_get_workload_struct_info 描述:返回负载管理(当前特性是实验室特性,使用时请联系华为工程师提供技术支持)数据结构。 参数:nan 返回值类型:text pg_test_err_contain_err 描述:测试错误类型和返回信息。 参数:integer 返回值类型:void get_global_user_transaction() 描述:返回所有节点上各用户的事务相关信息。 返回值类型:node_name name, usename name, commit_counter bigint, rollback_counter bigint, resp_min bigint, resp_max bigint, resp_avg bigint, resp_total bigint, bg_commit_counter bigint, bg_rollback_counter bigint, bg_resp_min bigint, bg_resp_max bigint, bg_resp_avg bigint, bg_resp_total bigint pg_collation_for 描述:返回入参字符串对应的排序规则。 参数:any(如果是常量必须进行显式类型转换) 返回值类型:text pgxc_unlock_for_sp_database(name Name) 描述:释放指定数据库锁。 参数:数据库名 返回值类型:布尔 pgxc_lock_for_sp_database(name Name) 描述:对指定的数据库加锁。 参数:数据库名 返回值类型:布尔 copy_error_log_create() 描述:创建COPY FROM容错机制所需要的错误表(public.pgxc_copy_error_log)。 返回值类型:Boolean 此函数会尝试创建public.pgxc_copy_error_log表,表的详细信息请参见表7。 在relname列上创建B-tree索引,并REVOKE ALL on public.pgxc_copy_error_log FROM public对错误表进行权限控制(与COPY语句权限一致)。 由于尝试创建的public.pgxc_copy_error_log定义是一张行存表,因此数据库实例上必须支持行存表的创建才能够正常运行此函数,并使用后续的COPY容错功能。需要特别注意的是,enable_hadoop_env这个GUC参数开启后会禁止在数据库实例内创建行存表(GaussDB默认为off)。 此函数自身权限为Sysadmin及以上(与错误表、COPY权限一致)。 若创建前public.pgxc_copy_error_log表已存在或者copy_error_log_relname_idx索引已存在,则此函数会报错回滚。 表7 错误表public.pgxc_copy_error_log信息 列名称 类型 描述 relname character varying 表名称。以模式名.表名形式显示。 begintime timestamp with time zone 出现数据格式错误的时间。 filename character varying 出现数据格式错误的数据源文件名。 lineno bigint 在数据源文件中,出现数据格式错误的行号。 rawrecord text 在数据源文件中,出现数据格式错误的原始记录。 detail text 详细错误信息。 dynamic_func_control(scope text, function_name text, action text, "{params}" text[]) 描述:动态开启内置的功能,当前仅支持动态开启全量SQL。 返回值类型:record 表8 dynamic_func_control参数说明 参数 类型 描述 scope text 动态开启功能的范围,当前仅支持'LOCAL'。 function_name text 功能的名称,当前仅支持'STMT'。 action text 当function_name为'STMT'时,action仅支持TRACK/UNTRACK/LIST/CLEAN: TRACK - 开始记录归一化SQL的全量SQL信息。 UNTRACK - 取消记录归一化SQL的全量SQL信息。 LIST - 列取当前TRACK的归一化SQL的信息。 CLEAN - 清理记录当前归一化SQL的信息。 params text[] 当function_name为'STMT'时,对应不同的action时,对应的params设置如下: TRACK - '{"归一化SQLID", "L0/L1/L2"}' UNTRACK - '{"归一化SQLID"}' LIST - '{}' CLEAN - '{}' gs_parse_page_bypath(path text, blocknum bigint, relation_type text, read_memory boolean) 描述:用于解析指定表页面,并返回存放解析内容的路径。 返回值类型:text 备注:必须是系统管理员或运维管理员才能执行此函数。 表9 gs_parse_page_bypath参数说明 参数 类型 描述 path text 对于普通表或段页式表,相对路径为:tablespace name/database oid/表的relfilenode(物理文件名)。例如:base/16603/16394。 表文件的相对路径可以通过pg_relation_filepath(table_name text)查找。分区表的路径可以查看pg_partition系统表和调用pg_partition_filepath(partition_oid)。 合法的path格式列举: global/relNode base/dbNode/relNode pg_tblspc/spcNode/version_dir/dbNode/relNode blocknum bigint -1:所有block的信息(强制从磁盘解析)。 0~MaxBlockNumber:对应block的信息。 relation_type text heap(astore 表) uheap(ustore 表) btree(BTree 索引) ubtree(UBTree 索引) segment(段页式) indexurq(ustore 回收队列) read_memory boolean false,从磁盘文件解析。 true,首先尝试从共享缓冲区中解析该页面;如果共享缓冲区中不存在,则从磁盘文件解析。 gs_xlogdump_lsn(start_lsn text, end_lsn text) 描述:用于解析指定lsn范围之内的XLOG日志,并返回存放解析内容的路径。可以通过pg_current_xlog_location()获取当前XLOG位置。 返回值类型:text 参数:LSN起始位置,LSN结束位置 备注:必须是系统管理员或运维管理员才能执行此函数。 gs_xlogdump_xid(c_xid xid) 描述:用于解析指定xid的XLOG日志,并返回存放解析内容的路径。可以通过txid_current()获取当前事务ID。 参数:事务ID 返回值类型:text 备注:必须是系统管理员或运维管理员才能执行此函数。 gs_xlogdump_tablepath(path text, blocknum bigint, relation_type text) 描述:用于解析指定表页面对应的日志,并返回存放解析内容的路径。 返回值类型:text 备注:必须是系统管理员或运维管理员才能执行此函数。 表10 gs_xlogdump_tablepath参数说明 参数 类型 描述 path text 对于普通表或段页式表,相对路径为:tablespace name/database oid/表的relfilenode(物理文件名)。例如:base/16603/16394。 表文件的相对路径可以通过pg_relation_filepath(table_name text)查找。分区表的路径可以查看pg_partition系统表和调用pg_partition_filepath(partition_oid)。 合法的path格式列举: global/relNode base/dbNode/relNode pg_tblspc/spcNode/version_dir/dbNode/relNode blocknum bigint -1:所有block的信息(强制从磁盘解析)。 0~MaxBlockNumber:对应block的信息。 relation_type text heap(astore 表) uheap(ustore 表) btree(BTree 索引) ubtree(UBTree 索引) segment(段页式) indexurq(ustore 回收队列) gs_xlogdump_parsepage_tablepath(path text, blocknum bigint, relation_type text, read_memory boolean) 描述:用于解析指定表页面和表页面对应的日志,并返回存放解析内容的路径。可以看做一次执行gs_parse_page_bypath和gs_xlogdump_tablepath。该函数执行的前置条件是表文件存在。如果想查看已删除的表的相关日志,请直接调用gs_xlogdump_tablepath。 返回值类型:text 备注:必须是系统管理员或运维管理员才能执行此函数。 表11 gs_xlogdump_parsepage_tablepath参数说明 参数 类型 描述 path text 对于普通表或段页式表,相对路径为:tablespace name/database oid/表的relfilenode(物理文件名);例如:base/16603/16394 表文件的相对路径可以通过pg_relation_filepath(table_name text)查找。分区表的路径可以查看pg_partition系统表和调用pg_partition_filepath(partition_oid)。 合法的path格式列举: global/relNode base/dbNode/relNode pg_tblspc/spcNode/version_dir/dbNode/relNode blocknum bigint -1:所有block的信息(强制从磁盘解析)。 0~MaxBlockNumber:对应block的信息。 relation_type text heap(astore 表) uheap(ustore 表) btree(BTree 索引) ubtree(UBTree 索引) segment(段页式) indexurq(ustore 回收队列) read_memory boolean false,从磁盘文件解析 true,首先尝试从共享缓冲区中解析该页面;如果共享缓冲区中不存在,则从磁盘文件解析 gs_index_verify(Oid oid, uint32 blkno) 描述:用于校验UBtree索引页面或者索引树上key的顺序是否正确。 返回值类型:record 表12 gs_index_verify参数说明 参数 类型 描述 oid Oid 索引文件relfilenode,可以通过select relfilenode from pg_class where relname='name'查询,其中name表示对应的索引文件名字。 blkno uint32 0 ,表示检验整个索引树上所有页面。 大于0,表示校验页面编码等于blkno的索引页面。 gs_index_recycle_queue(Oid oid, int type, uint32 blkno) 描述:用于解析UBtree索引回收队列信息。 返回值类型:record 表13 gs_index_recycle_queue参数说明 参数 类型 描述 oid Oid 索引文件relfilenode,可以通过select relfilenode from pg_class where relname='name'查询,其中name表示对应的索引文件名字。 type int 0,表示解析整个待回收队列。 1,表示解析整个空页队列。 2,表示解析单个页面。 blkno uint32 回收队列页面编号,该参数只有在type=2的时候有效,blkno有效取值范围为1~4294967294。 gs_stat_wal_entrytable(int64 idx) 描述:用于输出xlog中预写日志插入状态表的内容。 返回值类型:record 表14 gs_stat_wal_entrytable参数说明 参数类型 参数名 类型 描述 输入参数 idx int64 -1:查询数组所有元素。 0-最大值:具体某个数组元素内容。 输出参数 idx uint64 记录对应数组中的下标。 输出参数 endlsn uint64 记录的LSN标签。 输出参数 lrc int32 记录对应的LRC。 输出参数 status uint32 标识当前entry对应的xlog是否已经完全拷贝到wal buffer中: 0:非COPIED 1:COPIED gs_walwriter_flush_position() 描述:输出预写日志的刷新位置。 返回值类型:record 表15 gs_walwriter_flush_position参数说明 参数类型 参数名 类型 描述 输出参数 last_flush_status_entry int32 Xlog flush上一个刷盘的tblEntry下标索引。 输出参数 last_scanned_lrc int32 Xlog flush上一次扫描到的最后一个tblEntry记录的LRC。 输出参数 curr_lrc int32 WALInsertStatusEntry状态表中LRC最新的使用情况,该LRC表示下一个Xlog记录写入时在WALInsertStatusEntry对应的LRC值。 输出参数 curr_byte_pos uint64 Xlog记录写入WAL文件,最新分配的位置,下一个xlog记录插入点。 输出参数 prev_byte_size uint32 上一个xlog记录的长度。 输出参数 flush_result uint64 当前全局xlog刷盘的位置。 输出参数 send_result uint64 当前主机上xlog发送位置。 输出参数 shm_rqst_write_pos uint64 共享内存中记录的XLogCtl中LogwrtRqst请求的write位置。 输出参数 shm_rqst_flush_pos uint64 共享内存中记录的XLogCtl中LogwrtRqst请求的flush位置。 输出参数 shm_result_write_pos uint64 共享内存中记录的XLogCtl中LogwrtResult的write位置。 输出参数 shm_result_flush_pos uint64 共享内存中记录的XLogCtl中LogwrtResult的flush位置。 输出参数 curr_time text 当前时间。 gs_walwriter_flush_stat(int operation) 描述:用于统计预写日志write与sync的次数频率与数据量,以及xlog文件的信息。 返回值类型:record 表16 gs_walwriter_flush_stat参数说明 参数类型 参数名 类型 描述 输入参数 operation int -1:关闭统计开关(默认状态为关闭)。 0:打开统计开关。 1:查询统计信息。 2:重置统计信息。 输出参数 write_times uint64 Xlog调用write接口的次数。 输出参数 sync_times uint64 Xlog调用sync接口次数。 输出参数 total_xlog_sync_bytes uint64 Backend线程请求写入xlog总量统计值。 输出参数 total_actual_xlog_sync_bytes uint64 调用sync接口实际刷盘的xlog总量统计值。 输出参数 avg_write_bytes uint32 每次调用XLogWrite接口请求写的xlog量。 输出参数 avg_actual_write_bytes uint32 实际每次调用write接口写的xlog量。 输出参数 avg_sync_bytes uint32 平均每次请求sync的xlog量。 输出参数 avg_actual_sync_bytes uint32 实际每次调用sync刷盘xlog量。 输出参数 total_write_time uint64 调用write操作总时间统计(单位:us)。 输出参数 total_sync_time uint64 调用sync操作总时间统计(单位:us)。 输出参数 avg_write_time uint32 每次调用write接口平均时间(单位:us)。 输出参数 avg_sync_time uint32 每次调用sync接口平均时间(单位:us)。 输出参数 curr_init_xlog_segno uint64 当前最新创建的xlog段文件编号。 输出参数 curr_open_xlog_segno uint64 当前正在写的xlog段文件编号。 输出参数 last_reset_time text 上一次重置统计信息的时间。 输出参数 curr_time text 当前时间。 gs_catalog_attribute_records() 描述:对于指定的系统表oid,返回该系统表对应的各个字段的定义。仅支持oid小于10000的普通系统表(不支持索引、toast表等)。 参数:系统表oid 返回值类型:record gs_comm_proxy_thread_status() 描述:用于在数据库实例配置用户态网络的场景下,代理通信库comm_proxy收发数据包统计。 参数:nan 返回值类型:record 此函数的查询仅在集中式环境开始部署用户态网络,且comm_proxy_attr参数中enable_dfx配置为true的条件下显示具体信息。其他场景报错不支持查询。 pg_ls_tmpdir() 描述:返回默认表空间下临时目录(pgsql_tmp)中每个文件的名称、大小和最后修改时间。 参数:nan 返回值类型:record 备注:必须是系统管理员或者监控管理员才能执行此函数。 参数类型 参数名 类型 描述 输出参数 name text 文件名称 输出参数 size int8 文件大小(单位:byte) 输出参数 modification timestamptz 文件最后修改时间 pg_ls_tmpdir(oid) 描述:返回指定表空间下临时目录(pgsql_tmp)中每个文件的名称、大小和最后修改时间。 参数:oid 返回值类型:record 备注:必须是系统管理员或者监控管理员才能执行此函数。 参数类型 参数名 类型 描述 输入参数 oid oid 表空间id 输出参数 name text 文件名称 输出参数 size int8 文件大小(单位:byte) 输出参数 modification timestamptz 文件最后修改时间 pg_ls_waldir() 描述:返回预写日志(WAL)目录中每个文件的名称、大小和最后修改时间。 参数:nan 返回值类型:record 备注:必须是系统管理员或者监控管理员才能执行此函数。 参数类型 参数名 类型 描述 输出参数 name text 文件名称 输出参数 size int8 文件大小(单位:byte) 输出参数 modification timestamptz 文件最后修改时间 gs_write_term_log(void) 描述:写入一条日志记录DN节点当前的term值。备DN节点返回false,主DN节点写入成功后返回true。 返回值类型:Boolean 父主题: 系统管理函数
  • Undo系统函数 gs_undo_meta(type, zoneId, location) 描述:Undo各模块元信息。 参数说明: type(元信息类型) 0表示Undo Zone(Record) 对应的元信息。 1表示Undo Zone(Transaction Slot) 对应的元信息。 2表示Undo Space(Record) 对应的元信息。 3表示Undo Space(Transaction Slot) 对应的元信息。 zoneId(undo zone编号) -1表示所有undo zone的元信息。 0-1024*1024表示对应zoneid的元信息。 location(读取位置) 0表示从当前内存中读取。 1表示从物理文件中读取。 返回值类型:record 表1 gs_undo_meta(0,-1,0)输出示例 参数类型 参数名 类型 描述 输出参数 zoneId oid undo zone的id。 输出参数 persistType oid 持久化级别。 输出参数 insert text 下一条插入的undo记录位置。 输出参数 discard text 普通回收到的undo记录位置。 输出参数 end text 强制回收掉undo记录位置,小于它的undo记录已经被回收。 输出参数 used text 已经使用的undo空间。 输出参数 lsn text 修改zone的lsn。 输出参数 pid oid zone绑定的进程id。 gs_undo_translot(location, zoneId) 描述:Undo事务槽信息。 参数说明: location(读取位置) 0表示从当前内存中读取。 1表示从物理文件中读取。 zoneId(undo zone编号) -1表示所有undo zone的元信息。 0-1024*1024表示对应zoneId的元信息。 返回值类型:record 表2 gs_undo_translot(0,-1)输出示例 参数类型 参数名 类型 描述 输出参数 groupId oid 使用的undo zone id。 输出参数 xactId text 事务id。 输出参数 startUndoPtr text slot对应事务起始插入undo记录位置。 输出参数 endUndoPtr text slot对应事务结束插入undo记录位置。 输出参数 lsn text 对应slot指针。 输出参数 slot_states oid 事务状态,0表示已经提交,1表示正在执行中,2表示回滚中,3表示回滚完成。 gs_stat_undo() 描述:Undo统计信息。 返回值类型:record 表3 gs_stat_undo参数说明 参数类型 参数名 类型 描述 输出参数 curr_used_zone_count uint32 当前使用的Undo zone数量。 输出参数 top_used_zones text 前三个使用量最大的Undo zone信息,格式输出为: (zoneId1:使用大小,zoneId2:使用大小,zoneId3:使用大小)。 输出参数 curr_used_undo_size uint32 当前使用的Undo总空间大小,单位为MB。 输出参数 undo_threshold uint32 为guc参数undo_space_limit_size * 80%计算的结果,单位为MB。 输出参数 oldest_xid_in_undo uint64 当前Undo空间回收到的事务xid(小于该xid事务产生的Undo记录都已经被回收)。 输出参数 oldest_xmin uint64 最老的活跃事务。 输出参数 total_undo_chain_len int64 所有访问过的Undo链总长度。 输出参数 max_undo_chain_len int64 最大访问过的Undo链长度。 输出参数 create_undo_file_count uint32 创建的Undo文件数量统计。 输出参数 discard_undo_file_count uint32 删除的Undo文件数量统计。 gs_undo_record(undoptr) 描述:Undo记录解析。 参数说明: undoptr(undo记录指针) 返回值类型:record gs_undo_dump_parsepage_mv(relpath text, blkno bigint, reltype text, rmem boolean) 描述:解析ustore数据表磁盘页面的页头信息,每个元组的头部信息,标识位信息以及所有可以查询到undo历史版本信息。 返回值类型:text 备注:必须是系统管理员或者运维管理人员才能执行此函数。 该接口当前仅支持USTORE数据表。 表4 gs_undo_dump_parsepage_mv参数说明 参数类型 参数名 类型 描述 输入参数 relpath text ustore表数据文件相对路径,相对路径格式为:tablespace name/database oid/relfilenode,例如base/16603/16384, 表对应数据文件的相对路径查找可以通过pg_relation_filepath('tablename')查询。 输入参数 blkno bigint -1 解析所有block页面。 0-MaxBlocNumber解析指定的block页面。 输入参数 reltype text 表类型,目前仅支持ustore数据表,取值为uheap。 输入参数 rmem boolean false true 目前仅支持false,从磁盘文件上解析对应的页面。 输出参数 output text 解析结果文件的绝对路径。 gs_undo_meta_dump_zone(zone_id int, read_memory boolean) 描述:解析Undo模块中zone的元信息。 返回值类型:record 表5 gs_undo_meta_dump_zone参数说明 参数类型 参数名 类型 描述 输入参数 zone_id int Undo zone编号: -1:查询所有Undo zone。 0-1,048,575:查询对应zone_id编号的undo zone元信息。 输入参数 read_memory boolean true:从当前内存中读取。 false:从物理文件中读取。 输出参数 zone_id int Undo zone编号。 输出参数 persist_type int 持久化级别: 0:普通表 1:无日志表 2:临时表 输出参数 insert text 下一条插入的undo记录位置。 输出参数 discard text 普通回收到的undo记录位置。 输出参数 forcediscard text 强制回收掉undo记录位置,小于它的undo记录已经被回收。 输出参数 lsn text 修改zone的lsn。 gs_undo_meta_dump_spaces(zone_id int, read_memory boolean) 描述:解析Undo模块中undo记录空间,undo slot空间的元信息。 返回值类型:record 表6 gs_undo_meta_dump_spaces参数说明 参数类型 参数名 类型 描述 输入参数 zone_id int Undo zone编号: -1:查询所有Undo zone。 0-1,048,575:查询对应zone_id编号的undo zone元信息。 输入参数 read_memory boolean true:从当前内存中读取。 false:从物理文件中读取。 输出参数 zone_id int Undo zone编号。 输出参数 undorecord_space_tail text Undo record空间的结尾位置。 输出参数 undorecord_space_head text Undo record空间的起始位置。 输出参数 undorecord_space_lsn text 修改Undo record空间lsn。 输出参数 undoslot_space_tail text Undo slot空间的结尾位置。 输出参数 undoslot_space_head text Undo slot空间的起始位置。 输出参数 undoreslot_space_lsn text 修改Undo slot空间lsn。 gs_undo_meta_dump_slot(zone_id int, read_memory boolean) 描述:解析Undo模块中slot元信息。 返回值类型:record 表7 gs_undo_meta_dump_slot参数说明 参数类型 参数名 类型 描述 输入参数 zone_id int Undo zone编号: -1:查询所有Undo zone。 0-1,048,575:查询对应zone_id编号的undo zone元信息。 输入参数 read_memory boolean true:从当前内存中读取。 false:从物理文件中读取。 输出参数 zone_id int Undo zone编号。 输出参数 allocate text Undo transaction slot分配位置。 输出参数 recycle text Undo transaction slot回收位置。 输出参数 frozen_xid text frozen xid,用于可见性判断。 输出参数 global_frozen_xid text 全局最小的frozen xid,小于该xid的事务可见。 输出参数 recycle_xid text 回收到的xid,小于该xid的事务被回收。 输出参数 global_recycle_xid text 全局最小的recycle xid,小于该xid的事务被回收。 gs_undo_translot_dump_slot(zone_id int, read_memory boolean) 描述:解析zone中的slot。 返回值类型:record 表8 gs_undo_translot_dump_slot参数说明 参数类型 参数名 类型 描述 输入参数 zone_id oid Undo zone编号: -1:查询所有Undo zone。 0-1,048,575:查询对应zone_id编号的undo zone元信息。 输入参数 read_memory boolean true:从当前内存中读取。 false:从物理文件中读取。 输出参数 zone_id text Undo zone编号。 输出参数 slot_xid text 事务id。 输出参数 start_undoptr text slot对应事务起始插入undo记录位置。 输出参数 end_undoptr text slot对应事务结束插入undo记录位置。 输出参数 lsn text 修改slot的lsn。 输出参数 slot_states oid 事务状态: 0:已提交 1:执行中 2:回滚中 3:回滚完成 gs_undo_translot_dump_xid(slot_xid xid, read_memory boolean) 描述:根据xid,解析zone中对应的slot。 返回值类型:record 表9 gs_undo_translot_dump_xid参数说明 参数类型 参数名 类型 描述 输入参数 slot_xid xid 需要查询的事务id。 输入参数 read_memory boolean true:从当前内存中读取。 false:从物理文件中读取。 输出参数 zone_id text Undo zone编号。 输出参数 slot_xid text 事务id。 输出参数 start_undoptr text slot对应事务起始插入undo记录位置。 输出参数 end_undoptr text slot对应事务结束插入undo记录位置。 输出参数 lsn text 修改slot的lsn。 输出参数 slot_states oid 事务状态: 0 已提交 1 执行中 2 回滚中 3 回滚完成 gs_undo_dump_record(undoptr bigint) 描述:解析undo记录。 返回值类型:record 表10 gs_undo_dump_record参数说明 参数类型 参数名 类型 描述 输入参数 undoptr bigint 需要解析的undo记录起始位置。 输出参数 undoptr bigint 需要解析的undo记录起始位置。 输出参数 xactid text 事务id 输出参数 cid text command id 输出参数 reloid text relation oid 输出参数 relfilenode text 文件的relfinode 输出参数 utype text undo记录类型 输出参数 blkprev text 同一个块前一条undo记录的位置。 输出参数 blockno text 块号 输出参数 uoffset text undo记录偏移 输出参数 prevurp text 前一条undo记录位置。 输出参数 payloadlen text undo记录数据部分长度。 输出参数 oldxactid text 前一个事务id。 输出参数 partitionoid text 分区oid 输出参数 tablespace text 表空间 输出参数 alreadyread_bytes text 读取到的undo记录长度。 输出参数 prev_undorec_len text 前一条undo记录长度。 输出参数 td_id text Transaction Directory的id。 输出参数 reserved text 是否保存 输出参数 flag text 标识1 输出参数 flag2 text 标识2 输出参数 t_hoff text Undo记录数据头的长度。 gs_undo_dump_xid(undo_xid xid) 描述:根据xid解析undo记录。 返回值类型:record 表11 gs_undo_dump_xid参数说明 参数类型 参数名 类型 描述 输入参数 undo_xid xid 事务xid 输出参数 undoptr xid 需要解析的undo记录起始位置。 输出参数 xactid text 事务id 输出参数 cid text command id 输出参数 reloid text relation oid 输出参数 relfilenode text 文件的relfinode 输出参数 utype text undo记录类型 输出参数 blkprev text 同一个块前一条undo记录的位置。 输出参数 blockno text 块号 输出参数 uoffset text undo记录偏移 输出参数 prevurp text 前一条undo记录位置。 输出参数 payloadlen text undo记录数据部分长度。 输出参数 oldxactid text 前一个事务id 输出参数 partitionoid text 分区oid 输出参数 tablespace text 表空间 输出参数 alreadyread_bytes text 读取到的undo记录长度。 输出参数 prev_undorec_len text 前一条undo记录长度。 输出参数 td_id text Transaction Directory的id。 输出参数 reserved text 是否保留 输出参数 flag text 标识1 输出参数 flag2 text 标识2 输出参数 t_hoff text Undo记录数据头的长度。 gs_verify_undo_record(type, startIdx,endIdx, location) 描述:校验Undo记录。 返回值类型:record 该接口仅为扩展预留接口,禁止使用。 gs_verify_undo_translot(type, startIdx,endIdx, location) 描述:校验Undo事务槽。 返回值类型:record 该接口仅为扩展预留接口,禁止使用。 gs_verify_undo_meta(type, startIdx,endIdx, location) 描述:校验Undo元信息。 返回值类型:record 该接口仅为扩展预留接口,禁止使用。 父主题: 系统管理函数
  • IN expression IN (value [, ...]) 右侧括号中的是一个表达式列表。左侧表达式的结果与表达式列表的内容进行比较。如果列表中的内容符合左侧表达式的结果,则IN的结果为true。如果没有相符的结果,则IN的结果为false。 示例如下: 12345 openGauss=# SELECT 8000+500 IN (10000, 9000) AS RESULT; result ---------- f(1 row) 如果表达式结果为null,或者表达式列表不符合表达式的条件且右侧表达式列表返回结果至少一处为空,则IN的返回结果为null,而不是false。这样的处理方式和SQL返回空值的布尔组合规则是一致的。
  • NOT IN expression NOT IN (value [, ...]) 右侧括号中的是一个表达式列表。左侧表达式的结果与表达式列表的内容进行比较。如果在列表中的内容没有符合左侧表达式结果的内容,则NOT IN的结果为true。如果有符合的内容,则NOT IN的结果为false。 示例如下: 12345 openGauss=# SELECT 8000+500 NOT IN (10000, 9000) AS RESULT; result ---------- t(1 row) 如果查询语句返回结果为空,或者表达式列表不符合表达式的条件且右侧表达式列表返回结果至少一处为空,则NOT IN的返回结果为null,而不是false。这样的处理方式和SQL返回空值的布尔组合规则是一致的。 在所有情况下X NOT IN Y等价于NOT(X IN Y)。
  • 背景信息 在SQL语言中,每个数据都与一个决定其行为和用法的数据类型相关。GaussDB提供一个可扩展的数据类型系统,该系统比其它SQL实现更具通用性和灵活性。因而,GaussDB中大多数类型转换是由通用规则来管理的,这种做法允许使用混合类型的表达式。 GaussDB扫描/分析器只将词法元素分解成五个基本种类:整数、浮点数、字符串、标识符和关键字。大多数非数字类型首先表现为字符串。SQL语言的定义允许将常量字符串声明为具体的类型。例,下面查询: 12345 openGauss=# SELECT text 'Origin' AS "label", point '(0,0)' AS "value"; label | value--------+------- Origin | (0,0)(1 row) 示例中有两个文本常量,类型分别为text和point。如果没有为字符串文本声明类型,则该文本首先被定义成一个unknown类型。 在GaussDB分析器里,有四种基本的SQL结构需要独立的类型转换规则: 函数调用 多数SQL类型系统是建筑在一套丰富的函数上的。函数调用可以有一个或多个参数。因为SQL允许函数重载,所以不能通过函数名直接找到要调用的函数,分析器必须根据函数提供的参数类型选择正确的函数。 操作符 SQL允许在表达式上使用前缀或后缀(单目)操作符,也允许表达式内部使用双目操作符(两个参数)。像函数一样,操作符也可以被重载,因此操作符的选择也和函数一样取决于参数类型。 值存储 INSERT和UPDATE语句将表达式结果存入表中。语句中的表达式类型必须和目标字段的类型一致或者可以转换为一致。 UNION,CASE和相关构造 因为联合SELECT语句中的所有查询结果必须在一列里显示出来,所以每个SELECT子句中的元素类型必须相互匹配并转换成一个统一类型。类似地,一个CASE构造的结果表达式必须转换成统一的类型,这样整个case表达式会有一个统一的输出类型。同样的要求也存在于ARRAY构造以及GREATEST和LEAST函数中。 系统表pg_cast存储了有关数据类型之间的转换关系以及如何执行这些转换的信息。详细信息请参见PG_CAST。 语义分析阶段会决定表达式的返回值类型并选择适当的转换行为。数据类型的基本类型分类,包括:Boolean,numeric,string,bitstring,datetime,timespan,geometric和network。每种类型都有一种或多种首选类型用于解决类型选择的问题。根据首选类型和可用的隐含转换,就可能保证有歧义的表达式(那些有多个候选解析方案的)得到有效的方式解决。 所有类型转换规则都是建立在下面几个基本原则上的: 隐含转换决不能有奇怪的或不可预见的输出。 如果一个查询不需要隐含的类型转换,分析器和执行器不应该进行更多的额外操作。这就是说,任何一个类型匹配、格式清晰的查询不应该在分析器里耗费更多的时间,也不应该向查询中引入任何不必要的隐含类型转换调用。 另外,如果一个查询在调用某个函数时需要进行隐式转换,当用户定义了一个有正确参数的函数后,解释器应该选择使用新函数。
  • 条件表达式 在执行SQL语句时,可通过条件表达式筛选出符合条件的数据。 条件表达式主要有以下几种: CASE CASE表达式是条件表达式,类似于其他编程语言中的CASE语句。 CASE表达式的语法图请参考图1。 图1 case::= CASE子句可以用于合法的表达式中。condition是一个返回BOOLEAN数据类型的表达式: 如果结果为真,CASE表达式的结果就是符合该条件所对应的result。 如果结果为假,则以相同方式处理随后的WHEN或ELSE子句。 如果各WHEN condition都不为真,表达式的结果就是在ELSE子句执行的result。如果省略了ELSE子句且没有匹配的条件,结果为NULL。 示例: 1 2 3 4 5 6 7 8 9101112131415161718192021 openGauss=# CREATE TABLE tpcds.case_when_t1(CW_COL1 INT);openGauss=# INSERT INTO tpcds.case_when_t1 VALUES (1), (2), (3);openGauss=# SELECT * FROM tpcds.case_when_t1;cw_col1 --------- 1 2 3(3 rows)openGauss=# SELECT CW_COL1, CASE WHEN CW_COL1=1 THEN 'one' WHEN CW_COL1=2 THEN 'two' ELSE 'other' END FROM tpcds.case_when_t1 ORDER BY 1; cw_col1 | case ---------+------- 1 | one 2 | two 3 | other(3 rows)openGauss=# DROP TABLE tpcds.case_when_t1; DECODE DECODE的语法图请参见图2。 图2 decode::= 将表达式base_expr与后面的每个compare(n) 进行比较,如果匹配返回相应的value(n)。如果没有发生匹配,则返回default。 示例请参见条件表达式函数。 12345 openGauss=# SELECT DECODE('A','A',1,'B',2,0); case ------ 1(1 row) COALESCE COALESCE的语法图请参见图3。 图3 coalesce::= COALESCE返回它的第一个非NULL的参数值。如果参数都为NULL,则返回NULL。它常用于在显示数据时用缺省值替换NULL。和CASE表达式一样,COALESCE只计算用来判断结果的参数,即在第一个非空参数右边的参数不会被计算。 示例 1 2 3 4 5 6 7 8 910111213141516 openGauss=# CREATE TABLE tpcds.c_tabl(description varchar(10), short_description varchar(10), last_value varchar(10)) ;openGauss=# INSERT INTO tpcds.c_tabl VALUES('abc', 'efg', '123');openGauss=# INSERT INTO tpcds.c_tabl VALUES(NULL, 'efg', '123');openGauss=# INSERT INTO tpcds.c_tabl VALUES(NULL, NULL, '123');openGauss=# SELECT description, short_description, last_value, COALESCE(description, short_description, last_value) FROM tpcds.c_tabl ORDER BY 1, 2, 3, 4; description | short_description | last_value | coalesce-------------+-------------------+------------+---------- abc | efg | 123 | abc | efg | 123 | efg | | 123 | 123(3 rows)openGauss=# DROP TABLE tpcds.c_tabl; 如果description不为NULL,则返回description的值,否则计算下一个参数short_description;如果short_description不为NULL,则返回short_description的值,否则计算下一个参数last_value;如果last_value不为NULL,则返回last_value的值,否则返回(none)。 12345 openGauss=# SELECT COALESCE(NULL,'Hello World'); coalesce --------------- Hello World(1 row) NULLIF NULLIF的语法图请参见图4。 图4 nullif::= 只有当value1和value2相等时,NULLIF才返回NULL。否则它返回value1。 示例 1 2 3 4 5 6 7 8 910111213141516 openGauss=# CREATE TABLE tpcds.null_if_t1 ( NI_VALUE1 VARCHAR(10), NI_VALUE2 VARCHAR(10));openGauss=# INSERT INTO tpcds.null_if_t1 VALUES('abc', 'abc');openGauss=# INSERT INTO tpcds.null_if_t1 VALUES('abc', 'efg');openGauss=# SELECT NI_VALUE1, NI_VALUE2, NULLIF(NI_VALUE1, NI_VALUE2) FROM tpcds.null_if_t1 ORDER BY 1, 2, 3; ni_value1 | ni_value2 | nullif -----------+-----------+-------- abc | abc | abc | efg | abc(2 rows)openGauss=# DROP TABLE tpcds.null_if_t1; 如果value1等于value2则返回NULL,否则返回value1。 12345 openGauss=# SELECT NULLIF('Hello','Hello World'); nullif -------- Hello(1 row) GREATEST(最大值),LEAST(最小值) GREATEST的语法图请参见图5。 图5 greatest::= 从一个任意数字表达式的列表里选取最大的数值。 12345 openGauss=# SELECT greatest(9000,155555,2.01); greatest ---------- 155555(1 row) LEAST的语法图请参见图6。 图6 least::= 从一个任意数字表达式的列表里选取最小的数值。 以上的数字表达式必须都可以转换成一个普通的数据类型,该数据类型将是结果类型。 列表中的NULL值将被忽略。只有所有表达式的结果都是NULL的时候,结果才是NULL。 12345 openGauss=# SELECT least(9000,2); least ------- 2(1 row) 示例请参见条件表达式函数。 NVL NVL的语法图请参见图7。 图7 nvl::= 如果value1为NULL则返回value2,如果value1非NULL,则返回value1。 示例: 12345 openGauss=# SELECT nvl(null,1);nvl ----- 1(1 row) 12345 openGauss=# SELECT nvl ('Hello World' ,1); nvl --------------- Hello World(1 row) 父主题: 表达式
  • 示例 示例1:圆整函数参数类型解析。只有一个round函数有两个参数(第一个是numeric,第二个是integer)。所以下面的查询自动把第一个类型为integer的参数转换成numeric类型。 12345 openGauss=# SELECT round(4, 4); round-------- 4.0000(1 row) 实际上它被分析器转换成: 1 openGauss=# SELECT round(CAST (4 AS numeric), 4); 因为带小数点的数值常量初始时被赋予numeric类型,因此下面的查询将不需要类型转换,并且可能会略微高效一些: 1 openGauss=# SELECT round(4.0, 4); 示例2:子字符串函数类型解析。有好几个substr函数,其中一个接受text和integer类型。如果用一个未声明类型的字符串常量调用它,系统将选择接受string类型范畴的首选类型(也就是text类型)的候选函数。 12345 openGauss=# SELECT substr('1234', 3); substr-------- 34(1 row) 如果该字符串声明为varchar类型,就像从表中取出来的数据一样,分析器将试着将其转换成text类型: 12345 openGauss=# SELECT substr(varchar '1234', 3); substr-------- 34(1 row) 被分析器转换后实际上变成: 1 openGauss=# SELECT substr(CAST (varchar '1234' AS text), 3); 分析器从pg_cast表中了解到text和varchar是二进制兼容的,意思是说一个可以传递给接受另一个的函数而不需要做任何物理转换。因此,在这种情况下,实际上没有做任何类型转换。 而且,如果以integer为参数调用函数,分析器将试图将其转换成text类型: 12345 openGauss=# SELECT substr(1234, 3);substr-------- 34(1 row) 被分析器转换后实际上变成: 12345 openGauss=# SELECT substr(CAST (1234 AS text), 3); substr-------- 34(1 row)
  • 值存储数据类型解析 查找与目标字段准确的匹配。 试着将表达式直接转换成目标类型。如果已知这两种类型之间存在一个已注册的转换函数,那么直接调用该转换函数即可。如果表达式是一个未知类型文本,该文本字符串的内容将交给目标类型的输入转换过程。 检查一下看目标类型是否有长度转换。长度转换是一个从某类型到自身的转换。如果在pg_cast表里面找到一个,那么在存储到目标字段之前先在表达式上应用。这样的转换函数总是接受一个额外的类型为integer的参数,它接收目标字段的atttypmod值(实际上是其声明长度,atttypmod的解释随不同的数据类型而不同),并且它可能接受一个Boolean类型的第三个参数,表示转换是显式的还是隐式的。转换函数负责施加那些长度相关的语义,比如长度检查或者截断。
  • 示例 character存储类型转换。对一个目标列定义为character(20)的语句,下面的语句显示存储值的长度正确: 1 2 3 4 5 6 7 8 9101112 openGauss=# CREATE TABLE tpcds.value_storage_t1 ( VS_COL1 CHARACTER(20));openGauss=# INSERT INTO tpcds.value_storage_t1 VALUES('abcdef');openGauss=# SELECT VS_COL1, octet_length(VS_COL1) FROM tpcds.value_storage_t1; vs_col1 | octet_length ----------------------+-------------- abcdef | 20(1 row))openGauss=# DROP TABLE tpcds.value_storage_t1; 这里真正发生的事情是两个unknown文本缺省解析成text,这样就允许||操作符解析成text连接。然后操作符的text结果转换成bpchar("空白填充的字符型", character类型内部名称)以匹配目标字段类型。不过,从text到bpchar的转换是二进制兼容的,这样的转换是隐含的并且实际上不做任何函数调用。最后,在系统表里找到长度转换函数bpchar(bpchar, integer, Boolean) 并且应用于该操作符的结果和存储的字段长。这个类型相关的函数执行所需的长度检查和额外的空白填充。
  • 全文检索概述 文本搜索操作符在数据库中已存在多年。GaussDB为文本数据类型提供~、~*、LIKE和ILIKE操作符;但它们缺乏现代信息系统所要求的许多必要属性。这些缺憾可以通过使用索引及词典进行解决。 文本检索缺乏信息系统所要求的必要属性: 没有语义支持,即使是英语。 由于要识别派生词并不是那么容易,因此正则表达式也不能满足要求。如,satisfies和satisfy,当使用正则表达式寻找satisfy时,并不会查询到包含satisfies的文档。用户可以使用OR搜索多种派生形式,但过程非常繁琐。并且有些词会有上千的派生词,因此容易出错。 没有对搜索结果的分类(排序)。当搜索出成千的文档时,查找效率很低。 由于没有索引的支持,每一次的搜索需要遍历所有的文档,整体搜索比较缓慢。 使用全文索引可以对文档进行预处理,并且可以使后续的搜索更快速。预处理过程包括: 将文档解析成token。 为每个文档标记不同类别的token是非常有必要的,例如:数字、文字、复合词、电子邮件地址,这样就可以做不同的处理。原则上token的类别依赖于具体的应用,但对于大多数的应用来说,可以使用一组预定义的token类。 将token转换为词素。 词素像token一样是一个字符串,但它已经标准化处理,这样同一个词的不同形式是一样的。例如,标准化通常包括:将大写字母折成小写字母、删除后缀(如英语中的s或者es)。这将允许通过搜索找到同一个词的不同形式,不需要繁琐地输入所有可能的变形样式。同时,这一步通常会删除停用词。这些停用词通常因为太常见而对搜索无用。(总之,token是文档文本的原片段,而词素被认为是有用的索引和搜索词。)GaussDB使用词典执行这一步,且提供了各种标准的词典。 保存搜索优化后的预处理文档。 比如,每个文档可以呈现为标准化词素的有序组合。伴随词素,通常还需要存储词素位置信息以用于邻近排序。因此文档包含的查询词越密集其排序越高。 词典能够对token如何标准化做到细粒度控制。使用合适的词典,可以定义不被索引的停用词。 数据类型tsvector用于存储预处理文档,tsquery用于存储查询条件,详细请参见文本搜索类型。为这些数据类型提供的函数和操作符请参见文本检索函数和操作符。其中最重要的是匹配运算符@@,将在基本文本匹配中介绍。 父主题: 介绍
  • 函数类型解析 从系统表pg_proc中选择所有可能被选到的函数。如果使用了一个不带模式修饰的函数名称,那么认为该函数是那些在当前搜索路径中的函数。如果给出一个带修饰的函数名,那么只考虑指定模式中的函数。 如果搜索路径中找到了多个不同参数类型的函数。将从中选择一个合适的函数。 查找和输入参数类型完全匹配的函数。如果找到一个,则用之。如果输入的实参类型都是unknown类型,则不会找到匹配的函数。 如果未找到完全匹配,请查看该函数是否为一个特殊的类型转换函数。 寻找最优匹配。 抛弃那些输入类型不匹配并且也不能隐式转换成匹配的候选函数。unknown文本在这种情况下可以转换成任何东西。如果只剩下一个候选项,则用之,否则继续下一步。 遍历所有候选函数,保留那些输入类型匹配最准确的。此时,域被看作和它们的基本类型相同。如果没有一个函数能准确匹配,则保留所有候选。如果只剩下一个候选项,则用之,否则继续下一步。 遍历所有候选函数,保留那些需要类型转换时接受首选类型位置最多的函数。如果没有接受首选类型的函数,则保留所有候选。如果只剩下一个候选项,则用之,否则继续下一步。 如果有任何输入参数是unknown类型,检查剩余的候选函数对应参数位置的类型范畴。在每一个能够接受字符串类型范畴的位置使用string类型(这种对字符串的偏爱是合适的,因为unknown文本确实像字符串)。另外,如果所有剩下的候选函数都接受相同的类型范畴,则选择该类型范畴,否则抛出一个错误(因为在没有更多线索的条件下无法作出正确的选择)。现在抛弃不接受选定的类型范畴的候选函数,然后,如果任意候选函数在那个范畴接受一个首选类型,则抛弃那些在该参数位置接受非首选类型的候选函数。如果没有一个候选符合这些测试则保留所有候选。如果只有一个候选函数符合,则使用它;否则,继续下一步。 如果同时有unknown和已知类型的参数,并且所有已知类型的参数有相同的类型,假设unknown参数也是这种类型,检查哪个候选函数可以在unknown参数位置接受这种类型。如果正好一个候选符合,那么使用它。否则,产生一个错误。
  • 文档概念 文档是全文搜索系统的搜索单元,例如:杂志上的一篇文章或电子邮件消息。文本搜索引擎必须能够解析文档,而且可以存储父文档的关联词素(关键词)。后续,这些关联词素用来搜索包含查询词的文档。 在GaussDB中,文档通常是一个数据库表中一行的文本字段,或者这些字段的可能组合(级联)。文档可能存储在多个表中或者需动态获取。换句话说,一个文档由被索引化的不同部分构成,因此无法存储为一个整体。比如: 1 2 3 4 5 6 7 8 91011 openGauss=# SELECT d_dow || '-' || d_dom || '-' || d_fy_week_seq AS identify_serials FROM tpcds.date_dim WHERE d_fy_week_seq = 1;identify_serials ------------------ 5-6-1 0-8-1 2-3-1 3-4-1 4-5-1 1-2-1 6-7-1(7 rows) 实际上,在这些示例查询中,应该使用coalesce防止一个独立的NULL属性导致整个文档的NULL结果。 另外一种可能是:文档在文件系统中作为简单的文本文件存储。在这种情况下,数据库可以用于存储全文索引并且执行搜索,同时可以使用一些唯一标识从文件系统中检索文档。然而,从数据库外部检索文件需要拥有系统管理员权限或者特殊函数支持。因此,还是将所有数据保存在数据库中比较方便。同时,将所有数据保存在数据库中可以方便地访问文档元数据以便于索引和显示。 为了实现文本搜索目的,必须将每个文档减少至预处理后的tsvector格式。搜索和相关性排序都是在tsvector形式的文档上执行的。原始文档只有在被选中要呈现给用户时才会被检索。因此,我们常将tsvector说成文档,但是很显然其实它只是完整文档的一种紧凑表示。 父主题: 介绍
  • 分词器 全文检索功能还可以做更多事情:忽略索引某个词(停用词),处理同义词和使用复杂解析,例如:不仅基于空格的解析。这些功能通过文本搜索分词器控制。GaussDB支持多语言的预定义的分词器,并且可以创建分词器(gsql的\dF命令显示了所有可用分词器)。 在安装期间选择一个合适的分词器,并且在postgresql.conf中相应的设置default_text_search_config。如果为了整个数据库使用同一个文本搜索分词器可以使用postgresql.conf中的值。如果需要在数据库中使用不同分词器,可以使用ALTER DATABASE ... SET在任一数据库进行配置。用户也可以在每个会话中设置default_text_search_config。 每个依赖于分词器的文本搜索函数有一个可选的配置参数,用以明确声明所使用的分词器。仅当忽略这个参数的时候,才使用default_text_search_config。 为了更方便的建立自定义文本搜索分词器,可以通过简单的数据库对象建立分词器。 GaussDB文本搜索功能提供了四种类型与分词器相关的数据库对象: 文本搜索解析器将文档分解为token,并且分类每个token(例如:词和数字)。 文本搜索词典将token转换成规范格式并且丢弃停用词。 文本搜索模板提供潜在的词典功能:一个词典指定一个模板,并且为模板设置参数。 文本搜索分词器选择一个解析器,并且使用一系列词典规范化语法分析器产生的token。 父主题: 介绍
  • 操作符类型解析 从系统表pg_operator中选出要考虑的操作符。如果可以找到一个参数类型以及参数个数都一致的操作符,那么这个操作符就是最终使用的操作符。如果找到了多个备选的操作符,我们将从中选择一个最合适的。 寻找最优匹配。 抛弃那些输入类型不匹配并且也不能隐式转换成匹配的候选操作符。unknown文本在这种情况下可以转换成任何东西。如果只剩下一个候选项,则用之,否则继续下一步。 遍历所有候选操作符,保留那些输入类型匹配最准确的。此时,域被看作和他们的基本类型相同。如果没有一个操作符能被保留,则保留所有候选。如果只剩下一个候选项,则用之,否则继续下一步。 遍历所有候选操作符,保留那些需要类型转换时接受(属于输入数据类型的类型范畴的)首选类型位置最多的操作符。如果没有接受首选类型的操作符,则保留所有候选。如果只剩下一个候选项,则用之,否则继续下一步。 如果有任何输入参数是unknown类型,检查剩余的候选操作符对应参数位置的类型范畴。在每一个能够接受字符串类型范畴的位置使用string类型(这种对字符串的偏爱是合适的,因为unknown文本确实像字符串)。另外,如果所有剩下的候选操作符都接受相同的类型范畴,则选择该类型范畴,否则抛出一个错误(因为在没有更多线索的条件下无法作出正确的选择)。现在抛弃不接受选定的类型范畴的候选操作符,然后,如果任意候选操作符在某个给定的参数位置接受一个首选类型,则抛弃那些在该参数位置接受非首选类型的候选操作符。如果没有一个操作符能被保留,则保留所有候选。如果只剩下一个候选项,则用之,否则继续下一步。 如果同时有unknown和已知类型的参数,并且所有已知类型的参数都是相同的类型,那么假设unknown参数也是那种类型,并检查哪个候选操作符在unknown参数位置接受那个类型。如果只有一个操作符符合,那么使用它。否则,产生一个错误。
  • 基本文本匹配 GaussDB的全文检索基于匹配算子@@,当一个tsvector(document)匹配到一个tsquery(query)时,则返回true。其中,tsvector(document)和tsquery(query)两种数据类型可以任意排序。 12345 openGauss=# SELECT 'a fat cat sat on a mat and ate a fat rat'::tsvector @@ 'cat & rat'::tsquery AS RESULT; result---------- t(1 row) 12345 openGauss=# SELECT 'fat & cow'::tsquery @@ 'a fat cat sat on a mat and ate a fat rat'::tsvector AS RESULT; result---------- f(1 row) 正如上面例子表明,tsquery不仅是文本,且比tsvector包含的要多。tsquery包含已经标注化为词条的搜索词,同时可能是使用AND、OR、或NOT操作符连接的多个术语。详细请参见文本搜索类型。函数to_tsquery和plainto_tsquery对于将用户书写文本转换成适合的tsquery是非常有用的,比如将文本中的词标准化。类似地,to_tsvector用于解析和标准化文档字符串。因此,实际中文本搜索匹配看起来更像这样: 12345 openGauss=# SELECT to_tsvector('fat cats ate fat rats') @@ to_tsquery('fat & rat') AS RESULT;result---------- t(1 row) 需要注意的是,下面这种方式是不可行的: 12345 openGauss=# SELECT 'fat cats ate fat rats'::tsvector @@ to_tsquery('fat & rat')AS RESULT;result---------- f(1 row) 由于tsvector没有对rats进行标准化,所以rats不匹配rat。 @@操作符也支持text输入,允许一个文本字符串的显示转换为tsvector或者在简单情况下忽略tsquery。可用形式是: 1234 tsvector @@ tsquerytsquery @@ tsvectortext @@ tsquerytext @@ text 我们已经看到了前面两种,形式text @@ tsquery等价于to_tsvector(text) @@ tsquery,而text @@ text等价于to_tsvector(text) @@ plainto_tsquery(text)。 父主题: 介绍
  • 示例 示例1:Union中的待定类型解析。这里,unknown类型文本'b'将被解析成text类型。 123456 openGauss=# SELECT text 'a' AS "text" UNION SELECT 'b'; text------ a b(2 rows) 示例2:简单Union中的类型解析。文本1.2的类型为numeric,而且integer类型的1可以隐含地转换为numeric,因此使用这个类型。 123456 openGauss=# SELECT 1.2 AS "numeric" UNION SELECT 1; numeric--------- 1 1.2(2 rows) 示例3:转置Union中的类型解析。这里,因为类型real不能被隐含转换成integer,但是integer可以隐含转换成real,那么联合的结果类型将是real。 123456 openGauss=# SELECT 1 AS "real" UNION SELECT CAST('2.2' AS REAL); real------ 1 2.2(2 rows) 示例4:TD模式下,coalesce参数输入int和varchar类型,那么解析成varchar类型。A模式下会报错。 1 2 3 4 5 6 7 8 91011121314151617181920212223242526272829303132333435363738394041424344454647484950 --在A模式下,创建A兼容模式的数据库a_1。openGauss=# CREATE DATABASE a_1 dbcompatibility = 'A';--切换数据库为a_1。openGauss=# \c a_1--创建表t1。a_1=# CREATE TABLE t1(a int, b varchar(10));--查看coalesce参数输入int和varchar类型的查询语句的执行计划。 a_1=# EXPLAIN SELECT coalesce(a, b) FROM t1;ERROR: COALESCE types integer and character varying cannot be matchedLINE 1: EXPLAIN SELECT coalesce(a, b) FROM t1; ^CONTEXT: referenced column: coalesce--删除表。a_1=# DROP TABLE t1;--切换数据库为openGauss。a_1=# \c openGauss--在TD模式下,创建TD兼容模式的数据库td_1。openGauss=# CREATE DATABASE td_1 dbcompatibility = 'C';--切换数据库为td_1。openGauss=# \c td_1--创建表t2。td_1=# CREATE TABLE t2(a int, b varchar(10));--查看coalesce参数输入int和varchar类型的查询语句的执行计划。td_1=# EXPLAIN VERBOSE select coalesce(a, b) from t2; QUERY PLAN--------------------------------------------------------------------------------------- Data Node Scan (cost=0.00..0.00 rows=0 width=0) Output: (COALESCE((t2.a)::character varying, t2.b)) Node/s: All dbnodes Remote query: SELECT COALESCE(a::character varying, b) AS "coalesce" FROM public.t2(4 rows)--删除表。td_1=# DROP TABLE t2;--切换数据库为openGauss。td_1=# \c openGauss--删除A和TD模式的数据库。openGauss=# DROP DATABASE a_1;openGauss=# DROP DATABASE td_1; 示例5:ORA模式下,将整个表达式最终的返回值类型定为result1的数据类型,或者与result1同类型范畴的更高精度的数据类型。 --在ORA模式下,创建ORA兼容模式的数据库ora_1。openGauss=# CREATE DATABASE ora_1 dbcompatibility = 'A';--切换数据库为ora_1。openGauss=# \c ora_1--开启Decode兼容性参数。set sql_beta_feature='a_style_coerce';--创建表t1。ora_1=# CREATE TABLE t1(c_int int, c_float8 float8, c_char char(10), c_text text, c_date date);--插入数据。ora_1=# INSERT INTO t1 VALUES(1, 2, '3', '4', date '12-10-2010');--result1类型为char,defresult类型为text,text精度更高,返回值的类型由char更新为text。ora_1=# SELECT decode(1, 2, c_char, c_text) AS result, pg_typeof(result) FROM t1; result | pg_typeof --------+----------- 4 | text(1 row)--result1类型为int,属于数值类型范畴,返回值的类型置为numeric。ora_1=# SELECT decode(1, 2, c_int, c_float8) AS result, pg_typeof(result) FROM t1; result | pg_typeof --------+----------- 2 | numeric(1 row)--不存在defresult数据类型向result1数据类型之间的隐式转换,报错处理。ora_1=# SELECT decode(1, 2, c_int, c_date) FROM t1;ERROR: CASE types integer and timestamp without time zone cannot be matchedLINE 1: SELECT decode(1, 2, c_int, c_date) FROM t1; ^CONTEXT: referenced column: c_date--关闭Decode兼容性参数。set sql_beta_feature='none';--删除表。ora_1=# DROP TABLE t1;DROP TABLE--切换数据库为postgres。ora_1=# \c postgres--删除ORA模式的数据库。openGauss=# DROP DATABASE ora_1;DROP DATABASE
  • 对于case和coalesce,在TD兼容模式下的处理 如果所有输入都是相同的类型,并且不是unknown类型,那么解析成这种类型。 如果所有输入都是unknown类型则解析成text类型。 如果输入字符串(包括unknown,unknown当text来处理)和数字类型,那么解析成字符串类型,如果是其他不同的类型范畴,则报错。 如果输入类型是同一个类型范畴,则选择该类型的优先级较高的类型。 把所有输入转换为所选的类型。如果从给定的输入到所选的类型没有隐式转换则失败。
共100000条