华为云用户手册

  • json_each_text(object-json) 描述:将对象的每个键值对拆分转换成一行两列。 返回类型:setof(key text, value text) 示例: 1 2 3 4 5 6 7 SELECT * FROM json_each_text('{"f1":[1,2,3],"f2":{"f3":1},"f4":null}'); key | value -----+---------- f1 | [1,2,3] f2 | {"f3":1} f4 | (3 rows)
  • json_to_record(object-json) 描述:正如所有返回record的函数一样,调用者必须用一个AS子句显式地定义记录的结构。会将object-json的键值对进行拆分重组,把键当做列名,去匹配填充AS显示指定的记录的结构。 返回类型:record 示例: 1 2 3 4 5 SELECT * FROM json_to_record('{"a":1,"b":"foo","c":"bar"}'::json) as x(a int, b text, d text); a | b | d ---+-----+--- 1 | foo | (1 row)
  • json_each(object-json) 描述:将对象的每个键值对拆分转换成一行两列。 返回类型:setof(key text, value json) 示例: 1 2 3 4 5 6 7 SELECT * FROM json_each('{"f1":[1,2,3],"f2":{"f3":1},"f4":null}'); key | value -----+---------- f1 | [1,2,3] f2 | {"f3":1} f4 | null (3 rows)
  • json_populate_recordset(anyelement, array-json [, bool]) 描述:参考函数json_populate_record、jsonb_populate_record,对$2数组的每一个元素进行上述参数函数的操作,因此这也要求$2数组的每个元素都是object-json类型。 返回类型:setof anyelement 示例: 1 2 3 4 5 6 7 CREATE TYPE jpop AS (a text, b INT, c timestamp); SELECT * FROM json_populate_recordset(null::jpop, '[{"a":1,"b":2},{"a":3,"b":4}]'); a | b | c ---+---+--- 1 | 2 | 3 | 4 | (2 rows)
  • json_object(text[])、json_object(text[], text[]) 描述:从文本数组中构建JSON对象。 这是个重载函数,当入参为一个文本数组的时候,其数组长度必须为偶数,成员被当做交替出现的键/值对。两个文本数组的时候,第一个数组被视为键,第二个被视为值,两个数组长度必须相等。键不可为null。 返回类型:json 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 SELECT json_object('{a, 1, b, "def", c, 3.5}'); json_object --------------------------------------- {"a" : "1", "b" : "def", "c" : "3.5"} (1 row) SELECT json_object('{{a, 1},{b, "def"},{c, 3.5}}'); json_object --------------------------------------- {"a" : "1", "b" : "def", "c" : "3.5"} (1 row) SELECT json_object('{a,b,"a b c"}', '{a,1,1}'); json_object --------------------------------------- {"a" : "a", "b" : "1", "a b c" : "1"} (1 row)
  • to_json(anyelement) 描述:把参数转换为json。 返回类型:json 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 SELECT to_json('Fred said "Hi."'::text); to_json --------------------- "Fred said \"Hi.\"" (1 row) ——将列存表json_tbl_2转换为json postgres=# SELECT * FROM json_tbl_2; a | b ---+----- 1 | aaa 1 | bbb 2 | ccc 2 | ddd (4 rows) postgres=# SELECT to_json(t.*) FROM json_tbl_2 t; to_json ------------------- {"a":1,"b":"bbb"} {"a":2,"b":"ddd"} {"a":1,"b":"aaa"} {"a":2,"b":"ccc"} (4 rows)
  • json_array_elements(array-json) 描述:拆分数组,每一个元素返回一行。 返回类型:json 示例: 1 2 3 4 5 6 7 8 SELECT json_array_elements('[1,true,[1,[2,3]],null]'); json_array_elements --------------------- 1 true [1,[2,3]] null (4 rows)
  • json_object_agg(any, any) 描述:将值聚集为json对象。 返回类型:json 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 SELECT * FROM classes; name | score -----+------- A | 2 A | 3 D | 5 D | (4 rows) SELECT json_object_agg(name, score) FROM classes group by name order by name; json_object_agg ------------------------- { "A" : 2, "A" : 3 } { "D" : 5, "D" : null } (2 rows)
  • json_build_object(VARIADIC "any") 描述:从可变参数列表中构建JSON对象。参数列表由交替的键和值组成。其入参必须为偶数个,两两一组组成键值对。注意键不可为null。 返回类型:json 示例: 1 2 3 4 5 SELECT json_build_object('foo',1,'bar',2); json_build_object ------------------------ {"foo" : 1, "bar" : 2} (1 row)
  • json_strip_nulls(json) 描述:所有具有空值的对象字段被忽略,其他值保持不变。 返回类型:json 示例: 1 2 3 4 5 SELECT json_strip_nulls('[{"f1":1,"f2":null},2,null,3]'); json_strip_nulls --------------------- [{"f1":1},2,null,3] (1 row)
  • json_array_elements_text(array-json) 描述:拆分数组,每一个元素返回一行。 返回类型:text 示例: 1 2 3 4 5 6 7 8 SELECT * FROM json_array_elements_text('[1,true,[1,[2,3]],null]'); value ----------- 1 true [1,[2,3]] (4 rows)
  • array_to_json(anyarray [, pretty_bool]) 描述:返回JSON类型的数组。一个多维数组成为一个JSON数组的数组。如果pretty_bool为设置为true,将在一维元素之间添加换行符。 返回类型:json 示例: 1 2 3 4 5 SELECT array_to_json('{{1,5},{99,100}}'::int[]); array_to_json ------------------ [[1,5],[99,100]] (1 row)
  • json_agg(any) 描述:将值聚集为json数组。 返回类型:array-json 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 SELECT * FROM classes; name | score -----+------- A | 2 A | 3 D | 5 D | (4 rows) SELECT name, json_agg(score) score FROM classes group by name order by name; name | score -----+----------------- A | [2, 3] D | [5, null] | [null] (3 rows)
  • row_to_json(record [, pretty_bool]) 描述:返回JSON类型的行。如果pretty_bool设置为true,将在第一级元素之间添加换行符。 返回类型:json 示例: 1 2 3 4 5 SELECT row_to_json(row(1,'foo')); row_to_json --------------------- {"f1":1,"f2":"foo"} (1 row)
  • XMLSERIALIZE ( { DOCUMENT | CONTENT } value AS type 描述:从XML类型的值生成一个字符串。 返回值类型:type,可以是character,character varying或text(或其别名) 示例: 1 2 3 4 5 SELECT xmlserialize(content 'good' AS CHAR(10)); xmlserialize -------------- good (1 row)
  • 使用示例 以当前两个用户自建的数据库db1、db2为例: 在CN上获取集群的所有残留文件记录: 1 db1=# SELECT * FROM pgxc_get_residualfiles() order by 4, 6; -- order by不是必须的 当前集群中: dn_6001_6002 节点(当前的主节点实例)的db1和db2数据库中都存在残留文件记录。 残留文件在residualfile列展示。 filepath列为记录残留文件的记录文件,保存在实例数据目录下pg_residualfiles目录中。 调用pgxc_verify_residualfiles()函数对db1库进行验证: 1 db1=# SELECT * FROM pgxc_verify_residualfiles(); 因为verify类函数都是database级别,所以当前在db1库中调用verify函数时,只对属于db1的残留文件进行验证。 可以再次调用get函数查看是否验证完成: 1 db1=# SELECT * FROM pgxc_get_residualfiles() order by 4, 6; 如上图所示,已确认db1数据库中的残留文件都已经验证,db2数据库中的残留文件都未进行验证。 调用pgxc_rm_residualfiles()函数删除残留文件。 1 db1=# SELECT * FROM pgxc_rm_residualfiles(); 再次调用pgxc_get_residualfiles()函数检查删除后的结果。 结果显示db1数据库中的残留文件已经被删除(isdeleted标记为t),db2中的残留文件都未被删除。 同时可以看到查询出9条结果,与之前查询出的结果想比,缺少一条以9438结尾的残留文件记录文件。这是因为以9438结尾的残留文件记录文件中只有一条残留文件记录,这条记录在步骤3中被删除,当记录文件中的所有残留文件都被删除后,记录文件本身也会被删除,并备份到pg_residualfiles/backup目录中: 如果需要删除db2数据库中的文件,需要在db2中调用verify函数后再调用rm函数。 进入db2数据库,并调用验证函数: 此时可以查询验证的结果: 调用删除函数: 再查询删除的结果: 此时因为8342结尾的记录文件中残留文件已经全部删除,所以整个记录文件也被删除并备份到backup目录下,所以查询到0条记录。
  • 使用步骤 调用pgxc_get_residualfiles()函数,获取存在残留文件的数据库名称。 分别进入确认有残留文件的数据库,调用pgxc_verify_residualfiles()函数,对当前数据库中记录的残留文件进行验证。 调用pgxc_rm_residualfiles()函数,删除所有已经验证过的残留文件。 pgxc类残留文件管理函数只对CN和当前主DN进行操作,不会验证和清理备DN上的残留文件。所以主DN完成清理后,应在备DN上及时执行残留文件清理操作或对备机进行build,防止主备切换后由于增量build导致备机残留文件被重新复制回主DN,导致未成功清理的假象。
  • pgxc_rm_residualfiles() 描述:pgxc_rm_residualfiles的CN统一查询函数。该函数为集群级函数,与当前所在的数据库无关,在CN实例上运行。 参数类型:无 返回值类型:record 函数返回字段如下: 表3 pgxc_rm_residualfiles()返回字段 名称 类型 描述 nodename text 节点名。 result bool 是否已经完成删除。 filepath text 残留文件记录路径。 notes text 注释。 示例: 1 2 3 4 5 6 SELECT * FROM pgxc_rm_residualfiles(); nodename | result | filepath | notes --------------+--------+---------------------------+------- cn_5001 | t | pgrf_20200910170129360401 | dn_6001_6002 | t | pgrf_20200908160211441546 | (2 rows)
  • pg_rm_residualfiles(filepath) 描述:用于删除当前实例中指定残留文件列表中的文件。该函数为实例级函数,与当前所在的数据库无关,可以在任意实例上运行。 参数类型:text 返回值类型:record 函数返回字段如下: 表1 pg_rm_residualfiles(filepath)返回字段 名称 类型 描述 result bool 是否已经完成删除。 示例: 1 2 3 4 5 SELECT * FROM pg_rm_residualfiles('pgrf_20200908160211441599'); result -------- t (1 row) 残留文件只有在调用pg_verify_residualfiles()进行verify后才能被真正删除。 删除动作不区分数据库,指定文件中所有已经verify的文件都会被删除。 如果指定文件中记录的所有文件都已经被删除,指定文件会被移除并备份到$PGDATA/pg_residualfile/backup目录下。
  • pg_rm_residualfiles() 描述:用于删除当前实例中所有的残留文件列表中的文件。该函数为实例级函数,与当前所在的数据库无关,可以在任意实例上运行。 参数类型:无 返回值类型:record 函数返回字段如下: 表2 pg_rm_residualfiles()返回字段 名称 类型 描述 result bool 是否已经完成删除。 filepath text 残留文件记录路径。 notes text 注释。 示例: 1 2 3 4 5 SELECT * FROM pg_rm_residualfiles(); result | filepath | notes --------+---------------------------+------- t | pgrf_20200908160211441546 | (1 row) 残留文件只有在调用pg_verify_residualfiles()进行验证后才能被真正删除。 删除动作不区分数据库,指定文件中所有已经验证的文件都会被删除。 如果指定文件中记录的所有文件都已经被删除,指定文件会被移除并备份到$PGDATA/pg_residualfile/backup目录下。
  • pgxc_verify_residualfiles() 描述:pg_verify_residualfiles()的CN统一查询函数。该函数为集群级函数,与当前所在的数据库相关,在CN实例上运行。 参数类型:无 返回值类型:record 函数返回字段如下: 表3 pgxc_verify_residualfiles()返回字段 名称 类型 描述 nodename text 节点名称 result bool 是否完成验证 filepath text 残留文件记录路径 notes text 注释 示例: 1 2 3 4 5 6 SELECT * FROM pgxc_verify_residualfiles(); nodename | result | filepath | notes --------------+--------+---------------------------+------- cn_5001 | t | pgrf_20200910170129360401 | dn_6001_6002 | t | pgrf_20200908160211441546 | (2 rows) 本函数只能验证记录的文件在当前登录的数据库中是否是残留文件。如果记录的文件不属于当前登录的数据库,则不会进行校验行为。
  • pg_is_residualfiles(residualfile) 描述:用于查询当前库中指定的relfilenode是否为残留文件。该函数为实例级函数,与当前所在的数据库相关,可以在任意实例上运行。 参数类型:text 返回值类型:bool 函数返回字段如下: 表4 pg_is_residualfiles(residualfile)返回字段 名称 类型 描述 result bool 是否是残留文件 示例: 1 2 3 4 5 SELECT * FROM pg_is_residualfiles('base/49155/114691'); result -------- t (1 row) 本函数只能验证记录的文件在当前登录的database中是否为残留文件。如果记录的文件不属于当前登录的数据库,则会被检测为是残留文件。 例如:针对gaussdb数据库中的非残留文件base/15092/14790,如果在gaussdb库中查询,则认为是非残留文件;在其他数据库中查询,则认为是残留文件。 SELECT * FROM pg_is_residualfiles('base/15092/14790'); result -------- f (1 row) \c db2 db2=# SELECT * FROM pg_is_residualfiles('base/15092/14790'); result -------- t (1 row)
  • pg_verify_residualfiles() 描述:用于验证当前实例上所有残留文件列表中记录的文件是否为残留文件。该函数为实例级函数,与当前所在的数据库相关,可以在任意实例上运行。 参数类型:无 返回值类型:record 函数返回字段如下: 表2 pg_verify_residualfiles()返回字段 名称 类型 描述 result bool 是否完成验证 filepath text 残留文件记录路径 notes text 注释 示例: 1 2 3 4 5 SELECT * FROM pg_verify_residualfiles(); result | filepath | notes --------+---------------------------+------- t | pgrf_20200908160211441546 | (1 row) 本函数只能验证记录的文件在当前登录的数据库中是否是残留文件。如果记录的文件不属于当前登录的数据库,则不会进行校验行为。
  • pg_verify_residualfiles(filepath) 描述:用于验证参数指定文件中记录的文件是否为残留文件。该函数为实例级函数,与当前所在的数据库相关,可以在任意实例上运行。 参数类型:text 返回值类型:bool 函数返回字段如下: 表1 pg_verify_residualfiles(filepath)返回字段 名称 类型 描述 isverified bool 是否完成验证 示例: 1 2 3 4 5 SELECT * FROM pg_verify_residualfiles('pgrf_20200908160211441546'); isverified ------------ t (1 row) 本函数只能验证记录的文件在当前登录的数据库中是否是残留文件。如果记录的文件不属于当前登录的数据库,则不会进行校验行为。
  • pgxc_get_residualfiles() 描述:pg_get_residualfiles()的CN统一查询函数。该函数为集群级函数,与当前所在的数据库无关,在CN实例上运行。 参数类型:无 返回值类型:record 函数返回字段如下: 表2 pgxc_get_residualfiles()返回字段 名称 类型 描述 nodename text 节点名称。 isverified bool 是否已经验证。 isdeleted bool 是否已经被删除。 dbname text 所属数据库名称。 residualfile text 数据文件路径。 filepath text 残留文件记录路径。 notes text 注释。 示例: 1 2 3 4 5 6 7 8 SELECT * FROM pgxc_get_residualfiles(); nodename | isverified | isdeleted | dbname | residualfile | filepath | notes --------------+------------+-----------+----------+-------------------+---------------------------+------- cn_5001 | f | f | postgres | base/15092/32803 | pgrf_20200910170129360401 | dn_6001_6002 | f | f | db2 | base/49155/114691 | pgrf_20200908160211441546 | dn_6001_6002 | f | f | db2 | base/49155/114694 | pgrf_20200908160211441546 | dn_6001_6002 | f | f | db2 | base/49155/114696 | pgrf_20200908160211441546 | (4 rows)
  • pg_get_residualfiles() 描述:用于获取当前节点的所有残留文件记录。该函数为实例级函数,与当前所在的数据库无关,可以在任意实例上运行。 参数类型:无 返回值类型:record 函数返回字段如下: 表1 pg_get_residualfiles()返回字段 名称 类型 描述 isverified bool 是否已经验证。 isdeleted bool 是否已经被删除。 dbname text 所属数据库名称。 residualfile text 数据文件路径。 filepath text 残留文件记录路径。 notes text 注释。 示例: 1 2 3 4 5 6 7 SELECT * FROM pg_get_residualfiles(); isverified | isdeleted | dbname | residualfile | filepath | notes ------------+-----------+--------+-------------------+---------------------------+------- f | f | db2 | base/49155/114691 | pgrf_20200908160211441546 | f | f | db2 | base/49155/114694 | pgrf_20200908160211441546 | f | f | db2 | base/49155/114696 | pgrf_20200908160211441546 | (3 rows)
  • pv_compute_pool_workload() 描述:返回计算子集群当前的负载状态。 返回类型:void 示例: 1 2 3 4 5 6 SELECT * from pv_compute_pool_workload(); nodename | rpinuse | maxrp | nodestate -----------+---------+-------+----------- datanode1 | 0 | 1000 | normal datanode2 | 0 | 1000 | normal (2 rows)
  • txid_visible_in_snapshot(bigint, txid_snapshot) 描述:在快照中事务ID是否可见(不使用子事务ID)。 返回类型:boolean 内部事务ID类型(xid)是32位,每40亿事务一次循环。这些函数使用的数据类型txid_snapshot,存储在特定时刻事务ID可见性的信息。其组件描述在表1。 表1 快照组件 名字 描述 xmin 最早的事务ID(txid)仍然活动。所有较早事务将是已经提交可见的,或者是直接回滚。 xmax 作为尚未分配的txid。所有大于或等于此txids的都是尚未开始的快照时间,因此不可见。 xip_list 当前快照中活动的txids。这个列表只包含在xmin和xmax之间活动的txids;有可能活动的txids高于xmax。 介于大于等于xmin、小于xmax,并且不在这个列表中的txid,在这个时间快照已经完成的,因此按照提交状态查看他是可见还是回滚。这个列表不包含子事务的txids。 txid_snapshot的文本表示为:xmin:xmax:xip_list。 示例:10:20:10,14,15意思为:xmin=10, xmax=20, xip_list=10, 14, 15。
  • obj_description(object_oid, catalog_name) 描述:获取一个数据库对象的注释。 返回类型:text 备注:带有两个参数的obj_description返回一个数据库对象的注释,该对象是通过其OID和其所属的系统表名字声明。比如,obj_description(123456,'pg_class')将返回OID为123456的表的注释。只带一个参数的obj_description只要求对象OID。 obj_description不能用于表字段,因为字段没有自己的OID。
  • col_description(table_oid, column_number) 描述:获取一个表字段的注释。 返回类型:text 备注:col_description返回一个表中字段的注释,通过表OID和字段号来声明。 示例:查询pg_class系统表获取表OID,查询INFORMATION_SCHEMA.COLUMNS系统视图获取column_number。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 SELECT COLUMN_NAME,ORDINAL_POSITION FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't' AND COLUMN_NAME = 'a'; column_name | ordinal_position -------------+------------------ a | 1 (1 row) SELECT oid FROM pg_class WHERE relname='t'; oid ------- 44020 (1 row) SELECT col_description(44020,1); col_description ----------------------- This is a test table. (1 row)
共100000条