华为云用户手册

  • 处理查询 GaussDB提供了函数和操作符用来操作tsquery类型的查询。 tsquery && tsquery 返回两个给定查询tsquery的与结果。 tsquery || tsquery 返回两个给定查询tsquery的或结果。 !! tsquery 返回给定查询tsquery的非结果。 numnode(query tsquery) returns integer 返回tsquery中的节点数目(词素加操作符),这个函数在检查查询是否有效(返回值大于0),或者只包含停用词(返回值等于0)时,是有用的。例如: 1 2 3 4 5 6 7 8 91011 openGauss=# SELECT numnode(plainto_tsquery('the any'));NOTICE: text-search query contains only stop words or doesn't contain lexemes, ignoredCONTEXT: referenced column: numnode numnode --------- 0openGauss=# SELECT numnode('foo & bar'::tsquery); numnode--------- 3 querytree(query tsquery) returns text 返回可用于索引搜索的tsquery部分,该函数对于检测非索引查询是有用的(例如只包含停用词或否定项)。例如: 12345 openGauss=# SELECT querytree(to_tsquery('!defined')); querytree ----------- T(1 row) 父主题: 附加功能
  • 解析查询 GaussDB提供了函数to_tsquery和plainto_tsquery将查询转换为tsquery数据类型,to_tsquery提供比plainto_tsquery更多的功能,但对其输入要求更严格。 to_tsquery([ config regconfig, ] querytext text) returns tsquery to_tsquery从querytext中创建一个tsquery,querytext必须由布尔运算符& (AND),| (OR)和! (NOT)分割的单个token组成。这些运算符可以用圆括弧分组。换句话说,to_tsquery输入必须遵循tsquery输入的通用规则,具体请参见文本搜索类型。不同的是基本tsquery以token表面值作为输入,而to_tsquery使用指定或默认分词器将每个token标准化成词素,并依据分词器丢弃属于停用词的token。例如: 12345 openGauss=# SELECT to_tsquery('english', 'The & Fat & Rats'); to_tsquery --------------- 'fat' & 'rat'(1 row) 像在基本tsquery中的输入一样,weight(s)可以附加到每个词素来限制它只匹配那些有相同weight(s)的tsvector词素。比如: 12345 openGauss=# SELECT to_tsquery('english', 'Fat | Rats:AB'); to_tsquery ------------------ 'fat' | 'rat':AB(1 row) 同时,*也可以附加到词素来指定前缀匹配: 12345 openGauss=# SELECT to_tsquery('supern:*A & star:A*B'); to_tsquery -------------------------- 'supern':*A & 'star':*AB(1 row) 这样的词素将匹配tsquery中指定字符串和权重的项。 plainto_tsquery([ config regconfig, ] querytext text) returns tsquery plainto_tsquery将未格式化的文本querytext变换为tsquery。类似于to_tsvector,文本被解析并且标准化,然后在存在的词之间插入&(AND)布尔算子。 比如: 12345 openGauss=# SELECT plainto_tsquery('english', 'The Fat Rats'); plainto_tsquery ----------------- 'fat' & 'rat'(1 row) 请注意,plainto_tsquery无法识别布尔运算符、权重标签,或在其输入中的前缀匹配标签: 12345 openGauss=# SELECT plainto_tsquery('english', 'The Fat & Rats:C'); plainto_tsquery --------------------- 'fat' & 'rat' & 'c'(1 row) 在这里,所有输入的标点符号作为空格符号丢弃。 父主题: 控制文本搜索
  • 处理tsvector GaussDB提供了用来操作tsvector类型的函数和操作符。 tsvector || tsvector tsvector连接操作符返回一个新的tsvector类型,它综合了两个tsvector中词素和位置信息,并保留词素的位置信息和权重标签。右侧的tsvector的起始位置位于左侧tsvector的最后位置,因此,新生成的tsvector几乎等同于将两个原始文档字串连接后进行to_tsvector操作。(这个等价是不准确的,因为任何从左边tsvector中删除的停用词都不会影响结果,但是,在使用文本连接时,则会影响词素在右侧tsvector中的位置。) 相较于对文本进行连接后再执行to_tsvector操作,使用tsvector类型进行连接操作的优势在于,可以对文档的不同部分使用不同配置进行解析。因为setweight函数会对给定的tsvector中的语素进行统一设置,如果想要对文档的不同部分设置不同的权重,需要在连接之前对文本进行解析和权重设置。 setweight(vector tsvector, weight "char") returns tsvector setweight返回一个输入tsvector的副本,其中每一个位置都使用给定的权重做了标记。权值可以为A、B、C或D(D是tsvector副本的默认权重,并且不在输出中呈现)。当对tsvector进行连接操作时,这些权重标签将会被保留,文档不同部分以不同的权重进行排序。 权重标签作用于位置,而不是词素。如果传入的tsvector已经被剥离了位置信息,那么setweight函数将什么都不做。 length(vector tsvector) returns integer 返回vector中的词素的数量。 strip(vector tsvector) returns tsvector 返回一个tsvector类型,其中包含输入的tsvector的同义词,但不包含任何位置和权重信息。虽然在相关性排序中,这里返回的tsvector要比未拆分的tsvector的作用小很多,但它通常都比未拆分的tsvector小的多。 父主题: 附加功能
  • 创建索引 为了加速文本搜索,可以创建GIN索引。 1 openGauss=# CREATE INDEX pgweb_idx_1 ON tsearch.pgweb USING gin(to_tsvector('english', body)); to_tsvector()函数有两个版本。只输一个参数的版本和输两个参数的版本。只输一个参数时,系统默认采用default_text_search_config所指定的分词器。 请注意:创建索引时必须使用to_tsvector的两参数版本。只有指定了分词器名称的全文检索函数才可以在索引表达式中使用。这是因为索引的内容必须不受default_text_search_config的影响,否则索引内容可能不一致。由于default_text_search_config的值可以随时调整,从而导致不同条目生成的tsvector采用了不同的分词器,并且没有办法区分究竟使用了哪个分词器。正确地转储和恢复这样的索引也是不可能的。 因为在上述创建索引中to_tsvector使用了两个参数,只有当查询时也使用了两个参数,且参数值与索引中相同时,才会使用该索引。也就是说,WHERE to_tsvector('english', body) @@ 'a & b' 可以使用索引,但WHERE to_tsvector(body) @@ 'a & b'不能使用索引。这确保只使用这样的索引——索引各条目是使用相同的分词器创建的。 索引中的分词器名称由另一列指定时可以建立更复杂的表达式索引。例如: 1 openGauss=# CREATE INDEX pgweb_idx_2 ON tsearch.pgweb USING gin(to_tsvector('ngram', body)); 其中body是pgweb表中的一列。当对索引的各条目使用了哪个分词器进行记录时,允许在同一索引中存在混合分词器。在某些场景下这将是有用的。例如,文档集合中包含不同语言的文档时。再次强调,打算使用索引的查询必须措辞匹配,例如,WHERE to_tsvector(config_name, body) @@ 'a & b'与索引中的to_tsvector措辞匹配。 索引甚至可以连接列: 1 openGauss=# CREATE INDEX pgweb_idx_3 ON tsearch.pgweb USING gin(to_tsvector('english', title || ' ' || body)); 另一个方法是创建一个单独的tsvector列控制to_tsvector的输出。下面的例子是title和body的连接, 当其它是NULL的时候,使用coalesce确保一个字段仍然会被索引: 12 openGauss=# ALTER TABLE tsearch.pgweb ADD COLUMN textsearchable_index_col tsvector;openGauss=# UPDATE tsearch.pgweb SET textsearchable_index_col = to_tsvector('english', coalesce(title,'') || ' ' || coalesce(body,'')); 然后为加速搜索创建一个GIN索引: 1 openGauss=# CREATE INDEX textsearch_idx_4 ON tsearch.pgweb USING gin(textsearchable_index_col); 现在,就可以执行一个快速全文搜索了: 1 2 3 4 5 6 7 8 91011 openGauss=# SELECT title FROM tsearch.pgweb WHERE textsearchable_index_col @@ to_tsquery('north & america') ORDER BY last_mod_date DESC LIMIT 10; title -------- Canada Mexico(2 rows) 相比于一个表达式索引,单独列方法的一个优势是:它没有必要在查询时明确指定分词器以便能使用索引。正如上面例子所示,查询可以依赖于default_text_search_config。另一个优势是搜索比较快速,因为它没有必要重新利用to_tsvector调用来验证索引匹配。表达式索引方法更容易建立,且它需要较少的磁盘空间,因为tsvector形式没有明确存储。 父主题: 表和索引
  • 解析文档 GaussDB中提供了to_tsvector函数把文档处理成tsvector数据类型。 1 to_tsvector([ config regconfig, ] document text) returns tsvector to_tsvector将文本文档解析为token,再将token简化到词素,并返回一个tsvector。其中tsvector中列出了词素及它们在文档中的位置。文档是根据指定的或默认的文本搜索分词器进行处理的。这里有一个简单的例子: 1234 openGauss=# SELECT to_tsvector('english', 'a fat cat sat on a mat - it ate a fat rats'); to_tsvector----------------------------------------------------- 'ate':9 'cat':3 'fat':2,11 'mat':7 'rat':12 'sat':4 通过以上例子可发现结果tsvector不包含词a、on或者it,rats变成rat,并且忽略标点符号-。 to_tsvector函数内部调用一个解析器,将文档的文本分解成token并给每个token指定一个类型。对于每个token,有一系列词典可供查询。词典系列因token类型的不同而不同。识别token的第一本词典将发出一个或多个标准词素来表示token。例如: rats变成rat因为词典认为词rats是rat的复数形式。 有些词被作为停用词(请参考停用词),这样它们就会被忽略,因为它们出现得太过频繁以致于搜索中没有用处。比如例子中的a、on和it。 如果没有词典识别token,那么它也被忽略。在这个例子中,符号“-”被忽略,因为词典没有给它分配token类型(空间符号),即空间记号永远不会被索引。 语法解析器、词典和要索引的token类型由选定的文本搜索分词器决定。可以在同一个数据库中有多种不同的分词器,以及提供各种语言的预定义分词器。在以上例子中,使用缺省分词器english。 函数setweight可以给tsvector的记录加权重,权重是字母A、B、C、D之一。这通常用于标记来自文档不同部分的记录,比如标题、正文。之后,这些信息可以用于排序搜索结果。 因为to_tsvector(NULL)会返回空,当字段可能是空的时候,建议使用coalesce。以下是推荐的为结构化文档创建tsvector的方法: 1 2 3 4 5 6 7 8 910 openGauss=# CREATE TABLE tsearch.tt (id int, title text, keyword text, abstract text, body text, ti tsvector);openGauss=# INSERT INTO tsearch.tt(id, title, keyword, abstract, body) VALUES (1, 'China', 'Beijing', 'China','China, officially the People''s Republic of China (PRC), located in Asia, is the world''s most populous state.');openGauss=# UPDATE tsearch.tt SET ti = setweight(to_tsvector(coalesce(title,'')), 'A') || setweight(to_tsvector(coalesce(keyword,'')), 'B') || setweight(to_tsvector(coalesce(abstract,'')), 'C') || setweight(to_tsvector(coalesce(body,'')), 'D');openGauss=# DROP TABLE tsearch.tt; 上例使用setweight标记已完成的tsvector中的每个词的来源,并且使用tsvector连接操作符||合并标记过的tsvector值,处理tsvector一节详细介绍了这些操作。 父主题: 控制文本搜索
  • 条件表达式 在执行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) DISTRIBUTE BY HASH (CW_COL1);openGauss=# INSERT INTO tpcds.case_when_t1 VALUES (1), (2), (3);openGauss=# SELECT * FROM tpcds.case_when_t1; a --- 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 91011121314151617 openGauss=# CREATE TABLE tpcds.c_tabl(description varchar(10), short_description varchar(10), last_value varchar(10)) DISTRIBUTE BY HASH (last_value);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))DISTRIBUTE BY HASH (NI_VALUE1);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) 父主题: 表达式
  • UNION,CASE和相关构造解析 如果所有输入都是相同的类型,并且不是unknown类型,那么解析成这种类型。 如果所有输入都是unknown类型则解析成text类型(字符串类型范畴的首选类型)。否则,忽略unknown输入。 如果输入不属于同一个类型范畴,失败。(unknown类型除外) 如果输入类型是同一个类型范畴,则选择该类型范畴的首选类型。(例外:union操作会选择第一个分支的类型作为所选类型。) 系统表pg_type中typcategory表示数据类型范畴, typispreferred表示是否是typcategory分类中的首选类型。 把所有输入转换为所选的类型(对于字符串保持原有长度)。如果从给定的输入到所选的类型没有隐式转换则失败。 若输入中含json、txid_snapshot、sys_refcursor或几何类型,则不能进行union。
  • 对于case和coalesce,在TD兼容模式下的处理 如果所有输入都是相同的类型,并且不是unknown类型,那么解析成这种类型。 如果所有输入都是unknown类型则解析成text类型。 如果输入字符串(包括unknown,unknown当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类型。ORA模式下会报错。 --在oracle模式下,创建oracle兼容模式的数据库oracle_1。openGauss=# CREATE DATABASE oracle_1 dbcompatibility = 'ORA';--切换数据库为oracle_1。openGauss=# \c oracle_1--创建表t1。oracle_1=# CREATE TABLE t1(a int, b varchar(10)); --删除表。oracle_1=# DROP TABLE t1;--切换数据库为postgres。oracle_1=# \c postgres--在TD模式下,创建TD兼容模式的数据库td_1。openGauss=# CREATE DATABASE td_1 dbcompatibility = 'TD';--切换数据库为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 datanodes Remote query: SELECT COALESCE(a::character varying, b) AS "coalesce" FROM public.t2(4 rows)--删除表。td_1=# DROP TABLE t2;--切换数据库为postgres。td_1=# \c postgres--删除Oracle和TD模式的数据库。openGauss=# DROP DATABASE oracle_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
  • 基本文本匹配 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)。 父主题: 介绍
  • 文档概念 文档是全文搜索系统的搜索单元,例如:杂志上的一篇文章或电子邮件消息。文本搜索引擎必须能够解析文档,而且可以存储父文档的关联词素(关键词)。后续,这些关联词素用来搜索包含查询词的文档。 在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。 父主题: 介绍
  • 示例 示例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_proc中选择所有可能被选到的函数。如果使用了一个不带模式修饰的函数名称,那么认为该函数是那些在当前搜索路径中的函数。如果给出一个带修饰的函数名,那么只考虑指定模式中的函数。 如果搜索路径中找到了多个不同参数类型的函数。将从中选择一个合适的函数。 查找和输入参数类型完全匹配的函数。如果找到一个,则用之。如果输入的实参类型都是unknown类型,则不会找到匹配的函数。 如果未找到完全匹配,请查看该函数是否为一个特殊的类型转换函数。 寻找最优匹配。 抛弃那些输入类型不匹配并且也不能隐式转换成匹配的候选函数。unknown文本在这种情况下可以转换成任何东西。如果只剩下一个候选项,则用之,否则继续下一步。 遍历所有候选函数,保留那些输入类型匹配最准确的。此时,域被看作和它们的基本类型相同。如果没有一个函数能准确匹配,则保留所有候选。如果只剩下一个候选项,则用之,否则继续下一步。 遍历所有候选函数,保留那些需要类型转换时接受首选类型位置最多的函数。如果没有接受首选类型的函数,则保留所有候选。如果只剩下一个候选项,则用之,否则继续下一步。 如果有任何输入参数是unknown类型,检查剩余的候选函数对应参数位置的类型范畴。在每一个能够接受字符串类型范畴的位置使用string类型(这种对字符串的偏爱是合适的,因为unknown文本确实像字符串)。另外,如果所有剩下的候选函数都接受相同的类型范畴,则选择该类型范畴,否则抛出一个错误(因为在没有更多线索的条件下无法作出正确的选择)。现在抛弃不接受选定的类型范畴的候选函数,然后,如果任意候选函数在那个范畴接受一个首选类型,则抛弃那些在该参数位置接受非首选类型的候选函数。如果没有一个候选符合这些测试则保留所有候选。如果只有一个候选函数符合,则使用它;否则,继续下一步。 如果同时有unknown和已知类型的参数,并且所有已知类型的参数有相同的类型,假设unknown参数也是这种类型,检查哪个候选函数可以在unknown参数位置接受这种类型。如果正好一个候选符合,那么使用它。否则,产生一个错误。
  • 全文检索概述 文本搜索操作符在数据库中已存在多年。GaussDB为文本数据类型提供~、~*、LIKE和ILIKE操作符;但它们缺乏现代信息系统所要求的许多必要属性。这些缺憾可以通过使用索引及词典进行解决。 文本检索缺乏信息系统所要求的必要属性: 没有语义支持,即使是英语。 由于要识别派生词并不是那么容易,因此正则表达式也不能满足要求。如,satisfies和satisfy,当使用正则表达式寻找satisfy时,并不会查询到包含satisfies的文档。用户可以使用OR搜索多种派生形式,但过程非常繁琐。并且有些词会有上千的派生词,因此容易出错。 没有对搜索结果的分类(排序)。当搜索出成千的文档时,查找效率很低。 由于没有索引的支持,每一次的搜索需要遍历所有的文档,整体搜索比较缓慢。 使用全文索引可以对文档进行预处理,并且可以使后续的搜索更快速。预处理过程包括: 将文档解析成token。 为每个文档标记不同类别的token是非常有必要的,例如:数字、文字、复合词、电子邮件地址,这样就可以做不同的处理。原则上token的类别依赖于具体的应用,但对于大多数的应用来说,可以使用一组预定义的token类。 将token转换为词素。 词素像token一样是一个字符串,但它已经标准化处理,这样同一个词的不同形式是一样的。例如,标准化通常包括:将大写字母折成小写字母、删除后缀(如英语中的s或者es)。这将允许通过搜索找到同一个词的不同形式,不需要繁琐地输入所有可能的变形样式。同时,这一步通常会删除停用词。这些停用词通常因为太常见而对搜索无用。(总之,token是文档文本的原片段,而词素被认为是有用的索引和搜索词。)GaussDB使用词典执行这一步,且提供了各种标准的词典。 保存搜索优化后的预处理文档。 比如,每个文档可以呈现为标准化词素的有序组合。伴随词素,通常还需要存储词素位置信息以用于邻近排序。因此文档包含的查询词越密集其排序越高。 词典能够对token如何标准化做到细粒度控制。使用合适的词典,可以定义不被索引的停用词。 数据类型tsvector用于存储预处理文档,tsquery用于存储查询条件,详细请参见文本搜索类型。为这些数据类型提供的函数和操作符请参见文本检索函数和操作符。其中最重要的是匹配运算符@@,将在基本文本匹配中介绍。 父主题: 介绍
  • 操作符类型解析 从系统表pg_operator中选出要考虑的操作符。如果可以找到一个参数类型以及参数个数都一致的操作符,那么这个操作符就是最终使用的操作符。如果找到了多个备选的操作符,我们将从中选择一个最合适的。 寻找最优匹配。 抛弃那些输入类型不匹配并且也不能隐式转换成匹配的候选操作符。unknown文本在这种情况下可以转换成任何东西。如果只剩下一个候选项,则用之,否则继续下一步。 遍历所有候选操作符,保留那些输入类型匹配最准确的。此时,域被看作和他们的基本类型相同。如果没有一个操作符能被保留,则保留所有候选。如果只剩下一个候选项,则用之,否则继续下一步。 遍历所有候选操作符,保留那些需要类型转换时接受(属于输入数据类型的类型范畴的)首选类型位置最多的操作符。如果没有接受首选类型的操作符,则保留所有候选。如果只剩下一个候选项,则用之,否则继续下一步。 如果有任何输入参数是unknown类型,检查剩余的候选操作符对应参数位置的类型范畴。在每一个能够接受字符串类型范畴的位置使用string类型(这种对字符串的偏爱是合适的,因为unknown文本确实像字符串)。另外,如果所有剩下的候选操作符都接受相同的类型范畴,则选择该类型范畴,否则抛出一个错误(因为在没有更多线索的条件下无法作出正确的选择)。现在抛弃不接受选定的类型范畴的候选操作符,然后,如果任意候选操作符在某个给定的参数位置接受一个首选类型,则抛弃那些在该参数位置接受非首选类型的候选操作符。如果没有一个操作符能被保留,则保留所有候选。如果只剩下一个候选项,则用之,否则继续下一步。 如果同时有unknown和已知类型的参数,并且所有已知类型的参数都是相同的类型,那么假设unknown参数也是那种类型,并检查哪个候选操作符在unknown参数位置接受那个类型。如果只有一个操作符符合,那么使用它。否则,产生一个错误。
  • 值存储数据类型解析 查找与目标字段准确的匹配。 试着将表达式直接转换成目标类型。如果已知这两种类型之间存在一个已注册的转换函数,那么直接调用该转换函数即可。如果表达式是一个未知类型文本,该文本字符串的内容将交给目标类型的输入转换过程。 检查一下看目标类型是否有长度转换。长度转换是一个从某类型到自身的转换。如果在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))DISTRIBUTE BY HASH (VS_COL1);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) 并且应用于该操作符的结果和存储的字段长。这个类型相关的函数执行所需的长度检查和额外的空白填充。
  • 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)。
  • IN expression IN (value [, ...]) 右侧括号中的是一个表达式列表。左侧表达式的结果与表达式列表的内容进行比较。如果列表中的内容符合左侧表达式的结果,则IN的结果为true。如果没有相符的结果,则IN的结果为false。 示例如下: 12345 openGauss=# SELECT 8000+500 IN (10000, 9000) AS RESULT; result ---------- f(1 row)
  • 背景信息 在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。每种类型都有一种或多种首选类型用于解决类型选择的问题。根据首选类型和可用的隐含转换,就可能保证有歧义的表达式(那些有多个候选解析方案的)得到有效的方式解决。 所有类型转换规则都是建立在下面几个基本原则上的: 隐含转换决不能有奇怪的或不可预见的输出。 如果一个查询不需要隐含的类型转换,分析器和执行器不应该进行更多的额外操作。这就是说,任何一个类型匹配、格式清晰的查询不应该在分析器里耗费更多的时间,也不应该向查询中引入任何不必要的隐含类型转换调用。 另外,如果一个查询在调用某个函数时需要进行隐式转换,当用户定义了一个有正确参数的函数后,解释器应该选择使用新函数。
  • 数据损坏检测修复函数 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,file descriptor)自动关闭后再修复,人工操作可以执行重启进程,主备切换等命令。 参数说明: 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 remote_bad_block_info() 描述:CN上查询时,查询除本实例以外其他实例页面损坏的情况,记录数据和在其他实例上执行local_bad_block_info函数一致。DN上执行结果为空。默认只有初始用户、具有sysadmin属性的用户、具有监控管理员属性的用户以及在运维模式下具有运维管理员属性的用户、以及监控用户可以查看,其余用户需要赋权后才可以使用。 返回值类型:record local_clear_bad_block_info() 描述:清理local_bad_block_info中已修复页面的数据,也就是repair_time不为空的信息。默认只有初始用户、具有sysadmin属性的用户以及在运维模式下具有运维管理员属性的用户、以及监控用户可以查看,其余用户需要赋权后才可以使用。 返回值类型:bool 示例: openGauss=# select * from local_clear_bad_block_info();result--------t remote_clear_bad_block_info() 描述:CN上执行时,清理除本实例以外其他实例已修复页面的数据,也就是repair_time不为空的信息。DN上执行结果为空。默认只有初始用户、具有sysadmin属性的用户以及在运维模式下具有运维管理员属性的用户、以及监控用户可以查看,其余用户需要赋权后才可以使用。 返回值类型:record 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使用。默认只有在主DN节点上,使用初始用户、具有sysadmin属性的用户以及在运维模式下具有运维管理员属性的用户可以查看,其余用户需要赋权后才可以使用。页面修复成功返回true,修复过程中出错会有报错信息提示。 注意:当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 父主题: 函数和操作符
  • 废弃函数 GaussDB中下列函数在最新版本中已废弃: gs_wlm_get_session_info gs_wlm_get_user_session_info check_engine_status encode_plan_node model_train_opt gs_stat_get_wlm_plan_operator_info track_model_train_opt array_extend dbe_perf.global_slow_query_info dbe_perf.global_slow_query_info_bytime dbe_perf.global_slow_query_history pg_reload_conf pg_rotate_logfile gs_stat_ustore 父主题: 函数和操作符
  • 其它函数 pgxc_pool_check() 描述:检查连接池中缓存的连接数据是否与pgxc_node一致。 返回值类型:Boolean pgxc_pool_reload() 描述:更新连接池中缓存的连接信息。 返回值类型:Boolean reload_active_coordinator() 描述:对所有存活的CN,更新连接池中缓存的连接信息。 返回值类型:void pgxc_lock_for_backup() 描述:为备份操作给集群加锁,这些备份是为在新增节点上做恢复。 返回值类型:Boolean pgxc_lock_for_backup是在使用gs_dump或gs_dumpall工具备份集群前,用来给集群加锁的。当给集群加锁后,不允许有改变系统结构的操作。该函数不影响DML语句。 pg_pool_validate(clear bool, node_name text) 描述:显示CN到节点node_name之间pooler中无效连接,当clear为true时清理无效连接。 返回值类型:record pgxc_pool_connection_status() 描述:检查pooler连接状态是否正常。 返回值类型:boolean pg_nodes_memory() 描述:查看所有节点的内存占用。 返回值类型:record table_skewness(text) 描述:查看表数据在所有节点的占比。 参数:表示待查询表的表名,为text类型。 返回值类型:record table_skewness(text, text, text) 描述:查看表数据指定列在所有节点的占比。 参数:表示待查询表的表名、指定列名、指定的表的记录数(默认值为0,查询所有记录),都为text类型。 返回值类型:record 返回值说明:节点编号,指定列的数据行数,当前节点数据量相对总数据量的占比。 示例: 返回't'表'a'字段前5行数据在节点上的分布。openGauss=# select table_skewness('t', 'a',5); table_skewness---------------- (1,3,60.000%) (2,2,40.000%)(2 rows)返回't'表'a'字段所有数据在节点上的分布。openGauss=# select table_skewness('t', 'a'); table_skewness---------------- (1,7,70.000%) (2,2,20.000%) (0,1,10.000%)(3 rows) table_skewness_with_schema(text, text) 描述:查看表数据在所有节点的占比,与table_skewness(text)作用相同。 参数:表示待查询表的schema名称和表名,为text类型。 返回值类型:record table_data_skewness(colrecord, type) 描述:查看表数据所在节点。 参数说明: colrecord:表示待查询表的列名记录,为record类型。 type:hash分布类型 返回值类型:smallint 示例: openGauss=# select table_data_skewness(row(index), 'R') from test1; table_data_skewness--------------------- 4 3 1 2(4 rows) table_distribution(schemaname text, tablename text) 描述:查看指定表在各个节点上占用的存储空间。 参数:表示待查询表的模式名和表名,均为text类型。 返回值类型:record 使用本函数查询指定表存储分布信息,需要具备指定表的SELECT权限。 table_distribution性能比table_skewness更优,尤其是在大集群(当前特性是实验室特性,使用时请联系华为工程师提供技术支持)大数据量场景下,请优先考虑使用table_distribution函数。 当使用table_distribution并希望直观的看到空间占比时,可使用dnsize/(sum(dnsize) over ())的方式查看出具体的占比情况。 table_distribution() 描述:查看当前库中所有表在各节点的存储空间分布情况。 返回值类型:record 使用本函数涉及全库表信息查询,需要具备管理员权限。 当前基于table_distribution()函数,GaussDB提供视图PGXC_GET_TABLE_SKEWNESS进行数据倾斜查询,建议在数据库中表数量(小于10000)较少的场景直接使用。 plan_seed 描述:获取前一次查询语句的seed值(内部使用)。 返回值类型:int pg_stat_get_env 描述:获取当前节点的环境变量信息,仅sysadmin和monitor admin可以访问。 返回值类型:record 示例: openGauss=# select pg_stat_get_env(); pg_stat_get_env--------------------------------------------------------------------------------------------------------------------------------------- (coordinator1,localhost,144773,49100,/data1/GaussDB_Kernel_TRUNK/install,/data1/GaussDB_Kernel_TRUNK/install/data/coordinator1,pg_log)(1 row) pg_catalog.plancache_clean() 描述:清理节点上无人使用的全局计划缓存。 返回值类型:bool pg_stat_get_thread 描述:提供当前节点下线程的状态信息,sysadmin和monitor admin用户可以查看所有线程的信息,普通用户只能查看本用户的线程信息。 返回值类型:record pgxc_get_os_threads 描述:提供整个集群中所有正常节点下的线程状态信息。 返回值类型:record pg_stat_get_sql_count 描述:提供当前节点中用户执行的SELECT/UPDATE/INSERT/DELETE/MERGE INTO语句的计数结果,sysadmin和monitor admin用户可以查看所有用户的信息,普通用户只能查看本用户的统计信息。 返回值类型:record pgxc_get_sql_count 描述:提供整个集群所有节点中所有用户执行的SELECT/UPDATE/INSERT/DELETE/MERGE INTO语句的计数结果。 返回值类型:record pgxc_get_node_env 描述:提供获取集群中所有节点的环境变量信息。 返回值类型:record pgxc_disaster_read_set(text) 描述:设置灾备集群的节点信息到ETCD上。仅灾备集群可用,仅初始用户可调用。 返回值类型:Boolean pgxc_disaster_read_init 描述:初始化灾备可读的资源和状态信息。仅灾备集群可用,仅初始用户可调用。 返回值类型:Boolean pgxc_disaster_read_clear 描述:清理灾备可读的资源和状态信息。仅灾备集群可用,仅初始用户可调用。 返回值类型:Boolean pgxc_disaster_read_status 描述:提供灾备集群的节点信息,仅灾备集群可用。 返回值类型:record gs_switch_relfilenode 描述:交换两个表或分区的元信息(重分布工具内部使用,用户直接使用会有错误信息提示)。 返回值类型:int pg_catalog.plancache_clean() 描述:清理当前节点上无人使用的全局计划缓存。 返回值类型:boolean DBE_PERF.global_plancache_clean() 描述:清理所有节点上无人使用的全局计划缓存。 返回值类型:Boolean copy_error_log_create() 描述:创建COPY FROM容错机制所需要的错误表(public.pgxc_copy_error_log)。 返回值类型:Boolean 此函数会尝试创建public.pgxc_copy_error_log表,表的详细信息请参见表1。 在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索引已存在,则此函数会报错回滚。 表1 错误表public.pgxc_copy_error_log信息 列名称 类型 描述 relname character varying 表名称。以模式名.表名形式显示。 begintime timestamp with time zone 出现数据格式错误的时间。 filename character varying 出现数据格式错误的数据源文件名。 lineno bigint 在数据源文件中,出现数据格式错误的行号。 rawrecord text 在数据源文件中,出现数据格式错误的原始记录。 detail text 详细错误信息。 pg_stat_get_data_senders() 描述:提供当前活跃的数据复制发送线程的详细信息。 返回值类型:record textlen() 描述:提供查询text的逻辑长度的方法。 返回值类型:int threadpool_status() 描述:显示线程池中工作线程及会话的状态信息。 返回值类型:record get_local_active_session() 描述:提供当前节点保存在内存中的历史活跃session状态的采样记录,sysadmin和monitor admin权限能查看当前节点所有的历史活跃session记录,普通用户查看本会话的历史活跃session记录。 返回值类型:record dbe_perf.get_global_active_session() 描述:提供所有节点保存在内存中的历史活跃session状态的采样记录。 返回值类型:record dbe_perf.get_global_gs_asp(timestamp,timestamp) 描述:提供所有节点保存在系统表gs_asp中的历史活跃session状态的采样记录。 返回值类型:record get_wait_event_info() 描述:提供wait event事件的具体信息。 返回值类型:record dbe_perf.get_datanode_active_session(text) 描述:提供从CN查询DN上保存在内存中的历史活跃session状态的采样记录。 返回值类型:record 备注:该函数查询目标DN上local_active_session视图中记录并和所有CN上的local_active_session中的记录进行匹配获取query string,所以会占用大量的内存。 dbe_perf.get_datanode_active_session_hist(text,timestamp,timestamp) 描述:提供从CN查询DN上保存在系统表gs_asp中的历史活跃session状态的采样记录。 返回值类型:record 备注:该函数查询目标DN上指定时间段的gs_asp记录,如果指定时间段过长造成查询的记录过多,会耗费大量时间。 generate_wdr_report(bigint, bigint, cstring, cstring,cstring) 描述:基于两个snapshot生成系统诊断报告,默认初始化用户或监控管理员用户可以访问。只可在系统库中查询到结果,用户库中无法查询。 返回值类型:text 表2 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”时,需要把该参数指定为对应节点的名称。 在“report_scope”为“cluster”时,该参数可以省略,或指定为NULL。 node:GaussDB中的节点名称。 cluster:省略/空/NULL。 create_wdr_snapshot() 描述:手工生成系统诊断快照,该函数需要sysadmin权限,且只能在CCN上执行。 返回值类型: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(text,text,bigint) 描述:用来清理CN/DN内存中的Unique SQL(需要sysadmin/monitor admin权限)。 返回值类型:Boolean 表3 reset_unique_sql参数说明 参数 类型 描述 scope text 清理范围类型: 'GLOBAL' - 清理所有的CN/DN节点,如果是'GLOBAL',则只可以为CN结点执行此函数。 'LOCAL' - 清理本节点。 clean_type text 'BY_USERID' - 按用户ID来进行清理Unique SQL。 'BY_CNID' - 按CN的ID来进行清理Unique SQL。 'ALL' - 全部清理. clean_value int8 具体清理type对应的清理值。如果第二个参数为ALL,则第三个参数不起作用,可以取任意值。 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) 描述:调整任务到CN队列的最前端。 返回值类型: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可通过查询表PV_SESSION_MEMORY_DETAIL中的sessid字段获得。在正式发布的版本中仅接受MemoryContextName为空串(两个单引号表示输入为空串,即'')的输入,此时会记录所有的内存上下文信息,否则不会有任何操作。该函数需要管理员权限的用户才能执行。 返回值类型:boolean true:成功。 false:失败。 pg_shared_memctx_detail(MemoryContextName text) 描述:将MemoryContextName内存上下文信息记录到“$GAUSSLOG/pg_log/${node_name}/dumpmem”目录下的“threadid_timestamp.log”文件中。在正式发布版本中调用该函数不会有任何操作。该函数需要管理员权限的用户才能执行。 返回值类型:boolean true:成功。 false:失败。 pv_compute_pool_workload() 描述:提供云上加速集群(由于规格变更,当前版本已经不再支持本特性,请不要使用)当前负载信息。 返回值类型:record 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 表4 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 local_rto_status() 描述:显示本实例的主机和备机的日志流控信息。 返回值类型:record gs_wlm_node_recover(boolean isForce) 描述:动态负载管理(当前特性是实验室特性,使用时请联系华为工程师提供技术支持)节点故障后做节点恢复操作。该函数只有管理员用户可以执行,属于集群管理模块调用的,不建议用户直接调用。 返回值类型:bool gs_wlm_node_clean(cstring nodename) 描述:动态负载管理(当前特性是实验室特性,使用时请联系华为工程师提供技术支持)节点故障后做数据清理操作。该函数只有管理员用户可以执行,属于集群管理模块调用的,不建议用户直接调用。 返回值类型:bool gs_cgroup_map_ng_conf(group name) 描述:读取指定逻辑集群(当前特性是实验室特性,使用时请联系华为工程师提供技术支持)的cgroup配置文件。该函数只有sysadmin权限的用户可以执行。 返回值类型:record pgxc_cgroup_map_ng_conf(group name) 描述:在所有节点上读取指定逻辑集群(当前特性是实验室特性,使用时请联系华为工程师提供技术支持)的cgroup配置文件。该函数只有sysadmin权限的用户可以执行。 返回值类型:bool gs_wlm_switch_cgroup(sess_id int8, cgroup name) 描述:切换指定会话的控制组。 返回值类型:record comm_client_info() 描述:用于查询单个节点活跃的客户端连接信息,返回结果解释见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() 描述:用于创建运行日志和性能日志(当前特性是实验室特性,使用时请联系华为工程师提供技术支持)的外表和视图。 示例: openGauss=# select gs_create_log_tables(); gs_create_log_tables----------------------(1 row) 返回值类型:void pgxc_wlm_rebuild_user_resource_pool() 描述:重新构建用户及资源池缓存信息。需要系统管理员权限才可以执行该函数。 返回值类型:boolean locktag_decode(locktag text) 描述:从locktag中解析锁的具体信息。 示例: openGauss=# select locktag_decode('271b:0:0:0:0:6'); locktag_decode--------------------------------------------- locktype:transactionid, transactionid:10011(1 row) 返回值类型:text disable_conn(disconn_mode text, host text, port integer) 描述:CM Agent处理CM Server下发的命令,在DN进行选主时设置该DN拒绝连接所有DN、强制连接某个DN或轮询连接所有DN。只有初始化用户和系统管理员才可以调用该函数。 返回值类型:void 表5 disable_conn参数说明 参数 类型 描述 disconn_mode text DN连接模式: 'prohibit_connection' - 拒绝连接所有DN。 'specify_connection' - 强制连接某个DN。 'polling_connection' - 轮询连接所有DN。 host text DN的IP。 port integer DN的端口号。 dbe_perf.get_global_full_sql_by_timestamp(start_timestamp timestamp with time zone, end_timestamp timestamp with time zone) 描述:获取集群级的全量SQL(Full SQL)信息。只可在系统库中查询到结果,用户库中无法查询。 返回值类型:record 表6 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 表7 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 表8 statement_detail_decode参数说明 参数 类型 描述 detail text SQL语句产生的事件的集合(不可读)。 format text 解析输出格式,取值为plaintext。 pretty boolean 当format为plaintext时,是否以优雅的格式展示: true表示通过“\n”分隔事件。 false表示通过“,”分隔事件。 pgxc_get_csn(tid) 描述:返回给定的事务id对应的事务提交序号(CSN)。 返回值类型:int8 pgxc_get_searchlet_info() 描述:返回所有节点上searchlet的相应信息。 返回值类型:setof record 由于规格变更,当前版本已经不再支持该函数,请不要使用。 pgxc_get_searchlet_table_attr_info() 描述:返回所有节点上searchlet中表的属性信息。 返回值类型:setof record 由于规格变更,当前版本已经不再支持该函数,请不要使用。 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) 描述:对指定的数据库加锁。 参数:数据库名 返回值类型:布尔 pgxc_unlock_for_transfer(name Name) 描述:释放用于数据传输(数据重分布)锁。 参数:数据库名 返回值类型:布尔 pgxc_lock_for_transfer(name Name) 描述:对数据库枷锁,用于数据传输(数据重分布)。 参数:数据库名 返回值类型:布尔 gs_catalog_attribute_records() 描述:对于指定的系统表oid,返回该系统表对应的各个字段的定义。仅支持oid小于10000的普通系统表(不支持索引、toast表等)。 参数:系统表oid 返回值类型:record gs_comm_proxy_thread_status() 描述:用于在集群配置用户态网络的场景下,代理通信库comm_proxy收发数据包统计。该函数在当前版本不支持。 参数:nan 返回值类型:record dynamic_func_control(scope text, function_name text, action text, "{params}" text[]) 描述:动态开启内置的功能,当前仅支持动态开启全量SQL。 返回值类型:record 表9 dynamic_func_control参数说明 参数 类型 描述 scope text 动态开启功能的范围,当前仅支持'GLOBAL/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 备注:必须是系统管理员或运维管理员才能执行此函数。 表10 gs_parse_page_bypath参数说明 参数 类型 描述 path text 对于普通表或段页式的普通表,相对路径为:tablespace name/database oid/表的relfilenode(物理文件名);例如:base/16603/16394 对于段页式的hashbucket表,相对路径为:tablespace name/database oid/Segment Head的逻辑页号_b(bucketid)。例如:base/16603/16394_b1437 表文件的相对路径可以通过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 对于hashbucket表,在此格式基础上,路径末尾加上_b段页式的逻辑页号。 blocknum bigint -1:所有block的信息(强制从磁盘解析)。 0~MaxBlockNumber:对应block的信息。 relation_type text heap(astore表) btree(BTree索引) segment(段页式) read_memory boolean false,从磁盘文件解析; true,首先尝试从共享缓冲区中解析该页面;如果共享缓冲区中不存在,则从磁盘文件解析。 gs_xlogdump_lsn(start_lsn text, end_lsn text) 描述:用于解析指定lsn范围之内的XLOG日志,并返回存放解析内容的路径。可以通过pg_current_xlog_location()获取当前XLOG位置。 参数:LSN起始位置,LSN结束位置 返回值类型:text 备注:必须是系统管理员或运维管理员才能执行此函数。 gs_xlogdump_xid(c_xid xid) 描述:用于解析指定xid的XLOG日志,并返回存放解析内容的路径。可以通过txid_current()获取当前事务ID。 参数:事务ID 返回值类型:text 备注:必须是系统管理员或运维管理员才能执行此函数。 gs_xlogdump_tablepath(path text, blocknum bigint, relation_type text) 描述:用于解析指定表页面对应的日志,并返回存放解析内容的路径。 返回值类型:text 备注:必须是系统管理员或运维管理员才能执行此函数。 表11 gs_xlogdump_tablepath参数说明 参数 类型 描述 path text 对于普通表或段页式的普通表,相对路径为:tablespace name/database oid/表的relfilenode(物理文件名)。例如:base/16603/16394。 对于段页式的hashbucket表,相对路径为:tablespace name/database oid/Segment Head的逻辑页号_b(bucketid)。例如:base/16603/16394_b1437 表文件的相对路径可以通过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 对于hashbucket表,在此格式基础上,路径末尾加上_b段页式的逻辑页号。 blocknum bigint -1:所有block的信息(强制从磁盘解析)。 0~MaxBlockNumber:对应block的信息。 relation_type text heap(astore 表) btree(BTree 索引) segment(段页式) 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 备注:必须是系统管理员或运维管理员才能执行此函数。 表12 gs_xlogdump_parsepage_tablepath参数说明 参数 类型 描述 path text 对于普通表或段页式的普通表,相对路径为:tablespace name/database oid/表的relfilenode(物理文件名);例如:base/16603/16394 对于段页式的hashbucket表,相对路径为:tablespace name/database oid/Segment Head的逻辑页号_b(bucketid)。例如:base/16603/16394_b1437 表文件的相对路径可以通过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 对于hashbucket表,在此格式基础上,路径末尾加上_b段页式的逻辑页号。 blocknum bigint -1:所有block的信息(强制从磁盘解析)。 0~MaxBlockNumber:对应block的信息。 relation_type text heap(astore 表) btree(BTree 索引) segment(段页式) read_memory boolean false,从磁盘文件解析; true,首先尝试从共享缓冲区中解析该页面;如果共享缓冲区中不存在,则从磁盘文件解析。 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 当前时间 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_undo_dump_xid(undo_xid xid) 描述:根据xid解析undo记录 返回值类型:record 表17 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_write_term_log(void) 描述:写入一条日志记录DN节点当前的term值。备DN节点返回false,主DN节点写入成功后返回true。 返回值类型:Boolean 父主题: 系统管理函数
  • 内部函数 GaussDB中下列函数使用了内部数据类型,用户无法直接调用,在此章节列出。 选择率计算函数 areajoinsel areasel arraycontjoinsel arraycontsel contjoinsel contsel eqjoinsel eqsel iclikejoinsel iclikesel icnlikejoinsel icnlikesel icregexeqjoinsel icregexeqsel icregexnejoinsel icregexnesel likejoinsel likesel neqjoinsel neqsel nlikejoinsel nlikesel positionjoinsel positionsel regexeqjoinsel regexeqsel regexnejoinsel regexnesel scalargtjoinsel scalargtsel scalarltjoinsel scalarltsel tsmatchjoinsel tsmatchsel - 统计信息收集函数 array_typanalyze range_typanalyze ts_typanalyze local_rto_stat remote_rto_stat - 排序内部功能函数 bpchar_sortsupport bytea_sortsupport date_sortsupport numeric_sortsupport timestamp_sortsupport 全文检索内部功能函数 dispell_init dispell_lexize dsimple_init dsimple_lexize dsnowball_init dsnowball_lexize dsynonym_init dsynonym_lexize gtsquery_compress gtsquery_consistent gtsquery_decompress gtsquery_penalty gtsquery_picksplit gtsquery_same gtsquery_union ngram_end ngram_lextype ngram_start pound_end pound_lextype pound_start prsd_end prsd_headline prsd_lextype prsd_start thesaurus_init thesaurus_lexize zhprs_end zhprs_getlexeme zhprs_lextype zhprs_start - - - - 内部类型处理函数 abstimerecv euc_jis_2004_to_utf8 int2recv line_recv oidvectorrecv_extend tidrecv utf8_to_koi8u anyarray_recv euc_jp_to_mic int2vectorrecv lseg_recv path_recv time_recv utf8_to_shift_jis_2004 array_recv euc_jp_to_sjis int4recv macaddr_recv pg_node_tree_recv time_transform utf8_to_sjis ascii_to_mic euc_jp_to_utf8 int8recv mic_to_ascii point_recv timestamp_recv utf8_to_uhc ascii_to_utf8 euc_kr_to_mic internal_out mic_to_big5 poly_recv timestamp_transform utf8_to_win big5_to_euc_tw euc_kr_to_utf8 interval_recv mic_to_euc_cn pound_nexttoken timestamptz_recv uuid_recv big5_to_mic euc_tw_to_big5 interval_transform mic_to_euc_jp prsd_nexttoken timetz_recv varbit_recv big5_to_utf8 euc_tw_to_mic iso_to_koi8r mic_to_euc_kr range_recv tintervalrecv varbit_transform bit_recv euc_tw_to_utf8 iso_to_mic mic_to_euc_tw rawrecv tsqueryrecv varchar_transform boolrecv float4recv iso_to_win1251 mic_to_iso record_recv tsvectorrecv varcharrecv box_recv float8recv iso_to_win866 mic_to_koi8r regclassrecv txid_snapshot_recv void_recv bpcharrecv gb18030_to_utf8 iso8859_1_to_utf8 mic_to_latin1 regconfigrecv uhc_to_utf8 win_to_utf8 btoidsortsupport gbk_to_utf8 iso8859_to_utf8 mic_to_latin2 regdictionaryrecv unknownrecv win1250_to_latin2 bytearecv gin_extract_tsvector johab_to_utf8 mic_to_latin3 regoperatorrecv utf8_to_ascii win1250_to_mic byteawithoutorderwithequalcolrecv gtsvector_compress json_recv mic_to_latin4 regoperrecv utf8_to_big5 win1251_to_iso cash_recv gtsvector_consistent koi8r_to_iso mic_to_sjis regprocedurerecv utf8_to_euc_cn win1251_to_koi8r charrecv gtsvector_decompress koi8r_to_mic mic_to_win1250 regprocrecv utf8_to_euc_jis_2004 win1251_to_mic cidr_recv gtsvector_penalty koi8r_to_utf8 mic_to_win1251 regtyperecv utf8_to_euc_jp win1251_to_win866 cidrecv gtsvector_picksplit koi8r_to_win1251 mic_to_win866 reltimerecv utf8_to_euc_kr win866_to_iso circle_recv gtsvector_same koi8r_to_win866 namerecv shift_jis_2004_to_euc_jis_2004 utf8_to_euc_tw win866_to_koi8r cstring_recv gtsvector_union koi8u_to_utf8 ngram_nexttoken shift_jis_2004_to_utf8 utf8_to_gb18030 win866_to_mic date_recv hll_recv latin1_to_mic numeric_recv sjis_to_euc_jp utf8_to_gbk win866_to_win1251 domain_recv hll_trans_recv latin2_to_mic numeric_transform sjis_to_mic utf8_to_iso8859 xidrecv euc_cn_to_mic hstore_recv latin2_to_win1250 nvarchar2recv sjis_to_utf8 utf8_to_iso8859_1 xidrecv4 euc_cn_to_utf8 inet_recv latin3_to_mic oidrecv smalldatetime_recv utf8_to_johab xml_recv euc_jis_2004_to_shift_jis_2004 int1recv latin4_to_mic oidvectorrecv textrecv utf8_to_koi8r cstore_tid_out numeric_bool int2vectorin_extend int2vectorout_extend int2vectorrecv_extend int2vectorsend_extend int8_accum large_seq_rollback_ntree large_seq_upgrade_ntree int16eq int16ge int16gt int16in int16le int16lt int16mi int16mul int16ne int16out int16pl int16recv int16send int16_bool i16toi1 - - - - - 聚合操作内部函数 array_agg_finalfn array_agg_transfn bytea_string_agg_finalfn bytea_string_agg_transfn date_list_agg_noarg2_transfn date_list_agg_transfn float4_list_agg_noarg2_transfn float4_list_agg_transfn float8_list_agg_noarg2_transfn float8_list_agg_transfn int2_list_agg_noarg2_transfn int2_list_agg_transfn int4_list_agg_noarg2_transfn int4_list_agg_transfn int8_list_agg_noarg2_transfn int8_list_agg_transfn interval_list_agg_noarg2_transfn interval_list_agg_transfn list_agg_finalfn list_agg_noarg2_transfn list_agg_transfn median median_float8_finalfn median_interval_finalfn median_transfn mode_final numeric_list_agg_noarg2_transfn numeric_list_agg_transfn ordered_set_transition percentile_cont_float8_final percentile_cont_interval_final string_agg_finalfn string_agg_transfn timestamp_list_agg_noarg2_transfn timestamp_list_agg_transfn timestamptz_list_agg_noarg2_transfn timestamptz_list_agg_transfn checksumtext_agg_transfn json_agg_transfn json_agg_finalfn json_object_agg_transfn json_object_agg_finalfn 哈希内部功能函数 hashbeginscan hashbuild hashbuildempty hashbulkdelete hashcostestimate hashendscan hashgetbitmap hashgettuple hashinsert hashmarkpos hashmerge hashrescan hashrestrpos hashvacuumcleanup hashvarlena jsonb_hash - - - - - Btree索引内部功能函数 cbtreebuild cbtreecanreturn cbtreecostestimate cbtreegetbitmap cbtreegettuple btbeginscan btbuild btbuildempty btbulkdelete btcanreturn btcostestimate btendscan btfloat4sortsupport btfloat8sortsupport btgetbitmap btgettuple btinsert btint2sortsupport btint4sortsupport btint8sortsupport btmarkpos btmerge btnamesortsupport btrescan btrestrpos bttextsortsupport btvacuumcleanup cbtreeoptions GiST索引内部功能函数 gist_box_compress gist_box_consistent gist_box_decompress gist_box_penalty gist_box_picksplit gist_box_same gist_box_union gist_circle_compress gist_circle_consistent gist_point_compress gist_point_consistent gist_point_distance gist_poly_compress gist_poly_consistent gistbeginscan gistbuild gistbuildempty gistbulkdelete gistcostestimate gistendscan gistgetbitmap gistinsert gistmarkpos gistmerge gistrescan gistrestrpos gistvacuumcleanup range_gist_compress range_gist_decompress range_gist_penalty range_gist_picksplit range_gist_same range_gist_union spg_kd_choose spg_kd_config spg_kd_picksplit spg_quad_choose spg_quad_config spg_quad_inner_consistent spg_quad_leaf_consistent spg_quad_picksplit spg_text_choose spg_text_inner_consistent spg_text_leaf_consistent spg_text_picksplit spgbeginscan spgbuild spgbuildempty spgbulkdelete spgcostestimate spgendscan spggetbitmap spggettuple spginsert spgmarkpos spgmerge spgrestrpos spgvacuumcleanup gin_compare_jsonb gin_extract_jsonb gin_extract_jsonb_query gin_consistent_jsonb gin_triconsistent_jsonb gin_consistent_jsonb_hash gin_triconsistent_jsonb_hash gin_extract_jsonb_hash gin_extract_jsonb_query_hash - - - Gin索引内部功能函数 gin_cmp_prefix gin_extract_tsquery gin_tsquery_consistent gin_tsquery_triconsistent ginarrayconsistent ginarrayextract ginarraytriconsistent ginbeginscan ginbuild ginbuildempty ginbulkdelete gincostestimate ginendscan gingetbitmap gininsert ginmarkpos ginmerge ginqueryarrayextract ginrescan ginrestrpos ginvacuumcleanup cginbuild cgingetbitmap - - - - - Psort索引内部函数 psortbuild psortcanreturn psortcostestimate psortgetbitmap psortgettuple Ubtree索引内部函数 ubtbeginscan ubtbuild ubtbuildempty ubtbulkdelete ubtcanreturn ubtcostestimate ubtendscan ubtgetbitmap ubtgettuple ubtinsert ubtmarkpos ubtmerge ubtoptions ubtrescan ubtrestrpos ubtvacuumcleanup - - - - plpgsql内部函数 plpgsql_inline_handler 外表相关内部函数 dist_fdw_handler roach_handler streaming_fdw_handler dist_fdw_validator file_fdw_handler file_fdw_validator log_fdw_handler gc_fdw_handler gc_fdw_validator - - - - - 数据倾斜优化相关内部函数 distributed_count 表统计信息相关内部函数 pgxc_get_stat_dirty_tables pgxc_stat_dirty_tables get_global_stat_all_tables get_summary_stat_all_tables 远程读取数据函数 gs_read_block_from_remote 用于读取非段页式表文件的页面。默认只有初始化用户可以查看,其余用户需要赋权后才可以使用。 gs_read_segment_block_from_remote 用于读取段页式表文件的页面。默认只有初始化用户可以查看,其余用户需要赋权后才可以使用。 远程读取文件函数 gs_read_file_size_from_remote 用于读取指定文件的大小,gs_repair_file函数修复文件时,要先获取远端关于这个文件的大小,用于校验本地文件缺失的文件信息,然后将缺失的文件逐个修复。默认只有初始化用户可以查看,其余用户需要赋权后才可以使用。 gs_read_file_from_remote 用于读取指定的文件,gs_repair_file利用gs_read_file_size_from_remote函数获取文件大小后,依赖这个函数将远端文件逐段读取。默认只有初始化用户可以查看,其余用户需要赋权后才可以使用。 视图相关引用函数 adm_hist_sqlstat_func adm_hist_sqlstat_idlog_func 父主题: 函数和操作符
  • hotkey特性函数 gs_stat_get_hotkeys_info() 描述:获取本地节点查询的热词信息。 返回值类型:Tuple 示例: 123456 openGauss=# select * from gs_stat_get_hotkeys_info() order by count, hash_value; database_name | schema_name | table_name | key_value | hash_value | count ---------------+-------------+-------------------+-----------+------------+------- regression | public | hotkey_single_col | {22} | 1858004829 | 2 regression | public | hotkey_single_col | {11} | 2011968649 | 2(2 rows) gs_stat_clean_hotkeys() 描述:清理hotkey缓存,重置hotkey状态信息。 返回值类型:bool, 恒为true 示例: 12345 openGauss=# select * from gs_stat_clean_hotkeys(); gs_stat_clean_hotkeys ----------------------- t(1 row) 父主题: 函数和操作符
  • 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) 父主题: 函数和操作符
  • HashFunc函数 bucketabstime(value,flag) 描述:对abstime格式的数值value计算hash值并找到对应的hashbucket桶。 参数:value为需要转换的数值,类型为abstime,flag为int类型表示数据分布方式,0表示hash分布。 返回值类型:int32 示例: 12345 openGauss=# select bucketabstime('2011-10-01 10:10:10.112',1); bucketabstime--------------- 13954(1 row) bucketbool(value,flag) 描述:对bool格式的数值value计算hash值并找到对应的hashbucket桶。 参数:value为需要转换的数值,类型为bool,flag为int类型表示数据分布方式,0表示hash分布。 返回值类型:int32 示例: 1 2 3 4 5 6 7 8 910 openGauss=# select bucketbool(true,1); bucketbool------------ 1(1 row)openGauss=# select bucketbool(false,1); bucketbool------------ 0(1 row) bucketbpchar(value, flag) 描述:对bpchar格式的数值value计算hash值并找到对应的hashbucket桶。 参数:value为需要转换的数值,类型为bpchar,flag为int类型表示数据分布方式,0表示hash分布。 返回值类型:int32 示例: 12345 openGauss=# select bucketbpchar('test',1); bucketbpchar-------------- 9761(1 row) bucketbytea(value,flag) 描述:对bytea格式的数值value计算hash值并找到对应的hashbucket桶。 参数:value为需要转换的数值,类型为bytea,flag为int类型表示数据分布方式,0表示hash分布。 返回值类型:int32 示例: 12345 openGauss=# select bucketbytea('test',1); bucketbytea------------- 9761(1 row) bucketcash(value,flag) 描述:对money格式的数值value计算hash值并找到对应的hashbucket桶。 参数:value为需要转换的数值,类型为money,flag为int类型表示数据分布方式,0表示hash分布。 返回值类型:int32 示例: 12345 openGauss=# select bucketcash(10::money,1); bucketcash------------ 8468(1 row) getbucket(value,flag) 描述:从分布列获取hashbucket桶。 value为需要输入的数值,类型: “char”,abstime,bigint,boolean,bytea,character varying,character,date,double precision,int2vector,integer,interval,money,name,numeric,nvarchar2,oid,oidvector,raw,real,record,reltime,smalldatetime,smallint,text,time with time zone,time without time zone,timestamp with time zone,timestamp without time zone,tinyint,uuid。 flag表示数据分布方式,类型:integer 返回值类型:integer 示例: 1 2 3 4 5 6 7 8 91011121314151617181920212223 openGauss=# select getbucket(10,'H'); getbucket ----------- 14535(1 row)openGauss=# select getbucket(11,'H'); getbucket ----------- 13449(1 row)openGauss=# select getbucket(11,'R'); getbucket ----------- 13449(1 row)openGauss=# select getbucket(12,'R'); getbucket ----------- 9412(1 row) 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) bucketchar 描述:计算入参的哈希值。 参数:char, integer 返回值类型:integer bucketdate 描述:计算入参的哈希值。 参数:date, integer 返回值类型:integer bucketfloat4 描述:计算入参的哈希值。 参数:real, integer 返回值类型:integer bucketfloat8 描述:计算入参的哈希值。 参数:double precision, integer 返回值类型:integer bucketint1 描述:计算入参的哈希值。 参数:tinyint, integer 返回值类型:integer bucketint2 描述:计算入参的哈希值。 参数:smallint, integer 返回值类型:integer bucketint2vector 描述:计算入参的哈希值。 参数:int2vector, integer 返回值类型:integer bucketint4 描述:计算入参的哈希值。 参数:integer, integer 返回值类型:integer bucketint8 描述:计算入参的哈希值。 参数:bigint, integer 返回值类型:integer bucketinterval 描述:计算入参的哈希值。 参数:interval, integer 返回值类型:integer bucketname 描述:计算入参的哈希值。 参数:name, integer 返回值类型:integer bucketnumeric 描述:计算入参的哈希值。 参数:numeric, integer 返回值类型:integer bucketnvarchar2 描述:计算入参的哈希值。 参数:nvarchar2, integer 返回值类型:integer bucketoid 描述:计算入参的哈希值。 参数:oid, integer 返回值类型:integer bucketoidvector 描述:计算入参的哈希值。 参数:oidvector, integer 返回值类型:integer bucketraw 描述:计算入参的哈希值。 参数:raw, integer 返回值类型:integer bucketreltime 描述:计算入参的哈希值。 参数:reltime, integer 返回值类型:integer bucketsmalldatetime 描述:计算入参的哈希值。 参数:smalldatetime, integer 返回值类型:integer buckettext 描述:计算入参的哈希值。 参数:text, integer 返回值类型:integer buckettime 描述:计算入参的哈希值。 参数:time without time zone, integer 返回值类型:integer buckettimestamp 描述:计算入参的哈希值。 参数:timestamp without time zone, integer 返回值类型:integer buckettimestamptz 描述:计算入参的哈希值。 参数:timestamp with time zone, integer 返回值类型:integer buckettimetz 描述:计算入参的哈希值。 参数:time with time zone, integer 返回值类型:integer bucketuuid 描述:计算入参的哈希值。 参数:uuid, integer 返回值类型:integer bucketvarchar 描述:计算入参的哈希值。 参数:character varying, integer 返回值类型:integer 父主题: 函数和操作符
  • AI特性函数 db4ai_predict_by_bool (text, VARIADIC "any") 描述:获取返回值为布尔型的模型进行模型推断任务。此函数为内部调用函数,建议直接使用语法PREDICT BY进行推断任务。 参数:模型名称和推断任务的输入列。 返回值类型:bool db4ai_predict_by_float4(text, VARIADIC "any") 描述:获取返回值为float4的模型进行模型推断任务。此函数为内部调用函数,建议直接使用语法PREDICT BY进行推断任务。 参数:模型名称和推断任务的输入列。 返回值类型:float db4ai_predict_by_float8(text, VARIADIC "any") 描述:获取返回值为float8的模型进行模型推断任务。此函数为内部调用函数,建议直接使用语法PREDICT BY进行推断任务。 参数:模型名称和推断任务的输入列。 返回值类型:float db4ai_predict_by_int32(text, VARIADIC "any") 描述:获取返回值为int32的模型进行模型推断任务。此函数为内部调用函数,建议直接使用语法PREDICT BY进行推断任务。 参数:模型名称和推断任务的输入列。 返回值类型:int db4ai_predict_by_int64(text, VARIADIC "any") 描述:获取返回值为int64的模型进行模型推断任务。此函数为内部调用函数,建议直接使用语法PREDICT BY进行推断任务。 参数:模型名称和推断任务的输入列。 返回值类型:int db4ai_predict_by_numeric(text, VARIADIC "any") 描述:获取返回值为numeric的模型进行模型推断任务。此函数为内部调用函数,建议直接使用语法PREDICT BY进行推断任务。 参数:模型名称和推断任务的输入列。 返回值类型:numeric db4ai_predict_by_text(text, VARIADIC "any") 描述:获取返回值为字符型的模型进行模型推断任务。此函数为内部调用函数,建议直接使用语法PREDICT BY进行推断任务。 参数:模型名称和推断任务的输入列。 返回值类型:text db4ai_predict_by_float8_array(text, VARIADIC "any") 描述:获取返回值为字符型的模型进行模型推断任务。此函数为内部调用函数,建议直接使用语法PREDICT BY进行推断任务。 参数:模型名称和推断任务的输入列。 返回值类型:text gs_explain_model(text) 描述:获取返回值为字符型的模型进行模型解析文本化任务。 参数:模型名称。 返回值类型:text 父主题: 函数和操作符
  • 重分布函数 以下函数为重分布期间gs_redis工具所用的系统函数,用户不要主动调用: pg_get_redis_rel_end_ctid(text, name, int, int) pg_get_redis_rel_start_ctid(text, name, int, int) pg_enable_redis_proc_cancelable() pg_disable_redis_proc_cancelable() pg_tupleid_get_blocknum(tid) pg_tupleid_get_offset(tid) pg_tupleid_get_ctid_to_bigint (ctid) 以下函数均针对时序表,所指oid均只针对时序表: redis_ts_table(oid) 描述:以表cpu为例,将old表(redis_old_cpu)的数据逐步转移到新的表(redis_new_cpu),从时间线最后的一个partition开始转移,并在redis_old_cpu的一个partition为空时将此partition删除,在仅余一个partition时将old表删除,并将表恢复至原cpu,为下述job所调用,用户无需手动调用。 返回值类型:void 表1 redis_ts_table参数说明 参数 类型 说明 是否必选 old_oid oid redis_old_cpu的标识。 是 cancel_unuse_redis() 描述:取消时序表重分布。 返回值:void submit_redis_task(oid, interval) 描述:调用函数redis_ts_table,对一个表只允许调用一个job,如需修改,需要先停止该job,再重新调用。 参数:以表cpu为例,参见表2。 返回值类型:void 表2 submit_redis_task参数说明 参数 类型 说明 是否必选 old_oid oid redis_old_cpu的标识。 是 schedule_interval interval 用来计算dbe_task.submit中传入的interval_time,代表此job每间隔多长时间执行一次。 否 submit_all_redis_task(interval) 描述:对于当前连接数据库中所有未完成重分布的表调用函数submit_redis_task。 返回值类型:void 表3 submit_all_redis_task参数说明 参数 类型 说明 是否必选 schedule_interval interval 与submit_redis_task的入参schedule_interval为一个含义。 否 cancel_redis_task(oid) 描述:当某表已转移完成,停止该表的转移的job。 参数:以表cpu为例,为redis_old_cpu的oid。 返回值类型:void cancel_all_redis_task() 描述:对当前连接数据库的所有时序表,停止所有在转移的job。 返回值类型:void submit_cancel_redis_task(interval) 描述:对当前连接数据库的所有时序表创建job,调用函数cancel_redis_task。 参数:间隔多长时间调用此job,默认值1h。 返回值类型:void flush_depend_rule(oid) 描述:以cpu表为例,如果用户直接对redis_old_cpu表和redis_new_cpu执行了某些sql,原rule不能正常工作,可以通过此函数重建相关rule,当前创建rule的语句在pg_rules系统表中,不建议用户作允许的操作以外的行为,直接在redis_new_cpu和redis_old_cpu上执行sql,可能会造成未知错误。 参数:以表cpu为例,为表cpu的oid。 返回值类型:void 父主题: 函数和操作符
共100000条