华为云用户手册

  • get_col_cu_info(schema_name text, table_name text, row_count int8, dirty_percent int8) 描述:查询某张列存表的CU信息,每个分区单独统计。该函数仅8.2.0.100及以上集群版本支持。 参数:模式名(必选),表名(必选),小CU的行数阈值(可选,默认200,取值范围为1~60000),脏CU的删除百分比阈值(可选,默认70,取值范围1~100)。 返回值类型:record 返回值字段: node_name:DN节点名。 part_name:分区名,普通表此列为空。 zero_size_cu_count:cuSize=0,且行数小于等于row_count的CU数。 small_cu_count:cuSize=ALIGNOF_CUSIZE(8192),且行数小于等于row_count的CU数。 dirty_cu_count: 因delete,deadtupe占比超过dirty_percent的CU数。 total_cu_count:总CU数。 small_cu_size:8k CU的总大小。 total_cu_size:总CU大小。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 SELECT * FROM get_col_cu_info('public','hs_part'); node_name | part_name | zero_size_cu_count | small_cu_count | dirty_cu_count | total_cu_count | small_cu_size | total_cu_size -----------+-----------+--------------------+----------------+----------------+----------------+---------------+--------------- dn_1 | p1 | 3 | 0 | 0 | 3 | 0 bytes | 0 bytes dn_1 | p2 | 3 | 0 | 0 | 3 | 0 bytes | 0 bytes dn_1 | p3 | 3 | 0 | 0 | 3 | 0 bytes | 0 bytes (3 rows) SELECT * FROM get_col_cu_info('public','hs_part', 200, 90); node_name | part_name | zero_size_cu_count | small_cu_count | dirty_cu_count | total_cu_count | small_cu_size | total_cu_size -----------+-----------+--------------------+----------------+----------------+----------------+---------------+--------------- dn_1 | p1 | 3 | 0 | 0 | 3 | 0 bytes | 0 bytes dn_1 | p2 | 3 | 0 | 0 | 3 | 0 bytes | 0 bytes dn_1 | p3 | 3 | 0 | 0 | 3 | 0 bytes | 0 bytes (3 rows)
  • get_volatile_pg_class(relname text) 描述:获取当前会话中指定volatile临时表相关的pg_class元数据。该函数仅8.2.0及以上集群版本支持。 参数:当前会话中volatile临时表表名。 返回值类型:record 返回值字段: oid:返回volatile临时表的oid。 其他字段:同pg_class系统表中的基础字段(不包括系统隐藏字段)。 示例: 1 2 3 4 5 6 7 8 9 10 11 SELECT * FROM get_volatile_pg_class('tx1'); oid | relname | relnamespace | reltype | reloftype | relowner | relam | relfilenode | reltablespace | relpages | reltuples | relallvisible | reltoastrelid | reltoastidxid | reldeltarelid | reldeltaidx | relcudescrelid | relcudescidx | relhasindex | relisshared | relpersistence | relkind | relnatts | relchecks | relhasoids | relhaspkey | relhasrules | relhastriggers | relhassub class | relcmprs | relhasclusterkey | relrowmovement | parttype | relfrozenxid | relacl | reloptions | relreplident | relfrozenxid64 -------+---------+--------------+---------+-----------+----------+-------+-------------+---------------+----------+-----------+---------------+---------------+---------------+---------------+ -------------+----------------+--------------+-------------+-------------+----------------+---------+----------+-----------+------------+------------+-------------+----------------+---------- ------+----------+------------------+----------------+----------+--------------+--------+----------------------------------+--------------+---------------- 16772 | tx1 | 16770 | 16774 | 0 | 10 | 0 | 16772 | 1665 | 0 | 0 | 0 | 16775 | 0 | 0 | 0 | 0 | 0 | f | f | v | r | 2 | 0 | f | f | f | f | f | 1 | f | f | n | 11815 | | {orientation=row,compression=no} | d | 11815 (1 row)
  • create_wdr_snapshot() 描述:创建性能数据快照。 返回值类型:text 该函数只有数据库管理员SYSADMIN才可以执行,非管理员执行会提示无权限。 该函数只能在CN上执行,在DN上执行会返回:“WDR snapshot can only be created on coordinator.”。 执行该函数前需确认enable_wdr_snapshot参数处于开启状态。如果enable_wdr_snapshot为off,执行该函数会返回:“WDR snapshot request can't be executed, because GUC parameter 'enable_wdr_snapshot' is off.”。 如果执行该函数时,快照线程由于节点重启等原因尚未启动,会提示错误:“WDR snapshot request can not be accepted, please retry later.”。 如果执行该函数失败,会提示:“Cannot respond to WDR snapshot request.”。 如果执行成功,会返回:“WDR snapshot request has been submitted.”。该提示表明创建快照请求已发送至后台快照线程,但不代表创建快照成功。
  • kill_snapshot(scope cstring) 描述:中止后台快照线程。该函数向后台快照线程发送中止信号并等待线程结束。 输入参数scope:表示操作范围。该参数取值范围为local和global。 local表示中止当前CN上的快照线程。 global表示不仅会中止当前CN上的快照线程,还会向集群中所有其他CN发送中止快照线程的请求,即中止集群中所有CN上的快照线程。 如果输入其他值,则报错“Scope is invalid, use "local" or "global".”。 输入参数可为空,表示默认取值为local。 返回值类型:无 该函数只有数据库管理员SYSADMIN才有权执行,非管理员执行会提示无权限。 该函数只能在CN上执行,在DN上执行会提示:“kill_snapshot can only be executed on coordinator.”; 执行该函数会向后台快照线程发送中止信号并等待其结束。如果100s内快照线程仍未中止则会报错:“Kill snapshot thread failed”;
  • wdr_xdb_query(db_name text, snapshot_id bigint, view_name text) 描述:查询指定数据库下的指定视图。有的视图在不同数据库中查询结果不同,例如global_table_stat视图用于查询表格的统计信息,由于不同数据库下表格不同,在不同数据库中查询该视图得到的结果也不同。wdr_xdb_query函数可以在当前连接中访问db_name指定的数据库,并在该数据库中查询view_name指定的视图。输入参数含义如下: db_name:指定的数据库名称,text型。 snapshot_id:快照ID,bigint型,参见“性能视图快照”。 view_name:指定视图名称,text型。视图名称必须在如下白名单中: global_table_stat global_table_change_stat global_column_table_io_stat global_row_table_io_stat 返回值类型:record,其第一列为snapshot_id bigint,第二列为db_name text,其他列的名称、类型和顺序与view_name指定的视图相同。 示例: 1 select snapshot_id, db_name, schemaname, relname, distribute_mode, seq_scan, seq_tuple_read, index_scan, index_tuple_read, tuple_inserted, tuple_updated,tuple_deleted, tuple_hot_updated, live_tuples, dead_tuples from wdr_xdb_query('postgres'::text, 1, 'global_table_stat'::text) as i(snapshot_id bigint, db_name text, schemaname name, relname name, distribute_mode char, seq_scan bigint, seq_tuple_read bigint, index_scan bigint, index_tuple_read bigint, tuple_inserted bigint, tuple_updated bigint, tuplee_deleted bigint, tuple_hot_updated bigint, live_tuples bigint, dead_tuples bigint); 该函数仅8.1.2及以上版本支持。 该函数只有数据库管理员SYSADMIN才有权执行,非管理员执行会提示无权限。 该函数只能查询白名单中的视图,如果查询其他视图,会报错:“Input view name is invalid.”。
  • get_col_file_info(table_name) 描述:查询指定列存表的空CU文件数和总CU文件数,该函数仅8.2.0及以上集群版本支持。 参数:列存表名。 返回值类型:int 返回值字段: total_file_num int:总CU文件数,范围为-1~INT_MAX,返回-1时表示表类型不支持等原因的失败,0~INT_MAX为总文件数。 empty_file_num int:空CU文件数,范围为-1~INT_MAX,返回-1时表示表类型不支持等原因的失败,0~INT_MAX为空文件数。 示例: 1 2 3 4 5 call get_col_file_info('t4'); total_file_num | empty_file_num ----------------+---------------- 10 | 7 (1 row)
  • get_all_col_file_info() 描述:查询所有列存表的空CU文件数和总CU文件数,该函数仅8.2.0及以上集群版本支持。 返回值类型:record 返回值字段: space_name text:列存表所属schema table_name text:列存表名 total_file_num int:总CU文件数,范围为-1~INT_MAX,返回-1时表示表类型不支持等原因的失败,0~INT_MAX为总文件数。 empty_file_num int:空CU文件数,范围为-1~INT_MAX,返回-1时表示表类型不支持等原因的失败,0~INT_MAX为空文件数。 示例: 1 2 3 4 5 6 7 call get_all_col_file_info(); space_name | table_name | total_file_num | empty_file_num ------------+------------+----------------+---------------- public | t4 | 10 | 7 public | t2 | 1 | 1 public | t1 | 3 | 0 (3 rows)
  • reset_instr_unique_sql(cstring, cstring, INT8) 描述:清理已收集的Unique SQL信息。输入参数含义如下: GLOBAL/LOCAL:清理范围为所有节点或当前节点。 ALL/BY_USERID/BY_CNID/BY_GUC:ALL表示清理所有,BY_USERID/BY_CNID表示按照USERID或CNID进行清理,BY_GUC表示清理操作是由GUC参数instr_unique_sql_count设置值变小引起的。 第三个参数值对应第二个参数设置,ALL/BY_GUC的情况下该值无意义。 返回值类型:bool
  • copy_error_log_create() 描述:创建COPY FROM容错机制所需要的错误表(public.pgxc_copy_error_log)。 返回值类型:boolean 此函数会尝试创建public.pgxc_copy_error_log表,表的详细信息请参见表3。 在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 (DWS)默认为off)。 此函数自身权限为Sysadmin及以上(与错误表、COPY权限一致)。 若创建前public.pgxc_copy_error_log表已存在或者copy_error_log_relname_idx索引已存在,则此函数会报错回滚。 表3 错误表public.pgxc_copy_error_log信息 列名称 类型 描述 relname varchar 表名称。以模式名.表名形式显示。 begintime timestamp with time zone 出现数据格式错误的时间。 filename varchar 出现数据格式错误的数据源文件名。 rownum bigint 在数据源文件中,出现数据格式错误的行号。 rawrecord text 在数据源文件中,出现数据格式错误的原始记录。为了防止字段长度过大,限制字段的长度不超过1024 byte。 detail text 详细错误信息。 columnname varchar 在数据源文件中,出现数据格式错误的字段名称。仅8.2.1.100及以上版本支持。 errcode varchar 出错信息对应的错误码,使用sqlstate错误码。仅8.2.1.100及以上版本支持。 queryid bigint 执行copy的sql语句id,用于唯一标识一条sql语句。仅8.2.1.100及以上版本支持。
  • pg_stat_get_status(tid, num_node_display) 描述:查询当前实例中工作线程(backend thread)以及辅助线程(auxiliary thread)的阻塞等待情况,其返回结果的详细含义参见PG_THREAD_WAIT_STATUS视图。输入参数含义如下: tid:表示线程ID,bigint类型。如果为NULL,则返回所有工作线程和辅助线程的等待情况;否则只返回指定ID线程的等待情况。 num_node_display:integer类型。对于等待状态为“wait node”的记录,指定其wait_status列中显示的被等待节点的最大数量。 如果为空或者小于等于0,则只显示一个被等待节点。 如果大于20,则最多只显示20个节点。 如果大于0且小于等于20,则显示数量为num_node_display和实际被等待节点数量的最小者。例如查询“SELECT * from pg_stat_get_status(NULL, 10)”,如果实际被等待节点数量大于10,则只随机显示其中10个节点名称,如果实际被等待节点数量小于等于10,则显示全部被等待节点名称。当实际被等待节点数量大于显示数量时,被显示的节点名称为随机挑选。 返回值类型:record
  • gs_table_distribution(schemaname text, tablename text) 描述:快速查看指定表在各个节点上占用的存储空间。 返回值类型:record 表1 gs_table_distribution(schemaname text, tablename text)函数返回字段 名称 类型 描述 schemaname name 模式名称。 tablename name 表名。 relkind character 类型。 i:索引 r:表 nodename name 节点名称。 dnsize bigint 表在该节点上的存储空间大小,单位:字节。 使用本函数查询指定表存储分布信息,需要具备指定表的SELECT权限。 该函数基于PG_RELFILENODE_SIZE系统表上的物理文件存储空间记录,需确保GUC参数use_workload_manager和enable_perm_space必须开启。 性能上,单表查询时,gs_table_distribution函数低于table_distribution函数;在全库表查询时,gs_table_distribution函数大幅度优于table_distribution函数;在大集群大数据量场景下,如果进行全库表表查询,建议优先使用gs_table_distribution函数。
  • gs_table_distribution() 描述:快速查看当前库中所有表在各节点的存储空间分布情况。 返回值类型:record 表2 gs_table_distribution()函数返回字段 名称 类型 描述 schemaname name 模式名称。 tablename name 表名。 relkind character 类型,i: 索引,r: 表。 nodename name 节点名称。 dnsize bigint 表在该节点上的存储空间大小,单位:字节。 使用本函数查询指定表存储分布信息,需要具备指定表的SELECT权限。 该函数基于PG_RELFILENODE_SIZE系统表上的物理文件存储空间记录,需确保GUC参数use_workload_manager和enable_perm_space必须开启。 性能上,单表查询时,gs_table_distribution函数低于table_distribution函数;在全库表查询时,gs_table_distribution函数大幅度优于table_distribution函数;在大集群大数据量场景下,如果进行全库表表查询,建议优先使用gs_table_distribution函数。 基于gs_table_distribution()函数,GaussDB(DWS)自8.2.1集群版本提供了视图PGXC_WLM_TABLE_DISTRIBUTION_SKEWNESS进行数据倾斜查询,建议在数据库中表数量(小于10000)较少的场景直接使用。
  • pgxc_parallel_query(text, text) 描述:在指定类型的 数据实例 上执行指定的SQL查询语句,并把查询语句的结果返回给当前CN。该函数8.1.2及以上版本支持。 函数有两个参数: 第一个参数:SQL语句在哪些实例上执行。当前支持的有效入参是 'dn', 'datanode','cn', 'coordinator', 'all', 其它值会导致函数执行报错。其中 'dn', 'datanode'表示在所有DN上执行,'cn', 'coordinator'表示在所有CN上执行, all表示在所有的CN和所有的DN上执行。 第二个参数:需要发往远程节点执行的SQL语句,函数内部会对SQL语句中查询的对象进行校验,不支持用户表、分布式表和自定义的多结果集函数。 返回值类型:record 该函数功能仅为便于开发人员高效的收集集群内实例执行信息或者状态的视图,不建议用户直接使用。 该函数为多结果集函数,返回的数据类型为record,所以需要在函数调用后面增加AS语句显示的指出输出的列名和数据类型,如下所示: SELECT * FROM pgxc_parallel_query('all', 'select node_name, db_name, thread_name, query_id, tid, lwtid, ptid, tlevel, smpid, wait_status, wait_event from pg_thread_wait_status') AS (node_name text, db_name text, thread_name text, query_id bigint, tid bigint, lwtid integer , ptid integer, tlevel integer , smpid integer, wait_status text, wait_event text); 函数第二个参数指定的SQL语句输出结果的数据类型必须跟AS后面指明的数据类型一致,否则执行时可能会因为类型不匹配而报错。 函数第二个参数指定的SQL语句中不能触发跨节点的查询动作,否则会触发执行报错。 函数第二个参数指定的SQL语句只能是SELECT/UPDATE/DELETE/INSERT语句中的一种,且 不支持语句中有returning语句。 函数调用用户需具有SQL语句中对象相应的操作权限。 如果是INSERT语句,不支持INSERT OVERWRITE、UPSERT、和INSERT INTO。 对于UPDATE/DELETE/INSERT语句,只允许初始化用户在就地升级模式下或者管理员用户在重分布模式下执行;要求语句在每个实例上修改的记录数相同,否则执行会报错;函数会输出一条一列bigint类型的数值,此数值表示语句在每个实例上操作的记录数。 SELECT * FROM pgxc_parallel_query('cn', 'UPDATE pg_partition SET relpages = 0') AS (updated bigint);
  • table_distribution(schemaname text, tablename text) 描述:查看指定表在各个节点上占用的存储空间。 参数:表示待查询表的模式名和表名,均为text类型。 返回值类型:record 使用本函数查询指定表存储分布信息,需要具备指定表的SELECT权限。 table_distribution性能比table_skewness更优,尤其是在大集群大数据量场景下,请优先考虑使用table_distribution函数。 当使用table_distribution并希望直观的看到空间占比时,可使用dnsize/(sum(dnsize) over ())的方式查看出具体的占比情况。
  • table_data_skewness(data_row record, locatorType "char") 描述:计算指定表中列拼接出的record,对应的桶分布索引。 参数:data_row表示指定表中列拼接出的record,locatorType表示分布规则,当前建议指定'H',按hash分布计算。 返回值类型:smallint 示例: 计算tx表中a列拼接的record,按照hash分布规则对应的桶分布索引。 1 2 3 4 5 6 7 8 9 select a, table_data_skewness(row(a), 'H') from tx; a | table_data_skewness ---+--------------------- 3 | 0 6 | 2 7 | 2 4 | 1 5 | 1 (5 rows)
  • table_distribution(regclass) 描述:查看指定表在各个节点上占用的存储空间。 参数:表示待查询表的表名或OID,表名可以有模式名限定。为regclass类型。 返回值类型:record 使用本函数查询指定表存储分布信息,需要具备指定表的SELECT权限。 table_distribution性能比table_skewness更优,尤其是在大集群大数据量场景下,请优先考虑使用table_distribution函数。 当使用table_distribution并希望直观的看到空间占比时,可使用dnsize/(sum(dnsize) over ())的方式查看出具体的占比情况。
  • table_skewness(table_name text, column_name text[, row_num text]) 描述:查看表里某列数据,按hash分布规则,在各节点的占比情况。结果以数据节点上的数据量排序。 参数:table_name为表名;column_name为列名;row_num表示查看当前列所有数据,可缺省,默认为0。非0时,表示抽取指定条数的数据查看占比情况(每次采样结果可能不相同,只保证采集row_num条数据进行占比计算)。 返回值类型:record 示例: 根据tx表中的a列,按hash分布,则在1,2,0编号的DN上分布的数据量分别为7条,2条,1条。 1 2 3 4 5 6 7 SELECT * FROM table_skewness('tx','a'); seqnum | num | ratio --------+-----+---------- 1 | 7 | 70.000% 2 | 2 | 20.000% 0 | 1 | 10.000% (3 row)
  • table_distribution() 描述:查看当前库中所有表在各节点的存储空间分布情况。 返回值类型:record 使用本函数涉及全库表信息查询,需要具备管理员权限或预置角色gs_role_read_all_stats权限。 当前基于table_distribution()函数,GaussDB(DWS)提供视图PGXC_GET_TABLE_SKEWNESS进行数据倾斜查询,建议在数据库中表数量(小于10000)较少的场景直接使用。
  • 参数说明 ENABLE | DISABLE QUERY REWRITE 是否对本物化视图启动查询重写。 在启用物化视图的查询重写后需刷新物化视图,保证物化视图数据是最新的。 REFRESH [ COMPLETE ] [ ON DEMAND ] [ [ START WITH (timestamptz) ] | [EVERY (interval)] ] 修改物化视图的刷新方式。 OWNER TO new_owner 修改物化视图的owner。
  • 语法格式 ALTER MATERIALIZED VIEW [ IF EXISTS ] { materialized_view_name } [ ENABLE | DISABLE ] QUERY REWRITE; ALTER MATERIALIZED VIEW [ IF EXISTS ] { materialized_view_name } REFRESH [ COMPLETE ] [ ON DEMAND ] [ [ START WITH (timestamptz) ] | [ EVERY (interval) ] ]; ALTER MATERIALIZED VIEW { materialized_view_name } OWNER TO new_owner;
  • 离散范围类型 离散范围是指其元素类型具有定义明确的“步长”的范围,如integer或date。在这些类型中,当两个元素之间没有有效值时,它们可以被说成是相邻。 离散范围类型的每个元素值都有一个明确的“下一个”或“上一个”值。这样就可以通过选择下一个或上一个元素值,在范围界限的包含和排除表达之间转换。例如,在整数范围类型中,[4,8]和(3,9)表示相同的值集合,但对于超过numeric的范围,情况并非如此。 离散范围类型应具有识别元素类型所需步长的规范函数。规范化函数负责将范围类型的等价值转换为具有相同的表示,特别是与包含或者排除界限一致。如果未指定规范化函数,则具有不同格式的范围将始终被视为不相等,即使它们实际上是表达相同的一组值。 内置范围类型int4range、int8range和daterange都使用规范形式,该形式包括下界并且排除上界,也就是[)。但是,用户定义的范围类型可以使用其他约定。
  • 构造范围 每一种范围类型都有一个与其同名的构造器函数。使用构造器函数比写一个范围文字常数更方便,因为它避免了对界限值的额外引用。构造器函数接受两个或三个参数。两个参数的形式以标准的形式构造一个范围(包含下界,排除上界),而三个参数的形式按照第三个参数指定的界限形式构造一个范围。第三个参数必须是下列字符串之一: “()”、 “(]”、 “[)”或者 “[]”。 例如: 完整形式是:下界、上界以及指示界限包含性/排除性的文本参数: SELECT numrange(1.0, 14.0, '(]'); numrange ------------ (1.0,14.0] (1 row) 如果第三个参数被忽略,则假定为 '[)': SELECT numrange(1.0, 14.0); numrange ------------ [1.0,14.0) (1 row) 尽管这里指定了'(]',单返回结果时该值将被转换成标准形式,因为int8range是一种离散范围类型: SELECT int8range(1, 14, '(]'); int8range ----------- [2,15) (1 row) 界限使用NULL导致范围是无界的: SELECT numrange(NULL, 2.2); numrange ---------- (,2.2) (1 row)
  • 包含和排除边界 每一个非空范围都有两个界限:下界和上界。这些值之间的所有点都被包括在范围内。包含界限意味着边界点本身也被包括在范围内,而排除边界意味着边界点不被包括在范围内。 在范围的文本形式中,包含下界用“[”表示,排除下界用“(”表示。同样,包含上界用“]”表示,排除上界用“)”表示。 函数lower_inc(anyrange)和lower_inc(anyrange)分别测试一个范围值的上下界。
  • 无限(无界)范围 范围的下界可以省略,这意味着所有小于上界的值都包括在范围中,例如(,3]。同样,范围的上界被省略,则所有大于下界的值都包括在范围中。如果下界和上界都被省略,则该元素类型的所有值都被认为在范围内。如果缺失的边界指定为包含则自动将包含转换为排除,例如[,]将转换为(,)。可以将这些缺失的值视为+/-无穷大,但它们是特殊的范围类型值,并且被视为超出任何范围元素类型的+/-无穷大值。 具有“无穷大”概念的元素类型可以将其作为显式边界值。例如,在时间戳范围,[today,infinity)不包括特殊的timestamp值infinity,尽管[today,infinity]包括它,就好比 [today,)和[today,]。 函数lower_inf(anyrange)和upper_inf(anyrange)分别测试一个范围的无限上下界。
  • 范围的输入/输出 范围值的输入必须遵循下列模式之一: (lower-bound,upper-bound) (lower-bound,upper-bound] [lower-bound,upper-bound) [lower-bound,upper-bound] empty 圆括号或方括号指示上下界是否为排除的或者包含的。最后一个模式是empty,它表示一个空范围(一个不包含点的范围)。 lower-bound可以作为子类型的合法输入的一个字符串,或者是空,表示没有下界。同样,upper-bound可以是作为子类型的合法输入的一个字符串,或者是空,表示没有上界。 每个界限值可以使用双引号引用。如果界限值包含圆括号、方括号、逗号、双引号或反斜线时,则必须使用双引号引用,否则这些符号会被认作范围语法的一部分。要想把双引号或反斜线放在被引用的界限值中,需要在双引号或反斜线前面加一个反斜线(在双引号引用的界限值中的一对双引号表示一个双引号字符,这与SQL字符串中的单引号规则类似)。此外,可以避免引用并且使用反斜线转义来保护所有数据字符,否则它们会被当做返回语法的一部分。什么都不写则表示一个无限界限,因此,要表示空字符串的界限值,可以写成""。 范围值前后允许有空格,但是圆括号或方括号之间的任何空格会被当做上下界值的一部分(取决于元素类型,它可能是有意义的也可能是无意义的)。 示例 查询包括3,不包括7,并且包括3和7之间的所有点: SELECT '[3,7)'::int4range; int4range ----------- [3,7) (1 row) 查询既不包括3也不包括 7,但是包括之间的所有点: SELECT '(3,7)'::int4range; int4range ----------- [4,7) (1 row) 查询只包括单独一个点4: SELECT '[4,4]'::int4range; int4range ----------- [4,5) (1 row) 查询不包括点(并且将被标准化为 '空'): SELECT '[4,4)'::int4range; int4range ----------- empty (1 row)
  • jsonb高级特性 json和jsonb的主要差异在于存储方式上的不同,jsonb存储的是解析后的二进制,能够体现JSON的层次结构,更便于直接访问等,因此jsonb较json具有很多高级特性。 格式归一化 对于输入的object-json字符串,解析成jsonb二进制后,会天然的丢弃语义上无关紧要的细节,比如空格: 1 2 3 4 5 SELECT ' [1, " a ", {"a" :1 }] '::jsonb; jsonb ---------------------- [1, " a ", {"a": 1}] (1 row) 对于object-json,会删除重复的键值,只保留最后一个出现的,例如: 1 2 3 4 5 SELECT '{"a" : 1, "a" : 2}'::jsonb; jsonb ---------- {"a": 2} (1 row) 对于object-json,键值会重新进行排序,排序规则:长度长的在后、长度相等则ascii码大的在后,例如: 1 2 3 4 5 SELECT '{"aa" : 1, "b" : 2, "a" : 3}'::jsonb; jsonb --------------------------- {"a": 3, "b": 2, "aa": 1} (1 row)
  • 输入格式 json和jsonb输入必须是一个符合JSON数据格式的字符串,此字符串用单引号''声明。 null (null-json):仅null,全小写。 1 2 SELECT 'null'::json; -- suc SELECT 'NULL'::jsonb; -- err 数字 (num-json):正负整数、小数、0,支持科学计数法。 1 2 3 4 SELECT '1'::json; SELECT '-1.5'::json; SELECT '-1.5e-5'::jsonb, '-1.5e+2'::jsonb; SELECT '001'::json, '+15'::json, 'NaN'::json; -- 不支持多余的前导0,正数的+号,以及NaN和infinity。 布尔(bool-json):仅true、false,全小写。 1 2 SELECT 'true'::json; SELECT 'false'::jsonb; 字符串(str-json):必须是加双引号的字符串。 1 2 SELECT '"a"'::json; SELECT '"abc"'::jsonb; 数组(array-json):使用中括号[]包裹,满足数组书写条件。数组内元素类型可以是任意合法的JSON,且不要求类型一致。 1 2 3 SELECT '[1, 2, "foo", null]'::json; SELECT '[]'::json; SELECT '[1, 2, "foo", null, [[]], {}]'::jsonb; 对象(object-json):使用大括号{}包裹,键必须是满足JSON字符串规则的字符串,值可以是任意合法的JSON。 1 2 3 SELECT '{}'::json; SELECT '{"a": 1, "b": {"a": 2, "b": null}}'::json; SELECT '{"foo": [true, "bar"], "tags": {"a": 1, "b": null}}'::jsonb;
  • pg_xlogdump (start_lsn, end_lsn) 描述:可以在CN或者DN上执行,根据起始和终止lsn解析xlog文件。该函数仅8.3.0及以上集群版本支持。 入参:start_lsn,表示设定的起始LSN号;end_lsn,表示设定的终止LSN号。无需保证起始LSN号是一条xlog的起始位置,会从起始LSN号后第一条有效的xlog开始解析。 返回值类型:record 返回信息如下: 字段名称 类型 含义 node_name text 节点名称。 start_lsn text 设定的起始LSN。 end_lsn text 设定的终止LSN。 startlsn text xlog起始LSN。 endlsn text xlog终止LSN。 prelsn text 前一条xlog起始LSN。 xid xid xlog事务ID号。 datalen int4 xlog数据长度,单位为byte。 totallen int4 xlog长度,单位为byte。 type text xlog类型。 desc text xlog内容。 blkref text xlog关联的relfilenode。 由于不同xlog类型xlogdescribe字段的长度不一致,pg_xlogdump()函数会对该字段进行裁剪,仅保留前64个字节。 可以找到目标xlog后结合pg_xlog_display_one_lsn()函数查看完整xlog内容。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 SELECT * FROM pg_xlogdump('0/101EF70','0/101F590'); node_name | startlsn | endlsn | prelsn | xlog_tid | datalen | totallen | xlogtype | xlogdescribe | blkref -----------+-----------+-----------+-----------+----------+---------+----------+----------+-----------------------+---------------------------------------------- datanode1 | 0/101EF70 | 0/101EFC0 | 0/101EF18 | 6 | 2 | 80 | Btree | insert leaf: off 1 | blkrel #0: rel 1663/1/2674, fork main, blk 1 datanode1 | 0/101EFC0 | 0/101F018 | 0/101EF70 | 6 | 3 | 88 | Heap | insert: off 2 flags 0 | blkrel #0: rel 1663/1/2608, fork main, blk 0 datanode1 | 0/101F018 | 0/101F068 | 0/101EFC0 | 6 | 2 | 80 | Btree | insert leaf: off 1 | blkrel #0: rel 1663/1/2673, fork main, blk 1 datanode1 | 0/101F068 | 0/101F0B8 | 0/101F018 | 6 | 2 | 80 | Btree | insert leaf: off 2 | blkrel #0: rel 1663/1/2674, fork main, blk 1 datanode1 | 0/101F0B8 | 0/101F110 | 0/101F068 | 6 | 3 | 88 | Heap | insert: off 3 flags 0 | blkrel #0: rel 1663/1/2608, fork main, blk 0 datanode1 | 0/101F110 | 0/101F160 | 0/101F0B8 | 6 | 2 | 80 | Btree | insert leaf: off 1 | blkrel #0: rel 1663/1/2673, fork main, blk 1 datanode1 | 0/101F160 | 0/101F1B0 | 0/101F110 | 6 | 2 | 80 | Btree | insert leaf: off 3 | blkrel #0: rel 1663/1/2674, fork main, blk 1 datanode1 | 0/101F1B0 | 0/101F208 | 0/101F160 | 6 | 3 | 88 | Heap | insert: off 4 flags 0 | blkrel #0: rel 1663/1/2608, fork main, blk 0 datanode1 | 0/101F208 | 0/101F258 | 0/101F1B0 | 6 | 2 | 80 | Btree | insert leaf: off 1 | blkrel #0: rel 1663/1/2673, fork main, blk 1 datanode1 | 0/101F258 | 0/101F2A8 | 0/101F208 | 6 | 2 | 80 | Btree | insert leaf: off 4 | blkrel #0: rel 1663/1/2674, fork main, blk 1 datanode1 | 0/101F2A8 | 0/101F300 | 0/101F258 | 6 | 3 | 88 | Heap | insert: off 5 flags 0 | blkrel #0: rel 1663/1/2608, fork main, blk 0 datanode1 | 0/101F300 | 0/101F350 | 0/101F2A8 | 6 | 2 | 80 | Btree | insert leaf: off 1 | blkrel #0: rel 1663/1/2673, fork main, blk 1 datanode1 | 0/101F350 | 0/101F3A0 | 0/101F300 | 6 | 2 | 80 | Btree | insert leaf: off 5 | blkrel #0: rel 1663/1/2674, fork main, blk 1 datanode1 | 0/101F3A0 | 0/101F3F8 | 0/101F350 | 6 | 3 | 88 | Heap | insert: off 6 flags 0 | blkrel #0: rel 1663/1/2608, fork main, blk 0 datanode1 | 0/101F3F8 | 0/101F448 | 0/101F3A0 | 6 | 2 | 80 | Btree | insert leaf: off 1 | blkrel #0: rel 1663/1/2673, fork main, blk 1 datanode1 | 0/101F448 | 0/101F498 | 0/101F3F8 | 6 | 2 | 80 | Btree | insert leaf: off 5 | blkrel #0: rel 1663/1/2674, fork main, blk 1 datanode1 | 0/101F498 | 0/101F4F0 | 0/101F448 | 6 | 3 | 88 | Heap | insert: off 7 flags 0 | blkrel #0: rel 1663/1/2608, fork main, blk 0 datanode1 | 0/101F4F0 | 0/101F540 | 0/101F498 | 6 | 2 | 80 | Btree | insert leaf: off 1 | blkrel #0: rel 1663/1/2673, fork main, blk 1 datanode1 | 0/101F540 | 0/101F590 | 0/101F4F0 | 6 | 2 | 80 | Btree | insert leaf: off 6 | blkrel #0: rel 1663/1/2674, fork main, blk 1 (19 rows)
  • pg_xlogdump (xid) 描述:可以在CN或者DN上执行,根据事务id号解析xlog文件并过滤。该函数仅8.3.0及以上集群版本支持。 返回值类型:record 返回信息如下: 名称 类型 描述 node_name text 节点名称。 start_lsn text 设定的起始LSN。 end_lsn text 设定的终止LSN。 startlsn text xlog起始LSN。 endlsn text xlog终止LSN。 prelsn text 前一条xlog起始LSN。 xid xid xlog事务ID号。 datalen int4 xlog数据长度,单位为byte。 totallen int4 xlog长度,单位为byte。 type text xlog类型。 desc text xlog内容。 blkref text xlog关联的relfilenode。 由于不同xlog类型xlogdescribe字段的长度不一致,pg_xlogdump()函数会对该字段进行裁剪,仅保留前64个字节。 可以找到目标xlog后结合pg_xlog_display_one_lsn()函数查看完整xlog内容。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 SELECT * FROM pg_xlogdump(1); node_name | startlsn | endlsn | prelsn | xlog_tid | datalen | totallen | xlogtype | xlogdescribe | blkref -----------+-----------+-----------+-----------+----------+---------+----------+----------+----------------+--------------------------------------------- datanode1 | 0/10000A0 | 0/10020F0 | 0/1000028 | 1 | 0 | 8248 | X LOG | page hint | blkrel #0: rel 1663/1/1255, fork fsm, blk 2 datanode1 | 0/10020F0 | 0/1004140 | 0/10000A0 | 1 | 0 | 8248 | XLOG | page hint | blkrel #0: rel 1663/1/1247, fork fsm, blk 2 datanode1 | 0/1004140 | 0/1004168 | 0/10020F0 | 1 | 4 | 38 | XLOG | nextOid: 18192 | datanode1 | 0/1004168 | 0/10061B8 | 0/1004140 | 1 | 0 | 8248 | XLOG | page hint | blkrel #0: rel 1663/1/2616, fork fsm, blk 2 datanode1 | 0/10061B8 | 0/1008208 | 0/1004168 | 1 | 0 | 8248 | XLOG | page hint | blkrel #0: rel 1663/1/2602, fork fsm, blk 2 datanode1 | 0/1008208 | 0/100A258 | 0/10061B8 | 1 | 0 | 8248 | XLOG | page hint | blkrel #0: rel 1663/1/2603, fork fsm, blk 2 datanode1 | 0/100A258 | 0/100C2A8 | 0/1008208 | 1 | 0 | 8248 | XLOG | page hint | blkrel #0: rel 1663/1/2609, fork fsm, blk 2 datanode1 | 0/100C2A8 | 0/100E2F8 | 0/100A258 | 1 | 0 | 8248 | XLOG | page hint | blkrel #0: rel 1663/1/2605, fork fsm, blk 2 datanode1 | 0/100E2F8 | 0/1010348 | 0/100C2A8 | 1 | 0 | 8248 | XLOG | page hint | blkrel #0: rel 1663/1/1259, fork fsm, blk 2 datanode1 | 0/1010348 | 0/1012398 | 0/100E2F8 | 1 | 0 | 8248 | XLOG | page hint | blkrel #0: rel 1663/1/2610, fork fsm, blk 2 (10 rows)
  • pg_xlogdump (tablename) 描述:在CN或者DN上执行,根据表名解析xlog文件并过滤。该函数仅8.3.0及以上集群版本支持。 返回值类型:record 返回信息如下: 名称 类型 描述 node_name text 节点名称。 start_lsn text 设定的起始LSN。 end_lsn text 设定的终止LSN。 startlsn text xlog起始LSN。 endlsn text xlog终止LSN。 prelsn text 前一条xlog起始LSN。 xid xid xlog事务ID号。 datalen int4 xlog数据长度,单位为byte。 totallen int4 xlog长度,单位为byte。 type text xlog类型。 desc text xlog内容。 blkref text xlog关联的relfilenode。 由于不同xlog类型xlogdescribe字段的长度不一致,pg_xlogdump()函数会对该字段进行裁剪,仅保留前64个字节。 可以找到目标xlog后结合pg_xlog_display_one_lsn()函数查看完整xlog内容。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 SELECT * FROM pg_xlogdump(pg_class); node_name | startlsn | endlsn | prelsn | xlog_tid | datalen | totallen | xlogtype | xlogdescribe | blkref -----------+-----------+-----------+-----------+----------+---------+----------+----------+-----------------+--------------------------------------------------- datanode1 | 0/2DFC660 | 0/2DFE1D0 | 0/2DFA610 | 0 | 2 | 7000 | Heap | inplace: off 17 | blkrel #0: rel 1663/16324/15920, fork main, blk 2 datanode1 | 0/2E02270 | 0/2E02D88 | 0/2E00220 | 0 | 2 | 2840 | Heap | inplace: off 2 | blkrel #0: rel 1663/16324/15920, fork main, blk 0 datanode1 | 0/2E06E60 | 0/2E06F68 | 0/2E06E28 | 0 | 2 | 264 | Heap | inplace: off 10 | blkrel #0: rel 1663/16324/15920, fork main, blk 0 datanode1 | 0/2E0FC08 | 0/2E0FD10 | 0/2E0EBB8 | 0 | 2 | 264 | Heap | inplace: off 13 | blkrel #0: rel 1663/16324/15920, fork main, blk 0 datanode1 | 0/2E12960 | 0/2E12A68 | 0/2E11960 | 0 | 2 | 264 | Heap | inplace: off 15 | blkrel #0: rel 1663/16324/15920, fork main, blk 0 datanode1 | 0/2E12C88 | 0/2E12D90 | 0/2E12B78 | 0 | 2 | 264 | Heap | inplace: off 17 | blkrel #0: rel 1663/16324/15920, fork main, blk 0 datanode1 | 0/2E13FF8 | 0/2E14118 | 0/2E13110 | 0 | 2 | 264 | Heap | inplace: off 18 | blkrel #0: rel 1663/16324/15920, fork main, blk 0 datanode1 | 0/2E169F8 | 0/2E185E0 | 0/2E169B0 | 0 | 2 | 7120 | Heap | inplace: off 1 | blkrel #0: rel 1663/16324/15920, fork main, blk 1 datanode1 | 0/2E188B8 | 0/2E189D0 | 0/2E185E0 | 0 | 2 | 280 | Heap | inplace: off 2 | blkrel #0: rel 1663/16324/15920, fork main, blk 1 datanode1 | 0/2E18BF8 | 0/2E18CE0 | 0/2E189D0 | 0 | 2 | 232 | Heap | inplace: off 28 | blkrel #0: rel 1663/16324/15920, fork main, blk 1 datanode1 | 0/2E18E80 | 0/2E18F88 | 0/2E18DC0 | 0 | 2 | 264 | Heap | inplace: off 4 | blkrel #0: rel 1663/16324/15920, fork main, blk 1 datanode1 | 0/2E19160 | 0/2E19268 | 0/2E19088 | 0 | 2 | 264 | Heap | inplace: off 5 | blkrel #0: rel 1663/16324/15920, fork main, blk 1 datanode1 | 0/2E19460 | 0/2E1B1D0 | 0/2E19388 | 0 | 2 | 7508 | Heap | inplace: off 16 | blkrel #0: rel 1663/16324/15920, fork main, blk 6 datanode1 | 0/2E1B1D0 | 0/2E1B2E8 | 0/2E19460 | 0 | 2 | 280 | Heap | inplace: off 18 | blkrel #0: rel 1663/16324/15920, fork main, blk 6 datanode1 | 0/2E1B2E8 | 0/2E1B3D0 | 0/2E1B1D0 | 0 | 2 | 232 | Heap | inplace: off 30 | blkrel #0: rel 1663/16324/15920, fork main, blk 1 (15 rows)
共100000条