华为云用户手册

  • 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.”。该提示表明创建快照请求已发送至后台快照线程,但不代表创建快照成功。
  • 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)
  • 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 2 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.”。
  • 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”;
  • 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)
  • 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)
  • table_distribution(schemaname text, tablename text) 描述:查看指定表在各个节点上占用的存储空间。 参数:表示待查询表的模式名和表名,均为text类型。 返回值类型:record 使用本函数查询指定表存储分布信息,需要具备指定表的SELECT权限。 table_distribution性能比table_skewness更优,尤其是在大集群大数据量场景下,请优先考虑使用table_distribution函数。 当使用table_distribution并希望直观的看到空间占比时,可使用dnsize/(sum(dnsize) over ())的方式查看出具体的占比情况。
  • 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
  • table_distribution(regclass) 描述:查看指定表在各个节点上占用的存储空间。 参数:表示待查询表的表名或OID,表名可以有模式名限定。为regclass类型。 返回值类型:record 使用本函数查询指定表存储分布信息,需要具备指定表的SELECT权限。 table_distribution性能比table_skewness更优,尤其是在大集群大数据量场景下,请优先考虑使用table_distribution函数。 当使用table_distribution并希望直观的看到空间占比时,可使用dnsize/(sum(dnsize) over ())的方式查看出具体的占比情况。
  • table_distribution() 描述:查看当前库中所有表在各节点的存储空间分布情况。 返回值类型:record 使用本函数涉及全库表信息查询,需要具备管理员权限或预置角色gs_role_read_all_stats权限。 当前基于table_distribution()函数,GaussDB(DWS)提供视图PGXC_GET_TABLE_SKEWNESS进行数据倾斜查询,建议在数据库中表数量(小于10000)较少的场景直接使用。
  • 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函数。
  • 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);
  • 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 character varying 出现数据格式错误的数据源文件名。 rownum bigint 在数据源文件中,出现数据格式错误的行号。 rawrecord text 在数据源文件中,出现数据格式错误的原始记录。为了防止字段长度过大,限制字段的长度不超过1024 byte。 detail text 详细错误信息。
  • 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
  • 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_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)
  • 参数说明 IF EXISTS 如果指定的索引不存在,则发出一个notice而不是error。 RENAME TO 只改变索引的名字。对存储的数据没有影响。 SET ( { STORAGE_PARAMETER = value } [, ...] ) 改变索引的一个或多个索引方法特定的存储参数。 需要注意的是索引内容不会被这个命令立即修改,根据参数的不同,可能需要使用REINDEX重建索引来获得期望的效果。 RESET ( { storage_parameter } [, ...] ) 重置索引的一个或多个索引方法特定的存储参数为缺省值。与SET一样,可能需要使用REINDEX来完全更新索引。 [ MODIFY PARTITION index_partition_name ] UNUSABLE 用于设置表或者索引分区上的索引不可用。 REBUILD [ PARTITION index_partition_name ] 用于重建表或者索引分区上的索引。 RENAME PARTITION 用于重命名索引分区 COMMENT comment_text 用于添加,修改或删除索引的注释。 index_name 要修改的索引名。 new_name 新的索引名。 取值范围:字符串,且符合标识符命名规范。 storage_parameter 索引方法特定的参数名。 invisible 控制优化器是否生成索引扫描相关计划。 取值范围: ON表示不生成索引扫描相关计划。 OFF表示生成索引扫描相关计划。 默认值:OFF value 索引方法特定的存储参数的新值。根据参数的不同,这可能是一个数字或单词。 new_index_partition_name 新索引分区名。 index_partition_name 索引分区名。 comment_text 索引的注释信息。
  • 示例 重命名现有的索引ds_ship_mode_t1_index1为tpcds.ds_ship_mode_t1_index5,新的索引名字前ds_ship_mode_t1_index5带有原索引所在的schema名tpcds: 1 ALTER INDEX tpcds.ds_ship_mode_t1_index1 RENAME TO tpcds.ds_ship_mode_t1_index5; 设置索引ds_ship_mode_t1_index2不可用: 1 ALTER INDEX tpcds.ds_ship_mode_t1_index2 UNUSABLE; 重建索引ds_ship_mode_t1_index2: 1 ALTER INDEX tpcds.ds_ship_mode_t1_index2 REBUILD; 重命名分区表索引: 1 ALTER INDEX tpcds.ds_customer_address_p1_index2 RENAME PARTITION CA_ADDRESS_SK_index1 TO CA_ADDRESS_SK_index4; 修改索引的注释: 1 ALTER INDEX tpcds.ds_customer_address_p1_index2 COMMENT 'comment_ds_customer_address_p1_index2';
  • 语法格式 重命名表索引的名字,支持新的索引名字前带有原索引所在的schema名,但是不支持同时修改schema名。 1 2 3 4 ALTER INDEX [ IF EXISTS ] index_name RENAME TO new_name; ALTER INDEX [ IF EXISTS ] index_name RENAME TO schema.new_name; 修改表索引的存储参数。 1 2 ALTER INDEX [ IF EXISTS ] index_name SET ( {storage_parameter = value} [, ... ] ); 修改索引的状态标记。 1 2 ALTER INDEX [ IF EXISTS ] index_name SET ( {invisible = value} [, ... ] ); 重置表索引的存储参数。 1 2 ALTER INDEX [ IF EXISTS ] index_name RESET ( storage_parameter [, ... ] ) ; 设置表索引或索引分区不可用。 1 2 ALTER INDEX [ IF EXISTS ] index_name [ MODIFY PARTITION index_partition_name ] UNUSABLE; 列存表不支持该语法。 重建表索引或索引分区。 1 2 ALTER INDEX index_name REBUILD [ PARTITION index_partition_name ]; 重命名索引分区。 1 2 ALTER INDEX [ IF EXISTS ] index_name RENAME PARTITION index_partition_name TO new_index_partition_name; PG_OBJECT系统表记录索引最后修改时间时不支持对该语法的记录。
  • 语法格式 1 2 CREATE GROUP group_name [ [ WITH ] option [ ... ] ] [ ENCRYPTED | UNENCRYPTED ] { PASSWORD | IDENTIFIED BY } { 'password' | DISABLE }; 其中可选项action子句语法为: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 where option can be: {SYSADMIN | NOSYSADMIN} | {AUDITADMIN | NOAUDITADMIN} | {CREATEDB | NOCREATEDB} | {USEFT | NOUSEFT} | {CREATEROLE | NOCREATEROLE} | {INHERIT | NOINHERIT} | {LOGIN | NOLOGIN} | {REPLICATION | NOREPLICATION} | {INDEPENDENT | NOINDEPENDENT} | {VCADMIN | NOVCADMIN} | CONNECTION LIMIT connlimit | VALID BEGIN 'timestamp' | VALID UNTIL 'timestamp' | RESOURCE POOL 'respool' | USER GROUP 'groupuser' | PERM SPACE 'spacelimit' | NODE GROUP logic_group_name | IN ROLE role_name [, ...] | IN GROUP role_name [, ...] | ROLE role_name [, ...] | ADMIN role_name [, ...] | USER role_name [, ...] | SYSID uid | DEFAULT TABLESPACE tablespace_name | PROFILE DEFAULT | PROFILE profile_name | PGUSER
  • 函数类型解析 从系统表PG_PROC中选择所有可能被选到的函数。如果使用了一个不带模式修饰的函数名字,那么认为该函数是那些在当前搜索路径中的函数。如果给出一个带修饰的函数名,那么只考虑指定模式中的函数。 如果搜索路径中找到了多个不同参数类型的函数。将从中选择一个合适的函数。 查找和输入参数类型完全匹配的函数。如果找到一个,则用之。如果输入的实参类型都是unknown类型,则不会找到匹配的函数。 如果未找到完全匹配,请查看该函数是否为一个特殊的类型转换函数。 寻找最优匹配。 抛弃那些输入类型不匹配并且也不能隐式转换成匹配的候选函数。unknown文本在这种情况下可以转换成任何东西。如果只剩下一个候选项,则用之,否则继续下一步。 遍历所有候选函数,保留那些输入类型匹配最准确的。此时,域被看作和它们的基本类型相同。如果没有一个函数能准确匹配,则保留所有候选。如果只剩下一个候选项,则用之,否则继续下一步。 遍历所有候选函数,保留那些需要类型转换时接受首选类型位置最多的函数。如果没有接受首选类型的函数,则保留所有候选。如果只剩下一个候选项,则用之,否则继续下一步。 如果有任何输入参数是unknown类型,检查剩余的候选函数对应参数位置的类型范畴。在每一个能够接受字符串类型范畴的位置使用string类型(这种对字符串的偏爱是合适的,因为unknown文本确实像字符串)。另外,如果所有剩下的候选函数都接受相同的类型范畴,则选择该类型范畴,否则抛出一个错误(因为在没有更多线索的条件下无法作出正确的选择)。现在抛弃不接受选定的类型范畴的候选函数,然后,如果任意候选函数在那个范畴接受一个首选类型,则抛弃那些在该参数位置接受非首选类型的候选函数。如果没有一个候选符合这些测试则保留所有候选。如果只有一个候选函数符合,则使用它;否则,继续下一步。 如果同时有unknown和已知类型的参数,并且所有已知类型的参数有相同的类型,假设unknown参数也是这种类型,检查哪个候选函数可以在unknown参数位置接受这种类型。如果正好一个候选符合,那么使用它。否则,产生一个错误。
  • 示例 示例1:圆整函数参数类型解析。只有一个round函数有两个参数(第一个是numeric,第二个是integer)。所以下面的查询自动把第一个类型为integer的参数转换成numeric类型。 1 2 3 4 5 SELECT round(4, 4); round -------- 4.0000 (1 row) 实际上它被分析器转换成: 1 SELECT round(CAST (4 AS numeric), 4); 因为带小数点的数值常量初始时被赋予numeric类型,因此下面的查询将不需要类型转换,并且可能会略微高效一些: 1 SELECT round(4.0, 4); 示例2:子字符串函数类型解析。有好几个substr函数,其中一个接受text和integer类型。如果用一个未声明类型的字符串常量调用它,系统将选择接受string类型范畴的首选类型(也就是text类型)的候选函数。 1 2 3 4 5 SELECT substr('1234', 3); substr -------- 34 (1 row) 如果该字符串声明为varchar类型,就像从表中取出来的数据一样,分析器将试着将其转换成text类型: 1 2 3 4 5 SELECT substr(varchar '1234', 3); substr -------- 34 (1 row) 被分析器转换后实际上变成: 1 SELECT substr(CAST (varchar '1234' AS text), 3); 分析器从PG_CAST表中获取到text和varchar是二进制兼容的,即可传递给接受类型的函数而不需要做任何物理转换。因此,在这种情况下,实际上没有做任何类型转换。 而且,如果以integer为参数调用函数,分析器将试图将其转换成text类型: 1 2 3 4 5 SELECT substr(1234, 3); substr -------- 34 (1 row) 被分析器转换后实际上变成: 1 2 3 4 5 SELECT substr(CAST (1234 AS text), 3); substr -------- 34 (1 row)
  • 示例 给文本搜索类型ngram1添加类型映射: 1 ALTER TEXT SEARCH CONFIGURATION ngram1 ADD MAPPING FOR multisymbol WITH simple; 修改文本搜索配置的所有者: 1 ALTER TEXT SEARCH CONFIGURATION ngram1 OWNER TO joe; 修改文本搜索配置的schema: 1 ALTER TEXT SEARCH CONFIGURATION ngram1 SET SCHEMA joe; 重命名文本搜索配置: 1 ALTER TEXT SEARCH CONFIGURATION joe.ngram1 RENAME TO ngram_1; 删除类型映射: 1 ALTER TEXT SEARCH CONFIGURATION joe.ngram_1 DROP MAPPING IF EXISTS FOR multisymbol; 增加文本搜索配置字串类型映射语法: 1 ALTER TEXT SEARCH CONFIGURATION english_1 ADD MAPPING FOR word WITH simple,english_stem; 增加文本搜索配置字串类型映射语法: 1 ALTER TEXT SEARCH CONFIGURATION english_1 ADD MAPPING FOR email WITH english_stem, french_stem; 修改文本搜索配置字串类型映射语法: 1 ALTER TEXT SEARCH CONFIGURATION english_1 ALTER MAPPING REPLACE french_stem with german_stem; 查询文本搜索配置相关信息: 1 2 3 4 5 6 7 8 SELECT b.cfgname,a.maptokentype,a.mapseqno,a.mapdict,c.dictname FROM pg_ts_config_map a,pg_ts_config b, pg_ts_dict c WHERE a.mapcfg=b.oid AND a.mapdict=c.oid AND b.cfgname='english_1' ORDER BY 1,2,3,4,5; cfgname | maptokentype | mapseqno | mapdict | dictname -----------+--------------+----------+---------+-------------- english_1 | 2 | 1 | 3765 | simple english_1 | 2 | 2 | 12960 | english_stem english_1 | 4 | 1 | 12960 | english_stem english_1 | 4 | 2 | 12966 | german_stem (4 rows)
  • 语法格式 增加文本搜索配置字串类型映射语法 1 2 ALTER TEXT SEARCH CONFIGURATION name ADD MAPPING FOR token_type [, ... ] WITH dictionary_name [, ... ]; 修改文本搜索配置字典语法 1 2 ALTER TEXT SEARCH CONFIGURATION name ALTER MAPPING FOR token_type [, ... ] REPLACE old_dictionary WITH new_dictionary; 修改文本搜索配置字串类型语法 1 2 ALTER TEXT SEARCH CONFIGURATION name ALTER MAPPING FOR token_type [, ... ] WITH dictionary_name [, ... ]; 更改文本搜索配置字典语法 1 2 ALTER TEXT SEARCH CONFIGURATION name ALTER MAPPING REPLACE old_dictionary WITH new_dictionary; 删除文本搜索配置字串类型映射语法 1 2 ALTER TEXT SEARCH CONFIGURATION name DROP MAPPING [ IF EXISTS ] FOR token_type [, ... ]; 重命名文本搜索配置所有者语法 1 ALTER TEXT SEARCH CONFIGURATION name OWNER TO new_owner; 重命名文本搜索配置名称语法 1 ALTER TEXT SEARCH CONFIGURATION name RENAME TO new_name; 重命名文本搜索配置命名空间语法 1 ALTER TEXT SEARCH CONFIGURATION name SET SCHEMA new_schema; 修改文本搜索配置属性语法 1 ALTER TEXT SEARCH CONFIGURATION name SET ( { configuration_option = value } [, ...] ); 重置文本搜索配置属性语法 1 ALTER TEXT SEARCH CONFIGURATION name RESET ( {configuration_option} [, ...] ); ADD MAPPING FOR选项为文本搜索配置增加字串类型映射;如果ADD MAPPING FOR后面任何一个字串类型的映射已经存在于此文本搜索配置中,那么系统将会报错。 ALTER MAPPING FOR选项会首先清除已有的字串类型映射,然后添加指定的字串类型映射。 ALTER MAPPING REPLACE ... WITH ... 与ALTER MAPPING FOR ... REPLACE ... WITH ...选项会直接使用new_dictionary替换old_dictionary。需要注意的是,只有pg_ts_config_map系统表中存在maptokentype与old_dictionary对应关系的元组时,才能更新成功,否则不会成功,也不会有任何提示信息返回。 DROP MAPPING FOR选项会删除当前文本搜索配置中指定的字串类型映射。 如果没有指定IF EXISTS选项,当DROP MAPPING FOR选项指定的字串类型映射在文本搜索配置中不存在时,数据库会报错。
  • 参数说明 name 已有文本搜索配置的名称(可以有模式修饰)。 token_type 与配置的语法解析器关联的字串类型的名称。详细信息参见解析器。 dictionary_name 文本搜索字典名称。 如果有多个字典,则它们会按指定的顺序搜索。 old_dictionary 映身中拟被替换的文本搜索字典名称。 new_dictionary 替换old_dictionary的文本搜索字典的名称。 new_owner 文本搜索配置的新所有者。 new_name 文本搜索配置的新名称。 new_schema 文本搜索配置的新模式名。 configuration_option 文本搜索配置项。详细信息参见CREATE TEXT SEARCH CONFIGURATION。 value 文本搜索配置项的值。
  • interval(N, N1, N2, N3 ... ) 描述:从输入的整数数组中,查找返回最后一个小于等于目标参数n的数组索引。若n为NULL,返回-1。interval函数不支持interval(N, N1)的场景。该函数仅8.2.0及以上集群版本支持。 返回类型:int 示例: 1 2 3 4 5 SELECT INTERVAL(10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 11) AS RESULT; result -------- 11 (1 row)
  • split(string, delim) 描述:将字符串string按分隔符delimiter进行分隔,并返回数组。该函数仅8.2.0及以上集群版本支持。 返回类型:text[] 示例: 1 2 3 4 5 6 7 8 9 10 SELECT SPLIT('a-b-c-d-e', '-') AS RESULT; result ------------- {a,b,c,d,e} (1 row) SELECT SPLIT('a-b-c-d-e', '-')[4] AS RESULT; result -------- d (1 row)
  • unnest(anyarray) 描述:扩大一个数组为一组行。 返回类型:setof anyelement 示例: 1 2 3 4 5 6 SELECT unnest(ARRAY[1,2]) AS RESULT; result -------- 1 2 (2 rows) unnest函数配合string_to_array数组使用。数组转列,先将字符串按逗号分割成数组,然后再把数组转成列: 1 2 3 4 5 6 7 8 SELECT unnest(string_to_array('a,b,c,d',',')) AS RESULT; result -------- a b c d (4 rows)
  • string_to_array(text, text [, text]) 描述:使用第二个text指定分隔符,使用第三个可选的text作为NULL值替换模板,如果分隔后的子串与第三个可选的text完全匹配,则将其替换为NULL。 返回类型:text[] 示例: 1 2 3 4 5 6 7 8 9 10 SELECT string_to_array('xx~^~yy~^~zz', '~^~', 'yy') AS RESULT; result -------------- {xx,NULL,zz} (1 row) SELECT string_to_array('xx~^~yy~^~zz', '~^~', 'y') AS RESULT; result ------------ {xx,yy,zz} (1 row) 在string_to_array中,如果分隔符参数是NULL,输入字符串中的每个字符将在结果数组中变成一个独立的元素。如果分隔符是一个空白字符串,则整个输入的字符串将变为一个元素的数组。否则输入字符串将在每个分隔字符串处分开。
共100000条