华为云用户手册

  • 备份控制函数 备份控制函数可帮助进行在线备份。 pg_create_restore_point(name text) 描述:为执行恢复创建一个命名点。(需要管理员角色) 返回值类型:text 备注:pg_create_restore_point创建了一个可以用作恢复目的、有命名的事务日志记录,并返回相应的事务日志位置。在恢复过程中,recovery_target_name可以通过这个名称定位对应的日志恢复点,并从此处开始执行恢复操作。避免使用相同的名称创建多个恢复点,因为恢复操作将在第一个匹配(恢复目标)的名称上停止。 pg_current_xlog_location() 描述:获取当前事务日志的写入位置。 返回值类型:text 备注:pg_current_xlog_location使用与前面那些函数相同的格式显示当前事务日志的写入位置。如果是只读操作,不需要系统管理员权限。 pg_current_xlog_insert_location() 描述:获取当前事务日志的插入位置。 返回值类型:text 备注:pg_current_xlog_insert_location显示当前事务日志的插入位置。插入点是事务日志在某个瞬间的“逻辑终点”,而实际的写入位置则是从服务器内部缓冲区写出时的终点。写入位置是可以从服务器外部检测到的终点,如果要归档部分完成事务日志文件,则该操作即可实现。插入点主要用于服务器调试目的。如果是只读操作,不需要系统管理员权限。 gs_current_xlog_insert_end_location() 描述:获取当前事务日志的插入位置。 返回值类型:text 备注:gs_current_xlog_insert_end_location显示当前事务日志的实际插入位置。 pg_start_backup(label text [, fast boolean ]) 描述:开始执行在线备份。(需要管理员角色或复制的角色) 返回值类型:text 备注:pg_start_backup接受一个用户定义的备份标签(通常这是备份转储文件存放地点的名称)。这个函数向数据库的数据目录写入一个备份标签文件,然后以文本方式返回备份的事务日志起始位置。 12345 gaussdb=# SELECT pg_start_backup('label_goes_here'); pg_start_backup----------------- 0/3000020(1 row) pg_stop_backup() 描述:完成执行在线备份。(需要管理员角色或复制的角色) 返回值类型:text 备注:pg_stop_backup删除pg_start_backup创建的标签文件,并且在事务日志归档区里创建一个备份历史文件。这个历史文件包含给予pg_start_backup的标签、备份的事务日志起始与终止位置、备份的起始和终止时间。返回值是备份的事务日志终止位置。计算出中止位置后,当前事务日志的插入点将自动前进到下一个事务日志文件,这样,结束的事务日志文件可以被立即归档从而完成备份。 pg_switch_xlog() 描述:切换到一个新的事务日志文件。(需要管理员角色) 返回值类型:text 备注:pg_switch_xlog移动到下一个事务日志文件,以允许将当前日志文件归档(假定使用连续归档)。返回值是刚完成的事务日志文件的事务日志结束位置+1。如果从最后一次事务日志切换以来没有活动的事务日志,则pg_switch_xlog什么事也不做,直接返回当前事务日志文件的开始位置。 pg_xlogfile_name(location text) 描述:将事务日志的位置字符串转换为文件名。 返回值类型:text 备注:pg_xlogfile_name仅抽取事务日志文件名称。如果给定的事务日志位置恰好位于事务日志文件的交界上,这两个函数都返回前一个事务日志文件的名称。这对于管理事务日志归档来说是非常有利的,因为前一个文件是当前最后一个需要归档的文件。 pg_xlogfile_name_offset(location text) 描述:将事务日志的位置字符串转换为文件名并返回在文件中的字节偏移量。 返回值类型:text,integer 备注:可以使用pg_xlogfile_name_offset从前述函数的返回结果中抽取相应的事务日志文件名称和字节偏移量。例如: 1234567 gaussdb=# SELECT * FROM pg_xlogfile_name_offset(pg_stop_backup());NOTICE: pg_stop_backup cleanup done, waiting for required WAL segments to be archivedNOTICE: pg_stop_backup complete, all required WAL segments have been archived file_name | file_offset --------------------------+-------------000000010000000000000003 | 272(1 row) pg_xlog_location_diff(location text, location text) 描述:计算两个事务日志位置之间在字节上的区别。 返回值类型:numeric pg_cbm_start_tracked_location() 描述:用于查询cbm解析的起始lsn位置。 返回值类型:text pg_cbm_tracked_location() 描述:用于查询cbm解析到的lsn位置。 返回值类型:text pg_cbm_get_merged_file(startLSNArg text, endLSNArg text) 描述:用于将指定lsn范围之内的cbm文件合并成一个cbm文件,并返回合并完的cbm文件名。 返回值类型:text 备注:必须是系统管理员或运维管理员才能获取cbm合并文件。 pg_cbm_get_changed_block(startLSNArg text, endLSNArg text) 描述:用于将指定lsn范围之内的cbm文件合并成一个表,并返回表的各行记录。 返回值类型:records 备注:pg_cbm_get_changed_block返回的表字段包含:合并起始的lsn,合并截止的lsn, 表空间oid,库oid,表的relfilenode,表的fork number,表是否为系统表,表是否被删除,表是否被创建,表是否被截断,表被截断后的页面数,有多少页被修改以及被修改的页号的列表。 pg_cbm_recycle_file(targetLSNArg text) 描述:删除不再使用的cbm文件,并返回删除后的第一条lsn。 返回值类型:text pg_cbm_force_track(targetLSNArg text,timeOut int) 描述:强制执行一次cbm追踪到指定的xlog位置,并返回实际追踪结束点的xlog位置。 返回值类型:text pg_enable_delay_ddl_recycle() 描述:开启延迟DDL功能,并返回开启点的xlog位置。需要管理员角色或运维管理员角色打开operation_mode。 返回值类型:text pg_disable_delay_ddl_recycle(barrierLSNArg text, isForce bool) 描述:关闭延迟DDL功能,并返回本次延迟DDL生效的xlog范围。需要管理员角色或运维管理员角色打开operation_mode。 返回值类型:records pg_enable_delay_xlog_recycle() 描述:开启延迟xlog回收功能,数据库主节点修复使用。 返回值类型:void pg_disable_delay_xlog_recycle() 描述:关闭延迟xlog回收功能,数据库主节点修复使用。 返回值类型:void pg_cbm_rotate_file(rotate_lsn text) 描述:等待cbm解析到rotate_lsn之后,强制切换文件,在build期间调用。 返回值类型:void。 gs_roach_stop_backup(backupid text) 描述:停止一个内部备份工具GaussRoach开启的备份。与pg_stop_backup系统函数类似,但更轻量。 返回值类型:text,内容为当前日志的插入位置。 gs_roach_enable_delay_ddl_recycle(backupid name) 描述:开启延迟DDL功能,并返回开启点的日志位置。与pg_enable_delay_ddl_recycle系统函数类似,但更轻量。并且,通过传入不同的backupid,可以支持并发打开延迟DDL。 返回值类型:text,内容为返回开启点的日志位置。 gs_roach_disable_delay_ddl_recycle(backupid text) 描述:关闭延迟DDL功能,并返回本次延迟DDL生效的日志范围,并删除该范围内被用户删除的列存表物理文件。与pg_enable_delay_ddl_recycle系统函数类似,但更轻量。并且,通过传入不同的backupid,可以支持并发关闭延迟DDL功能。 返回值类型:records,内容为本次延迟DDL生效的日志范围。 gs_roach_switch_xlog(request_ckpt bool) 描述:切换当前使用的日志段文件,并且,如果request_ckpt为true,则触发一个全量检查点。 返回值类型:text,内容为切段日志的位置。 gs_block_dw_io(timeout int, identifier text) 描述:阻塞双写页面刷盘。 参数说明: timeout 阻塞时长。 取值范围:[0, 3600](秒),0为阻塞时长为0。 identifier 此次操作的标识。 取值范围:字符串,不支持除大小写字母,数字,以及下划线(_)以外的字符。 返回值类型:bool 备注:调用该函数的用户需要具有SYSADMIN权限或具有OPRADMIN权限,运维管理员角色须打开operate_mode。 gs_is_dw_io_blocked() 描述:查看当前双写页面刷盘是否被阻塞,如果处于阻塞中则返回true。 返回值类型:bool 备注:调用该函数的用户需要具有SYSADMIN权限或具有OPRADMIN权限,运维管理员角色须打开operate_mode。 gs_pitr_advance_last_updated_barrier() 描述:在PITR模式下,强制推进上次上传到OBS/NAS介质中的全局最大已归档恢复点到当前点,无入参。 返回值类型:text 备注:调用该函数的用户需要具有SYSADMIN权限或具有OPRADMIN权限,运维管理员角色须打开operate_mode。同时只能在集中式的主DN上使用才有效。返回值为当前推进到的最新本地最大已归档恢复点。 gs_pitr_clean_local_barrier_files('delete_timestamp') 描述:清理本地缓存的barrier记录文件。 参数范围:delete_timestamp参数类型为text,为linux时间戳,长度为10位。 返回值类型:text 备注:调用该函数的用户需要具有SYSADMIN权限或具有OPRADMIN权限,运维管理员角色须打开operate_mode。返回的结果是删除后本地最老barrier文件的开始时间戳。
  • 咨询锁函数 咨询锁函数用于管理咨询锁(Advisory Lock)。 pg_advisory_lock(key bigint) 描述:获取会话级别的排他咨询锁。 返回值类型:void 备注:pg_advisory_lock锁定应用程序定义的资源,该资源可以用一个64位或两个不重叠的32位键值标识。如果已经有另外的会话锁定了该资源,则该函数将阻塞到该资源可用为止。这个锁是排他的。多个锁定请求将会被压入栈中,因此,如果同一个资源被锁定了三次,它必须被解锁三次以将资源释放给其他会话使用。 pg_advisory_lock(key1 int, key2 int) 描述:获取会话级别的排他咨询锁。 返回值类型:void 备注:只允许sysadmin对键值对(65535, 65535)加会话级别的排他咨询锁,普通用户无权限。 pg_advisory_lock(int4, int4, Name) 描述:获取指定数据库的排他咨询锁。 返回值类型:void pg_advisory_lock_shared(key bigint) 描述:获取会话级别的共享咨询锁。 返回值类型:void pg_advisory_lock_shared(key1 int, key2 int) 描述:获取会话级别的共享咨询锁。 返回值类型:void 备注:pg_advisory_lock_shared类似于pg_advisory_lock,不同之处仅在于共享锁会话可以和其他请求共享锁的会话共享资源,但排他锁除外。 pg_advisory_unlock(key bigint) 描述:释放会话级别的排他咨询锁。 返回值类型:Boolean pg_advisory_unlock(key1 int, key2 int) 描述:释放会话级别的排他咨询锁。 返回值类型:Boolean 备注:pg_advisory_unlock释放先前取得的排他咨询锁。如果释放成功则返回true。如果实际上并未持有指定的锁,将返回false并在服务器中产生一条SQL警告信息。 pg_advisory_unlock(int4, int4, Name) 描述:释放指定数据库上的排他咨询锁。 返回值类型:Boolean 备注:如果释放成功则返回true;如果未持有锁,则返回false。 pg_advisory_unlock_shared(key bigint) 描述:释放会话级别的共享咨询锁。 返回值类型:Boolean pg_advisory_unlock_shared(key1 int, key2 int) 描述:释放会话级别的共享咨询锁。 返回值类型:Boolean 备注:pg_advisory_unlock_shared类似于pg_advisory_unlock,不同之处在于该函数释放的是共享咨询锁。 pg_advisory_unlock_all() 描述:释放当前会话持有的所有咨询锁。 返回值类型:void 备注:pg_advisory_unlock_all将会释放当前会话持有的所有咨询锁,该函数在会话结束的时候被隐含调用,即使客户端异常地断开连接也是一样。 pg_advisory_xact_lock(key bigint) 描述:获取事务级别的排他咨询锁。 返回值类型:void pg_advisory_xact_lock(key1 int, key2 int) 描述:获取事务级别的排他咨询锁。 返回值类型:void 备注:pg_advisory_xact_lock类似于pg_advisory_lock,不同之处在于锁是自动在当前事务结束时释放,而且不能被显式的释放。只允许sysadmin对键值对(65535, 65535)加事务级别的排他咨询锁,普通用户无权限。 pg_advisory_xact_lock_shared(key bigint) 描述:获取事务级别的共享咨询锁。 返回值类型:void pg_advisory_xact_lock_shared(key1 int, key2 int) 描述:获取事务级别的共享咨询锁。 返回值类型:void 备注:pg_advisory_xact_lock_shared类似于pg_advisory_lock_shared,不同之处在于锁是在当前事务结束时自动释放,而且不能被显式的释放。 pg_try_advisory_lock(key bigint) 描述:尝试获取会话级排他咨询锁。 返回值类型:Boolean 备注:pg_try_advisory_lock类似于pg_advisory_lock,不同之处在于该函数不会阻塞以等待资源的释放。它要么立即获得锁并返回true,要么返回false表示目前不能锁定。 pg_try_advisory_lock(key1 int, key2 int) 描述:尝试获取会话级排他咨询锁。 返回值类型:Boolean 备注:只允许sysadmin对键值对(65535, 65535)加会话级别的排他咨询锁,普通用户无权限。 pg_try_advisory_lock_shared(key bigint) 描述:尝试获取会话级共享咨询锁。 返回值类型:Boolean pg_try_advisory_lock_shared(key1 int, key2 int) 描述:尝试获取会话级共享咨询锁。 返回值类型:Boolean 备注:pg_try_advisory_lock_shared类似于pg_try_advisory_lock,不同之处在于该函数尝试获得共享锁而不是排他锁。 pg_try_advisory_xact_lock(key bigint) 描述:尝试获取事务级别的排他咨询锁。 返回值类型:Boolean pg_try_advisory_xact_lock(key1 int, key2 int) 描述:尝试获取事务级别的排他咨询锁。 返回值类型:Boolean 备注:pg_try_advisory_xact_lock类似于pg_try_advisory_lock,不同之处在于如果得到锁,在当前事务的结束时自动释放,而且不能被显式的释放。只允许sysadmin对键值对(65535, 65535)加事务级别的排他咨询锁,普通用户无权限。 pg_try_advisory_xact_lock_shared(key bigint) 描述:尝试获取事务级别的共享咨询锁。 返回值类型:Boolean pg_try_advisory_xact_lock_shared(key1 int, key2 int) 描述:尝试获取事务级别的共享咨询锁。 返回值类型:Boolean 备注:pg_try_advisory_xact_lock_shared类似于pg_try_advisory_lock_shared,不同之处在于如果得到锁,在当前事务结束时自动释放,而且不能被显式的释放。 lock_cluster_ddl() 描述:尝试对数据库内所有存活的数据库主节点获取会话级别的排他咨询锁。 返回值类型:Boolean 备注:只允许sysadmin调用,普通用户无权限。 unlock_cluster_ddl() 描述:尝试对数据库主节点会话级别的排他咨询锁。 返回值类型:Boolean 父主题: 系统管理函数
  • 双数据库实例容灾查询函数 gs_get_global_barrier_status() 描述:两地三中心跨Region容灾特性开启后,主数据库实例和灾备数据库实例通过obs进行日志同步,通过barrier日志在主数据库实例的落盘,在灾备数据库实例的回放来确定主数据库实例归档日志进度与灾备数据库实例日志回放进度。gs_get_global_barrier_status用以查询主数据库实例已在obs完成归档的最新global barrier。 返回值类型:text global_barrier_id:全局最新barrier ID。 global_achive_barrier_id:全局最新归档barrier ID。 gs_get_global_barriers_status() 描述:两地三中心跨Region容灾特性-基于OBS的解决方案开启后,主数据库实例和多个灾备数据库实例通过obs进行日志同步,通过barrier日志在主数据库实例的落盘,在灾备数据库实例的回放来确定主数据库实例归档日志进度与灾备数据库实例日志回放进度。gs_get_global_barriers_status用以查询主数据库实例已在obs完成归档的最新global barrier。 返回值类型:text slot_name:容灾使用的槽位名。 global_barrier_id:全局最新barrier ID。 global_achive_barrier_id:全局最新归档barrier ID。 gs_get_local_barrier_status() 描述:两地三中心跨Region容灾特性开启后,主数据库实例和灾备数据库实例通过obs进行日志同步,通过barrier日志在主数据库实例的落盘,在灾备数据库实例的回放来确定主数据库实例归档日志进度与灾备数据库实例日志回放进度。gs_get_local_barrier_status用于查询灾备数据库实例每个节点当前的日志回放情况。 返回值类型:text barrier_id:灾备数据库实例某节点当前回放到的最新barrier ID。 barrier_lsn:灾备数据库实例某节点当前回放到的最新barrier ID的Log Sequence Number ( LSN )。 archive_lsn:灾备数据库实例某节点当前已获得归档日志的位置,该参数当前未生效。 flush_lsn:灾备数据库实例某节点当前已完成刷盘日志位置。 gs_upload_obs_file('slot_name', 'src_file', 'dest_file') 描述:两地三中心跨Region容灾特性开启后,主数据库实例上传数据到OBS上的函数。 返回值类型:void slot_name:主数据库实例创建的复制槽的名字。 src_file:主数据库实例数据目录下的需要上传的文件位置。 dest_file:上传到OBS上对应的文件位置。 gs_download_obs_file('slot_name', 'src_file', 'dest_file') 描述:两地三中心跨Region容灾特性开启后,灾备数据库实例从OBS上下载数据到本地的函数。 返回值类型:void slot_name:灾备数据库实例创建的复制槽的名字。 src_file:OBS需要下载的文件位置。 dest_file:灾备数据库实例数据目录下需要存放下载文件对应的文件位置。 gs_get_obs_file_context('file_name', 'slot_name') 描述:两地三中心跨Region容灾特性开启后,查询OBS上对应文件的内容。 返回值类型:text file_name:OBS上文件的文件名。 slot_name:主/灾备数据库实例创建的复制槽的名字。 gs_set_obs_file_context('file_name', 'file_context','slot_name') 描述:两地三中心跨Region容灾特性开启后,在OBS上创建文件并写入对应的内容。 返回值类型:text file_name:OBS上文件的文件名。 file_context: 写入文件的内容。 slot_name:主/灾备数据库实例创建的复制槽的名字。 gs_get_hadr_key_cn() 描述:两地三中心跨Region容灾特性开启后,在OBS上创建文件并写入对应的内容。 返回值类型:text file_name:OBS上文件的文件名。 file_context:写入文件的内容。 slot_name:主/灾备数据库实例创建的复制槽的名字。 gs_hadr_has_barrier_creator() 描述:两地三中心跨Region容灾特性开启后,查询当前节点是否存在barrier_creator线程,存在返回true(需要系统管理员角色)。 返回值类型:Boolean 备注:该函数只有在容灾数据库实例启动计划内switchover时使用。 gs_hadr_in_recovery() 描述:两地三中心跨Region容灾特性开启后,查询当前节点是否处于基于目标barrier的日志恢复中,还在恢复中返回true。只有完成日志恢复,才会启动switchover流程中的灾备数据库实例升为生产数据库实例的步骤(需要系统管理员角色)。 返回值类型:Boolean 备注:该函数只有在容灾数据库实例启动计划内switchover时使用。 gs_streaming_dr_get_switchover_barrier() 描述:两地三中心跨Region容灾-基于流式复制的解决方案中,查询灾备数据库实例的DN实例是否已接收到switchover barrier日志并完成回放,已完成返回true。灾备数据库实例只有在所有DN实例都完成switchover barrier日志回放,才会启动switchover流程中的灾备数据库实例升为生产数据库实例的步骤(需要系统管理员角色)。 返回值类型:Boolean 备注:该函数只有在流式容灾解决方案中容灾数据库实例启动计划内switchover时使用。 gs_streaming_dr_service_truncation_check() 描述:两地三中心跨Region容灾-基于流式复制的解决方案中,查询主数据库实例的DN实例是否已完成switchover barrier日志发送,已完成返回true。只有完成日志发送,才会启动switchover流程中的生产数据库实例降为灾备数据库实例的步骤(需要系统管理员角色)。 返回值类型:Boolean 备注:该函数只有在容灾数据库实例启动计划内switchover时使用。 gs_hadr_local_rto_and_rpo_stat() 描述:显示流式容灾的主数据库实例和备数据库实例日志流控信息(只可在主数据库实例的主DN使用,备DN以及备数据库实例均上不可获取到统计信息)。 返回值类型:record,具体各个字段的类型和含义如下: 参数 类型 描述 hadr_sender_node_name text 节点的名称,包含主数据库实例和备数据库实例首备。 hadr_receiver_node_name text 备数据库实例首备名称。 source_ip text 主数据库实例主DN IP地址。 source_port int 主数据库实例主DN通信端口。 dest_ip text 备数据库实例首备DN IP地址。 dest_port int 备数据库实例首备DN通信端口。 current_rto int 流控的信息,当前主备数据库实例的日志rto时间(单位:秒)。 target_rto int 流控的信息,目标主备数据库实例间的rto时间(单位:秒)。 current_rpo int 流控的信息,当前主备数据库实例的日志rpo时间(单位:秒)。 target_rpo int 流控的信息,目标主备数据库实例间的rpo时间(单位:秒)。 rto_sleep_time int RTO流控信息,为了达到目标rto,预期主机walsender所需要的睡眠时间(单位:微秒)。 rpo_sleep_time int RPO流控信息,为了达到目标rpo,预期主机xlogInsert所需要的睡眠时间(单位:微秒)。 gs_hadr_remote_rto_and_rpo_stat() 描述:显示流式容灾其它非本地数据分片的主数据库实例和备数据库实例日志流控信,集中式部署场景不支持该函数。 父主题: 系统管理函数
  • 快照同步函数 快照同步函数是导出当前快照的标识符。 pg_export_snapshot() 描述:保存当前的快照并返回它的标识符。 返回值类型:text 备注:函数pg_export_snapshot保存当前的快照并返回一个文本字符串标识此快照。这个字符串必须传递给想要导入快照的客户端。可用在set transaction snapshot snapshot_id时导入snapshot,但是应用的前提是该事务设置了SERIALIZABLE或REPEATABLE READ隔离级别。而 GaussDB Kernel目前是不支持这两种隔离级别的。该函数的输出不可用做set transaction snapshot的输入。 pg_export_snapshot_and_csn() 描述:保存当前的快照并返回它的标识符。比pg_export_snapshot()多返回一列 CS N,表示当前快照的CSN。 返回值类型:text 父主题: 系统管理函数
  • 通用文件访问函数 通用文件访问函数提供了对数据库服务器上的文件的本地访问接口。只有数据库目录和log_directory目录里面的文件可以访问。使用相对路径访问数据库目录里面的文件,以及匹配log_directory配置而设置的路径访问日志文件。只有数据库初始化用户才能使用这些函数。 pg_ls_dir(dirname text) 描述:列出目录中的文件。 返回值类型:setof text 备注:pg_ls_dir返回指定目录里面的除了特殊项“.”和“..”之外所有名称。 示例: 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233343536 gaussdb=# SELECT pg_ls_dir('./'); pg_ls_dir ---------------------- .postgresql.conf.swp postgresql.conf pg_tblspc PG_VERSION pg_ident.conf core server.crt pg_serial pg_twophase postgresql.conf.lock pg_stat_tmp pg_notify pg_subtrans pg_ctl.lock pg_xlog pg_clog base pg_snapshots postmaster.opts postmaster.pid server.key.rand server.key.cipher pg_multixact pg_errorinfo server.key pg_hba.conf pg_replslot .pg_hba.conf.swp cacert.pem pg_hba.conf.lock global gaussdb.state(32 rows) pg_read_file(filename text, offset bigint, length bigint) 描述:返回一个文本文件的内容。 返回值类型:text 备注:pg_read_file返回一个文本文件的一部分,从offset开始,最多返回length字节(如果先达到文件结尾,则小于这个数值)。如果offset是负数,则它是相对于文件结尾回退的长度。如果省略了offset和length,则返回整个文件。 示例: 1 2 3 4 5 6 7 8 91011 gaussdb=# SELECT pg_read_file('postmaster.pid',0,100); pg_read_file --------------------------------------- 53078 + /srv/BigData/hadoop/data1/dbnode+ 1500022474 + 8000 + /var/run/ FusionInsight + localhost + 2(1 row) pg_read_binary_file(filename text [, offset bigint, length bigint,missing_ok boolean]) 描述:返回一个二进制文件的内容。 返回值类型:bytea 备注:pg_read_binary_file的功能与pg_read_file类似,除了结果的返回值为bytea类型不一致,相应地不会执行编码检查。与convert_from函数结合,这个函数可以用来读取用指定编码的一个文件。 1 gaussdb=# SELECT convert_from(pg_read_binary_file('filename'), 'UTF8'); pg_stat_file(filename text) 描述:返回一个文本文件的状态信息。 返回值类型:record 备注:pg_stat_file返回一条记录,其中包含:文件大小、最后访问时间戳、最后更改时间戳、最后文件状态修改时间戳以及标识传入参数是否为目录的Boolean值。典型的用法: 1 gaussdb=# SELECT * FROM pg_stat_file('filename'); 1 gaussdb=# SELECT (pg_stat_file('filename')).modification; 示例: 1 2 3 4 5 6 7 8 9101112 gaussdb=# SELECT convert_from(pg_read_binary_file('postmaster.pid'), 'UTF8'); convert_from -------------------------------------- 4881 + /srv/BigData/gaussdb/data1/dbnode+ 1496308688 + 25108 + /opt/user/Bigdata/gaussdb/gaussdb_tmp + * + 25108001 43352069 +(1 row) 123456789 gaussdb=# SELECT * FROM pg_stat_file('postmaster.pid'); size | access | modification | change | creation | isdir ------+------------------------+------------------------+------------------------+----------+------- 117 | 2017-06-05 11:06:34+08 | 2017-06-01 17:18:08+08 | 2017-06-01 17:18:08+08 | | f(1 row) 12345 gaussdb=# SELECT (pg_stat_file('postmaster.pid')).modification; modification ------------------------ 2017-06-01 17:18:08+08(1 row) 父主题: 系统管理函数
  • 双数据库实例容灾控制函数 双数据库实例容灾控制函数可以创建归档槽,归档槽指定了保存物理日志的obs信息。 pg_create_physical_replication_slot_extern(slotname text, dummy_standby bool, extra_content text, need_recycle_xlog bool) 描述:创建OBS/NAS归档槽。slotname 为本次灾备的slotname ,主备必须使用同一个slotname 。dummy_standby标志是主备从还是一主多备,false表示一主多备,true表示主备从。extra_content包含了归档槽的一些信息。对于OBS归档槽,其格式为"OBS;obs_server_ip;obs_bucket_name;obs_ak;obs_sk;archive_path;is_recovery;is_vote_replicate",OBS表示归档槽的归档的介质,obs_server_ip为obs的ip,obs_bucket_name为obs的桶名,obs_ak为obs的ak,obs_sk为obs的sk,archive_path为归档的路径i,is_recovery标志是归档槽还是恢复槽,0表示是归档槽,主要是主数据库实例使用;1表示是恢复槽,主要是灾备数据库实例使用。is_vote_replicate标志是否是投票副本优先,0表示同步备机归档优先,1表示投票副本归档优先,当前版本该字段为预留字段,暂未适配。对于NAS归档槽,其格式为"NAS;archive_path;is_recovery;is_vote_replicate",相比OBS归档槽,缺少了OBS相关的配置信息,其余字段意义相同。 如果是不指定OBS或NAS介质的话,默认指定的是OBS归档槽,其extra_content格式为"obs_server_ip;obs_bucket_name;obs_ak;obs_sk;archive_path;is_recovery;is_vote_replicate"。 need_recycle_xlog标志创建归档槽时是否回收老的归档日志,true表示回收,false表示不回收。 返回值类型:records包含本次灾备的slotname和xlog_position 备注:调用该函数的用户需要具有SYSADMIN权限或具有REPLICATION权限或继承了内置角色gs_role_replication的权限。在正常集群下不要使用is_recovery值为1,否则会创建出恢复槽,导致集群进入恢复不可用。 例如: 创建OBS归档槽: 12345 gaussdb=# select * from pg_create_physical_replication_slot_extern('uuid', false, 'OBS;obs.cn-north-7.ulanqab.huawei.com;dyk;19D772JBCACXX3KWS51D;********;openGauss_uuid/dn1;0;0', false); slotname | xlog_position----------+--------------- uuid |(1 row) 创建NAS归档槽: 1234 gaussdb=# select * from pg_create_physical_replication_slot_extern('uuid', false, 'NAS;/data/nas/media/openGauss_uuid/dn1;0;0',false); slotname | xlog_position----------+--------------- uuid | gs_set_obs_delete_location(delete_location text) 描述:设置obs归档日志可删除的位置。delete_location实际为Log Sequence Number ( LSN ),该位置之前的日志在灾备数据库实例已经完成回放并且落盘,可以在obs上进行删除。 返回值类型:xlog_file_name text,表明此次可删除点所在的日志文件名。无论obs删除是否成功,该值都会正常返回。 gaussdb=# select gs_set_obs_delete_location('0/54000000'); gs_set_obs_delete_location ----------------------------- 000000010000000000000054_00(1 row) gs_set_obs_delete_location_with_slotname(cstring, cstring ) 描述:设置某个容灾关系上obs归档日志可删除的位置。第一个参数实际为Log Sequence Number ( LSN ),该位置之前的日志在灾备数据库实例已经完成回放并且落盘,可以在obs上进行删除,第二个参数为归档槽的名称。 返回值类型:xlog_file_name text,表明此次可删除点所在的日志文件名。无论obs删除是否成功,该值都会正常返回。 gs_hadr_do_switchover() 描述:基于OBS的异地容灾解决方案中主数据库实例在执行计划内swithover过程中截断业务的接口。 返回值类型:bool,表明此次业务截断是否成功,是否可以正常进行switchover流程。 gs_streaming_dr_in_switchover() 描述:基于流式复制的异地容灾解决方案中主数据库实例在执行计划内swithover过程中截断业务的接口。 返回值类型:bool,表明此次业务截断是否成功,是否可以正常进行switchover流程。 父主题: 系统管理函数
  • 服务器信号函数 服务器信号函数向其他服务器进程发送控制信号。只有系统管理员才能使用这些函数。 pg_cancel_backend(pid int) 描述:取消一个后端的当前查询。 返回值类型:Boolean 备注:pg_cancel_backend向由pid标识的后端进程发送一个查询取消(SIGINT)信号。一个活动的后端进程的PID可以从pg_stat_activity视图的pid字段找到,或者在服务器上用ps列出数据库进程。具有SYSADMIN权限的用户,后端进程所连接的数据库的属主,后端进程的属主或者继承了内置角色gs_role_signal_backend权限的用户有权使用该函数。 pg_cancel_session(pid bigint, sessionid bigint) 描述:取消一个后台会话。 返回值类型:Boolean 备注:pg_cancel_session的入参可以通过pg_stat_activity中的pid字段和sessionid的字段查询,可以用于清理线程池模式下,非活跃状态的会话。 pg_reload_conf() 描述:导致所有服务器进程重新装载它们的配置文件(需要系统管理员角色)。 返回值类型:Boolean 备注:pg_reload_conf给服务器发送一个SIGHUP信号,导致所有服务器进程重新装载配置文件。 pg_rotate_logfile() 描述:滚动服务器的日志文件(需要系统管理员角色)。 返回值类型:Boolean 备注:pg_rotate_logfile给日志文件管理器发送信号,告诉它立即切换到一个新的输出文件。这个函数只有在redirect_stderr用于日志输出的时候才有用,否则不会产生日志文件管理器子进程。 pg_terminate_backend(pid int) 描述:终止一个后台线程。 返回值类型:Boolean 备注:如果成功,函数返回true,否则返回false。具有SYSADMIN权限的用户,后端进程所连接的数据库的属主,后端进程的属主或者继承了内置角色gs_role_signal_backend权限的用户有权使用该函数。 示例: 1 2 3 4 5 6 7 8 91011 gaussdb=# SELECT pid from pg_stat_activity; pid ----------------- 140657876268816(1 rows)gaussdb=# SELECT pg_terminate_backend(140657876268816); pg_terminate_backend ---------------------- t(1 row) pg_terminate_session(pid int64, sessionid int64) 描述:终止一个后台session。 返回值类型:Boolean 备注:如果成功,函数返回true,否则返回false。具有SYSADMIN权限的用户、会话所连接的数据库的属主、会话的属主、或者继承了内置角色gs_role_signal_backend权限的用户有权使用该函数。 pg_terminate_active_session_socket(pid int64, sessionid int64) 描述:关闭一个活跃session和客户端的socket连接。 返回值类型:Boolean 备注:如果成功,函数返回true,否则返回false。仅限初始化用户才可使用该函数。 父主题: 系统管理函数
  • 条件表达式函数 coalesce(expr1, expr2, ..., exprn) 描述: 返回参数列表中第一个非NULL的参数值。 COALESCE(expr1, expr2) 等价于CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END。 示例: 12345 gaussdb=# SELECT coalesce(NULL,'hello'); coalesce---------- hello(1 row) 备注: 如果表达式列表中的所有表达式都等于NULL,则本函数返回NULL。 它常用于在显示数据时用缺省值替换NULL。 和CASE表达式一样,COALESCE不会计算不需要用来判断结果的参数;即在第一个非空参数右边的参数不会被计算。 decode(base_expr, compare1, value1, Compare2,value2, … default) 描述:把base_expr与后面的每个compare(n) 进行比较,如果匹配返回相应的value(n)。如果没有发生匹配,则返回default。 示例: 12345 gaussdb=# SELECT decode('A','A',1,'B',2,0); case------ 1(1 row) 备注: 不支持对xml数据类型的操作 nullif(expr1, expr2) 描述:当且仅当expr1和expr2相等时,NULLIF才返回NULL,否则它返回expr1。 nullif(expr1, expr2) 逻辑上等价于CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END。 示例: 12345 gaussdb=# SELECT nullif('hello','world'); nullif -------- hello(1 row) 备注: 不支持对xml数据类型的操作。 如果两个参数的数据类型不同,则: 若两种数据类型之间存在隐式转换,则以其中优先级较高的数据类型为基准将另一个参数隐式转换成该类型,转换成功则进行计算,转换失败则返回错误。如: 12345 gaussdb=# SELECT nullif('1234'::VARCHAR,123::INT4); nullif -------- 1234(1 row) 12 gaussdb=# SELECT nullif('1234'::VARCHAR,'2012-12-24'::DATE);ERROR: invalid input syntax for type timestamp: "1234" 若两种数据类型之间不存在隐式转换,则返回错误。如: 12345 gaussdb=# SELECT nullif(TRUE::BOOLEAN,'2012-12-24'::DATE);ERROR: operator does not exist: boolean = timestamp without time zoneLINE 1: SELECT nullif(TRUE::BOOLEAN,'2012-12-24'::DATE) FROM sys_dummy;^HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. nvl( expr1 , expr2 ) 描述: 如果expr1为NULL则返回expr2。 如果expr1非NULL,则返回expr1。 示例: 12345 gaussdb=# SELECT nvl('hello','world'); nvl ------- hello(1 row) 备注:参数expr1和expr2可以为任意类型,当NVL的两个参数不属于同类型时,看第二个参数是否可以向第一个参数进行隐式转换。如果可以则返回第一个参数类型,否则返回错误。 nvl2( expr1 , expr2,expr3 ) 描述: 如果expr1为NULL,则返回expr3。 如果expr1非NULL,则返回expr2。 此函数在参数a_format_version值为10c和a_format_dev_version值为s1的情况下有效。 示例: 12345 gaussdb=# SELECT nvl2('hello','world','other'); case ------- world(1 row) 备注:参数expr2和expr3可以为任意类型, 当NVL2的后面两个参数不属于同类型时,看expr3参数是否可以向expr2参数进行隐式转换,如果不能隐式转换,会返回错误。如果第一个参数是数值类型,函数在将本参数和其他参数都转换为numeric类型,然后进行比较,对于不能转换的,提示出错信息;第一个参数是其他类型的,函数将其他参数都转换为第一个参数的类型进行比较,对于不能转换的,提示出错信息。 greatest(expr1 [, ...]) 描述:获取并返回参数列表中值最大的表达式的值。 返回值类型: 示例: 12345 gaussdb=# SELECT greatest(1*2,2-3,4-1); greatest ---------- 3(1 row) 12345 gaussdb=# SELECT greatest('HARRY', 'HARRIOT', 'HAROLD'); greatest ---------- HARRY(1 row) 备注: 不支持对xml数据类型的操作。 此函数在参数a_format_version值为10c和a_format_dev_version值为s1的情况下: 如果参数中有任意一个参数的值为null,函数返回null。 如果第一个参数是数值类型,函数将第一个参数和其他参数都转换为numeric类型,然后进行比较,对于不能转换的,提示出错信息;第一个参数是其他类型的,函数将其他参数都转换为第一个参数的类型进行比较,对于不能转换的,提示出错信息。 least(expr1 [, ...]) 描述:获取并返回参数列表中值最小的表达式的值。 示例: 12345 gaussdb=# SELECT least(1*2,2-3,4-1); least ------- -1(1 row) 12345 gaussdb=# SELECT least('HARRY','HARRIOT','HAROLD'); least -------- HAROLD(1 row) 备注: 不支持对xml数据类型的操作。 此函数在参数a_format_version值为10c和a_format_dev_version值为s1的情况下: 如果参数中有任意一个参数的值为null,函数返回null。 如果第一个参数是数值类型,函数将第一个参数和其他参数都转换为numeric类型,然后进行比较,对于不能转换的,提示出错信息;第一个参数是其他类型的,函数将其他参数都转换为第一个参数的类型进行比较,对于不能转换的,提示出错信息。 EMPTY_BLOB() 描述:使用EMPTY_BLOB在INSERT或UPDATE语句中初始化一个BLOB变量,取值为NULL。 返回值类型:BLOB 示例: 123456 --新建表gaussdb=# CREATE TABLE blob_tb(b blob,id int);--插入数据gaussdb=# INSERT INTO blob_tb VALUES (empty_blob(),1);--删除表gaussdb=# DROP TABLE blob_tb; 备注:使用DBE_LOB.GET_LENGTH求得的长度为0。 EMPTY_CLOB() 描述:使用EMPTY_CLOB在INSERT或UPDATE语句中初始化一个CLOB变量,取值为空。 此函数在参数a_format_version值为10c和a_format_dev_version值为s1的情况下有效。 返回值类型:CLOB 示例: 123456 --新建表gaussdb=# CREATE TABLE clob_tb(c clob,id int);--插入数据gaussdb=# INSERT INTO clob_tb VALUES (empty_clob(),1);--删除表gaussdb=# DROP TABLE clob_tb; 备注:使用DBE_LOB.GET_LENGTH求得的长度为0。 lnnvl(condition) 描述:lnnvl用于某个查询语句的where子句中,如果条件为true就返回false,如果条件为unknown或者false,就返回true。 condition:必须为逻辑表达式,但不能用于复合条件如and,or,或者between。 返回类型:bool 示例: 1 2 3 4 5 6 7 8 910111213141516171819 --新建表gaussdb=# CREATE TABLE student_demo (name VARCHAR2(20), grade NUMBER(10,2));CREATE TABLE--插入数据gaussdb=# INSERT INTO student_demo VALUES ('name0',0);INSERT 0 1gaussdb=# INSERT INTO student_demo VALUES ('name1',1);INSERT 0 1gaussdb=# INSERT INTO student_demo VALUES ('name2',2);INSERT 0 1--调用lnnvlgaussdb=# SELECT * FROM student_demo WHERE LNNVL(name = 'name1'); name | grade -------+------- name0 | 0.00 name2 | 2.00(2 rows) 此函数在参数a_format_version值为10c和a_format_dev_version值为s2的情况下生效。
  • 配置设置函数 配置设置函数是可以用于查询以及修改运行时配置参数的函数。 current_setting(setting_name) 描述:当前的设置值。 返回值类型:text 备注:current_setting用于以查询形式获取setting_name的当前值。和SQL语句SHOW是等效的。比如: 123456 gaussdb=# SELECT current_setting('datestyle'); current_setting----------------- ISO, MDY(1 row) set_working_grand_version_num_manually(tmp_version) 描述:通过切换授权版本号来更新和升级数据库的新特性。 返回值类型:void shell_in(type) 描述: 为shell类型输入路由(那些尚未填充的类型)。 返回值类型:void shell_out(type) 描述:为shell 类型输出路由(那些尚未填充的类型)。 返回值类型:void set_config(setting_name, new_value, is_local) 描述:设置参数并返回新值。 返回值类型:text 备注:set_config将参数setting_name设置为new_value。如果is_local为true,则new_value将只应用于当前事务。如果希望new_value应用于当前会话,可以使用false,和SQL语句SET是等效的。例如: 123456 gaussdb=# SELECT set_config('log_statement_stats', 'off', false); set_config------------ off(1 row) 父主题: 系统管理函数
  • 示例 byteawithoutorderwithequalcolin、byteawithoutorderwithequalcolout等密态等值函数为数据库内核中数据类型byteawithoutorderwithequalcol指定的in、out、send、recv等读写格式转换函数,具体可参考bytea类型的byteain、byteaout等函数,但会对本地的cek进行验证,需要密文字段中有本地存在的cekoid才能执行成功。 1 2 3 4 5 6 7 8 9101112131415 -- 例如存在加密表int_type,int_col2为其加密列-- 使用非密态客户端连接数据库,查询加密列密文gaussdb=# select int_col2 from int_type; int_col2------------------------------------------------------------------------------------------------------------------------------------------------------ \x01c35301bf421c8edf38c34704bcc82838742917778ccb402a1b7452ad4a6ac7371acc0ac33100000035fe3424919854c86194f1aa5bb4e1ca656e8fc6d05324a1419b69f488bdc3c6(1 row)-- 将加密列密文当做byteawithoutorderwithequalcolin入参,格式从cstring输入转码转化成内部byteawithoutorderwithequalcol形式gaussdb=# select byteawithoutorderwithequalcolin('\x01c35301bf421c8edf38c34704bcc82838742917778ccb402a1b7452ad4a6ac7371acc0ac33100000035fe3424919854c86194f1aa5bb4e1ca656e8fc6d05324a1419b69f488bdc3c6'); byteawithoutorderwithequalcolin------------------------------------------------------------------------------------------------------------------------------------------------------ \x01c35301bf421c8edf38c34704bcc82838742917778ccb402a1b7452ad4a6ac7371acc0ac33100000035fe3424919854c86194f1aa5bb4e1ca656e8fc6d05324a1419b69f488bdc3c6(1 row) 由于byteawithoutorderwithequalcolin等的实现会对cek进行查找,并且判断是否为正常加密后的数据类型。 因此如果用户输入数据的格式不是加密后的数据格式,并且在本地不存在对应cek的情况下,会返回错误。 1 2 3 4 5 6 7 8 9101112131415 gaussdb=# SELECT * FROM byteawithoutorderwithequalcolsend('\x907219912381298461289346129'::byteawithoutorderwithequalcol);ERROR: cek with OID 596711794 not foundLINE 1: SELECT * FROM byteawithoutorderwithequalcolsend('\x907219912... ^gaussdb=# SELECT * FROM byteawithoutordercolout('\x90721901999999999999912381298461289346129');ERROR: cek with OID 2566986098 not foundLINE 1: SELECT * FROM byteawithoutordercolout('\x9072190199999999999... SELECT * FROM byteawithoutorderwithequalcolrecv('\x90721901999999999999912381298461289346129'::byteawithoutorderwithequalcol);ERROR: cek with OID 2566986098 not found ^gaussdb=# SELECT * FROM byteawithoutorderwithequalcolsend('\x90721901999999999999912381298461289346129'::byteawithoutorderwithequalcol);ERROR: cek with OID 2566986098 not foundLINE 1: SELECT * FROM byteawithoutorderwithequalcolsend('\x907219019... ^
  • date_part date_part函数是在传统的Ingres函数的基础上制作的(该函数等效于SQL标准函数extract): date_part('field', source) 这里的field参数必须是一个字符串,而不是一个名称。有效的field与extract一样,详细信息请参见EXTRACT。 示例: 12345 gaussdb=# SELECT date_part('day', TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 16(1 row) 12345 gaussdb=# SELECT date_part('hour', INTERVAL '4 hours 3 minutes'); date_part ----------- 4(1 row)
  • TIMESTAMPDIFF TIMESTAMPDIFF(unit , timestamp_expr1, timestamp_expr2) timestampdiff函数是计算两个日期时间之间(timestamp_expr2-timestamp_expr1)的差值,并以unit形式返回结果。timestamp_expr1,timestamp_expr2必须是一个timestamp、timestamptz、date类型的值表达式。unit表示的是两个日期差的单位。 等效于timestamp_diff(text, timestamp, timestamp)。 该函数仅在GaussDB Kernel兼容MY类型时(即dbcompatibility = 'B')有效,其他类型不支持该函数。 year 年份。 12345 gaussdb=# SELECT TIMESTAMPDIFF(YEAR, '2018-01-01', '2020-01-01'); timestamp_diff---------------- 2(1 row)
  • EXTRACT EXTRACT(field FROM source) extract函数从日期或时间的数值里抽取子域,比如年、小时等。source必须是一个timestamp、time或interval类型的值表达式(类型为date的表达式转换为timestamp,因此也可以用)。field是一个标识符或者字符串,它指定从源数据中抽取的域。extract函数返回类型为double precision的数值。field的取值范围如下所示。 century 世纪。 第一个世纪从0001-01-01 00:00:00 AD开始。这个定义适用于所有使用阳历的国家。没有0世纪,直接从公元前1世纪到公元1世纪。 示例: 12345 gaussdb=# SELECT EXTRACT(CENTURY FROM TIMESTAMP '2000-12-16 12:21:13'); date_part ----------- 20(1 row) day 如果source为timestamp,表示月份里的日期(1-31)。 12345 gaussdb=# SELECT EXTRACT(DAY FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 16(1 row) 如果source为interval,表示天数。 12345 gaussdb=# SELECT EXTRACT(DAY FROM INTERVAL '40 days 1 minute'); date_part ----------- 40(1 row) decade 年份除以10。 12345 gaussdb=# SELECT EXTRACT(DECADE FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 200(1 row) dow 每周的星期几,星期天(0)到星期六(6)。 12345 gaussdb=# SELECT EXTRACT(DOW FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 5(1 row) doy 一年的第几天(1~365/366)。 12345 gaussdb=# SELECT EXTRACT(DOY FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 47(1 row) epoch 如果source为timestamp with time zone,表示自1970-01-01 00:00:00-00 UTC以来的秒数(结果可能是负数); 如果source为date和timestamp,表示自1970-01-01 00:00:00-00当地时间以来的秒数; 如果source为interval,表示时间间隔的总秒数。 12345 gaussdb=# SELECT EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40.12-08'); date_part -------------- 982384720.12(1 row) 12345 gaussdb=# SELECT EXTRACT(EPOCH FROM INTERVAL '5 days 3 hours'); date_part ----------- 442800(1 row) 将epoch值转换为时间戳的方法。 12345 gaussdb=# SELECT TIMESTAMP WITH TIME ZONE 'epoch' + 982384720.12 * INTERVAL '1 second' AS RESULT; result --------------------------- 2001-02-17 12:38:40.12+08(1 row) hour 小时域(0-23)。 12345 gaussdb=# SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 20(1 row) isodow 一周的第几天(1-7)。 星期一为1,星期天为7。 除了星期天外,都与dow相同。 12345 gaussdb=# SELECT EXTRACT(ISODOW FROM TIMESTAMP '2001-02-18 20:38:40'); date_part ----------- 7(1 row) isoyear 日期中的ISO 8601标准年(不适用于间隔)。 每个带有星期一开始的周中包含1月4日的ISO年,所以在年初的1月或12月下旬的ISO年可能会不同于阳历的年。详细信息请参见后续的week描述。 12345 gaussdb=# SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-01'); date_part ----------- 2005(1 row) 12345 gaussdb=# SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-02'); date_part ----------- 2006(1 row) microseconds 秒域(包括小数部分)乘以1,000,000。 12345 gaussdb=# SELECT EXTRACT(MICROSECONDS FROM TIME '17:12:28.5'); date_part ----------- 28500000(1 row) millennium 千年。 20世纪(19xx年)里面的年份在第二个千年里。第三个千年从2001年1月1日零时开始。 12345 gaussdb=# SELECT EXTRACT(MILLENNIUM FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 3(1 row) milliseconds 秒域(包括小数部分)乘以1000。请注意它包括完整的秒。 12345 gaussdb=# SELECT EXTRACT(MILLISECONDS FROM TIME '17:12:28.5'); date_part ----------- 28500(1 row) minute 分钟域(0-59)。 12345 gaussdb=# SELECT EXTRACT(MINUTE FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 38(1 row) month 如果source为timestamp,表示一年里的月份数(1-12)。 12345 gaussdb=# SELECT EXTRACT(MONTH FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 2(1 row) 如果source为interval,表示月的数目,然后对12取模(0-11)。 12345 gaussdb=# SELECT EXTRACT(MONTH FROM INTERVAL '2 years 13 months'); date_part ----------- 1(1 row) quarter 该天所在的该年的季度(1-4)。 12345 gaussdb=# SELECT EXTRACT(QUARTER FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 1(1 row) second 秒域,包括小数部分(0-59)。 12345 gaussdb=# SELECT EXTRACT(SECOND FROM TIME '17:12:28.5'); date_part ----------- 28.5(1 row) timezone 与UTC的时区偏移量,单位为秒。正数对应UTC东边的时区,负数对应UTC西边的时区。 timezone_hour 时区偏移量的小时部分。 timezone_minute 时区偏移量的分钟部分。 week 该天在所在的年份里是第几周。ISO 8601定义一年的第一周包含该年的一月四日(ISO-8601 的周从星期一开始)。换句话说,一年的第一个星期四在第一周。 在ISO定义里,一月的头几天可能是前一年的第52或者第53周,十二月的后几天可能是下一年第一周。比如,2005-01-01是2004年的第53周,而2006-01-01是2005年的第52周,2012-12-31是2013年的第一周。建议isoyear字段和week一起使用以得到一致的结果。 12345 gaussdb=# SELECT EXTRACT(WEEK FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 7(1 row) year 年份域。 12345 gaussdb=# SELECT EXTRACT(YEAR FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 2001(1 row)
  • 时间/日期函数 age(timestamp, timestamp) 描述:将两个参数相减,并以年、月、日作为返回值。若相减值为负,则函数返回亦为负,入参可以都带timezone或都不带timezone。 返回值类型:interval 示例: 12345 gaussdb=# SELECT age(timestamp '2001-04-10', timestamp '1957-06-13'); age ------------------------- 43 years 9 mons 27 days(1 row) age(timestamp) 描述:当前时间和参数相减,入参可以带或者不带timezone。 返回值类型:interval 示例: 12345 gaussdb=# SELECT age(timestamp '1957-06-13'); age ------------------------- 60 years 2 mons 18 days(1 row) clock_timestamp() 描述:实时时钟的当前时间戳。 返回值类型:timestamp with time zone 示例: 12345 gaussdb=# SELECT clock_timestamp(); clock_timestamp ------------------------------- 2017-09-01 16:57:36.636205+08(1 row) current_date 描述:当前日期。 返回值类型:date 示例: 12345 gaussdb=# SELECT current_date; date ------------ 2017-09-01(1 row) 此函数在参数a_format_version值为10c和a_format_dev_version值为s2的情况下返回值类型为timestamp。 current_time 描述:当前时间。 返回值类型:time with time zone 示例: 12345 gaussdb=# SELECT current_time; timetz -------------------- 16:58:07.086215+08(1 row) current_timestamp 描述:当前日期及时间。 返回值类型:timestamp with time zone 示例: 12345 gaussdb=# SELECT current_timestamp; pg_systimestamp ------------------------------ 2017-09-01 16:58:19.22173+08(1 row) current_timestamp(precision) 描述:当前日期及时间,并将结果的微秒圆整为指定小数位。 返回值类型:timestamp with time zone 示例: 12345 gaussdb=# SELECT current_timestamp(1); timestamptz ------------------------------ 2017-09-01 16:58:19.2+08(1 row) 此函数在参数a_format_version值为10c和a_format_dev_version值为s2的情况下,precision参数支持numeric类型的整值,否则仅支持int输入。 微秒末位的0不显示。如 2017-09-01 10:32:19.212000 输出显示为 2017-09-01 10:32:19.212。 date_part(text, timestamp) 描述:获取日期/时间值中子域的值,例如年或者小时的值。等效于extract(field from timestamp)。 timestamp类型:abstime、date、interval、reltime、time with time zone、time without time zone、timestamp with time zone、timestamp without time zone。 返回值类型:double precision 示例: 12345 gaussdb=# SELECT date_part('hour', timestamp '2001-02-16 20:38:40'); date_part ----------- 20(1 row) date_part(text, interval) 描述:获取日期/时间值中子域的值。获取月份值时,如果月份值大于12,则取与12的模。等效于extract(field from timestamp)。 返回值类型:double precision 示例: 12345 gaussdb=# SELECT date_part('month', interval '2 years 3 months'); date_part ----------- 3(1 row) timestamp_diff(text, timestamp, timestamp) 描述:计算两个日期时间之间的差值,截取到参数text指定的精度。 返回值类型:int64 示例: 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627282930313233343536373839404142434445 gaussdb=# SELECT timestamp_diff('year','2018-01-01','2020-04-01'); timestamp_diff ---------------- 2(1 row)gaussdb=# SELECT timestamp_diff('month','2018-01-01','2020-04-01'); timestamp_diff ---------------- 27(1 row)gaussdb=# SELECT timestamp_diff('quarter','2018-01-01','2020-04-01'); timestamp_diff ---------------- 9(1 row)gaussdb=# SELECT timestamp_diff('week','2018-01-01','2020-04-01'); timestamp_diff ---------------- 117(1 row)gaussdb=# SELECT timestamp_diff('day','2018-01-01','2020-04-01'); timestamp_diff ---------------- 821(1 row)gaussdb=# SELECT timestamp_diff('hour','2018-01-01 10:10:10','2018-01-01 12:12:12'); timestamp_diff ---------------- 2(1 row)gaussdb=# SELECT timestamp_diff('minute','2018-01-01 10:10:10','2018-01-01 12:12:12'); timestamp_diff ---------------- 122(1 row)gaussdb=# SELECT timestamp_diff('second','2018-01-01 10:10:10','2018-01-01 10:12:12'); timestamp_diff ---------------- 122(1 row)gaussdb=# SELECT timestamp_diff('microsecond','2018-01-01 10:10:10','2018-01-01 10:12:12'); timestamp_diff ---------------- 122000000(1 row) date_trunc(text, timestamp) 描述:截取到参数text指定的精度。 返回值类型:interval、timestamp with time zone、timestamp without time zone 示例: 12345 gaussdb=# SELECT date_trunc('hour', timestamp '2001-02-16 20:38:40'); date_trunc --------------------- 2001-02-16 20:00:00(1 row) trunc(timestamp) 描述:默认按天截取。 示例: 1234 gaussdb=# SELECT trunc(timestamp '2001-02-16 20:38:40'); trunc---------------------2001-02-16 00:00:00(1 row) trunc(arg1, arg2) 描述:截取到arg2指定的精度。 arg1类型:interval、timestamp with time zone、timestamp without time zone arg2类型:text 返回值类型:interval、timestamp with time zone、timestamp without time zone 示例: 1234 gaussdb=# SELECT trunc(timestamp '2001-02-16 20:38:40', 'hour'); trunc---------------------2001-02-16 20:00:00(1 row) round(arg1, arg2) 描述:四舍五入到arg2指定的精度。 arg1类型:timestamp without time zone arg2类型:text 返回值类型:timestamp without time zone 示例: 1234 gaussdb=# SELECT round(timestamp '2001-02-16 20:38:40', 'hour'); round---------------------2001-02-16 21:00:00(1 row) 此函数在参数a_format_version值为10c和a_format_dev_version值为s1的情况下有效。 daterange(arg1, arg2) 描述:获取时间边界信息。arg1和arg2的类型为date。 返回值类型:daterange 示例: 12345 gaussdb=# select daterange('2000-05-06','2000-08-08'); daterange ------------------------- [2000-05-06,2000-08-08)(1 row) daterange(arg1, arg2, text) 描述:获取时间边界信息。arg1和arg2的类型为date,text类型为text。 返回值类型:daterange 示例: 12345 gaussdb=# select daterange('2000-05-06','2000-08-08','[]'); daterange ------------------------- [2000-05-06,2000-08-09)(1 row) extract(field from timestamp) 描述:获取小时的值。 返回值类型:double precision 示例: 12345 gaussdb=# SELECT extract(hour from timestamp '2001-02-16 20:38:40'); date_part ----------- 20(1 row) extract(field from interval) 描述:获取月份的值。如果大于12,则取与12的模。 返回值类型:double precision 示例: 12345 gaussdb=# SELECT extract(month from interval '2 years 3 months'); date_part ----------- 3(1 row) isfinite(date) 描述:测试是否为有效日期。 返回值类型:Boolean 示例: 12345 gaussdb=# SELECT isfinite(date '2001-02-16'); isfinite ---------- t(1 row) isfinite(timestamp) 描述:测试判断是否为有效时间。 返回值类型:Boolean 示例: 12345 gaussdb=# SELECT isfinite(timestamp '2001-02-16 21:28:30'); isfinite ---------- t(1 row) isfinite(interval) 描述:测试是否为有效区间。 返回值类型:Boolean 示例: 12345 gaussdb=# SELECT isfinite(interval '4 hours'); isfinite ---------- t(1 row) justify_days(interval) 描述:将时间间隔以月(30天为一月)为单位。 返回值类型:interval 示例: 12345 gaussdb=# SELECT justify_days(interval '35 days'); justify_days -------------- 1 mon 5 days(1 row) justify_hours(interval) 描述:将时间间隔以天(24小时为一天)为单位。 返回值类型:interval 示例: 12345 gaussdb=# SELECT JUSTIFY_HOURS(INTERVAL '27 HOURS'); justify_hours ---------------- 1 day 03:00:00(1 row) justify_interval(interval) 描述:结合justify_days和justify_hours,调整interval。 返回值类型:interval 示例: 12345 gaussdb=# SELECT JUSTIFY_INTERVAL(INTERVAL '1 MON -1 HOUR'); justify_interval ------------------ 29 days 23:00:00(1 row) localtime 描述:当前时间。 返回值类型:time 示例: 12345 gaussdb=# SELECT localtime AS RESULT; result---------------- 16:05:55.664681(1 row) localtimestamp 描述:当前日期及时间。 返回值类型:timestamp 示例: 12345 gaussdb=# SELECT localtimestamp; timestamp ---------------------------- 2017-09-01 17:03:30.781902(1 row) now() 描述:当前日期及时间。 返回值类型:timestamp with time zone 示例: 12345 gaussdb=# SELECT now(); now ------------------------------- 2017-09-01 17:03:42.549426+08(1 row) timenow() 描述:当前日期及时间。 返回值类型:abstime 示例: 12345 gaussdb=# select timenow(); timenow------------------------ 2020-06-23 20:36:56+08(1 row) dbtimezone 描述:当前数据库的时区。 返回值类型:text 示例: 12345 gaussdb=# select dbtimezone; dbtimezone------------------------ PRC(1 row) 此函数在参数a_format_version值为10c和a_format_dev_version值为s2的情况下有效。 numtodsinterval(num, interval_unit) 描述:将数字转换为interval类型。num为numeric类型数字,interval_unit为固定格式字符串('DAY' | 'HOUR' | 'MINUTE' | 'SECOND')。 可以通过设置GUC参数IntervalStyle为a,兼容该函数interval输出格式。 返回值类型:interval 示例: 1 2 3 4 5 6 7 8 910111213 gaussdb=# SELECT numtodsinterval(100, 'HOUR'); numtodsinterval ----------------- 100:00:00(1 row)gaussdb=# SET intervalstyle = a;SETgaussdb=# SELECT numtodsinterval(100, 'HOUR'); numtodsinterval------------------------------- +000000004 04:00:00.000000000(1 row) 此函数在参数a_format_version值为10c和a_format_dev_version值为s2的情况下:当参数interval_unit为 'DAY' 时,参数num超过1000000000会报错。 numtoyminterval(num, interval_unit) 描述:将数字转换为interval类型。num为numeric类型数字,interval_unit为固定格式字符串('YEAR' | 'MONTH')。 可以通过设置GUC参数IntervalStyle为a,兼容该函数interval输出格式。 返回值类型:interval 示例: 1 2 3 4 5 6 7 8 910111213 gaussdb=# SELECT numtoyminterval(100, 'MONTH'); numtoyminterval ----------------- 8 years 4 mons(1 row)gaussdb=# SET intervalstyle = oracle;SETgaussdb=# SELECT numtodsinterval(100, 'MONTH'); numtoyminterval ----------------- 8-4(1 row) 此函数在参数a_format_version值为10c和a_format_dev_version值为s2的情况下有效。 new_time(date, timezone1,timezone2) 描述:当timezone1所表示时区的日期时间为date的时候,返回此时timezone2所表示时区的日期时间值。 返回值类型:timestamp 示例: 1 2 3 4 5 6 7 8 910 gaussdb=# select new_time('1997-10-10','AST','EST'); new_time --------------------- 1997-10-09 23:00:00(1 row)gaussdb=# SELECT NEW_TIME(TO_TIMESTAMP ('10-Sep-02 14:10:10.123000','DD-Mon-RR HH24:MI:SS.FF'), 'AST', 'PST'); new_time ------------------------- 2002-09-10 10:10:10.123(1 row) 此函数在参数a_format_version值为10c和a_format_dev_version值为s2的情况下生效。 sessiontimezone 描述:当前会话的时区,无入参。 返回值类型:text。 示例: 1 2 3 4 5 6 7 8 910 gaussdb=# SELECT SESSIONTIMEZONE; session_time_zone ------------------- PST8PDT(1 row)gaussdb=# SELECT LOWER(SESSIONTIMEZONE); lower ----------- @ 8 hours(1 row) 此函数在参数a_format_version值为10c和a_format_dev_version值为s2的情况下生效。 sys_extract_utc(timestamp| timestamptz) 描述:从具有时区偏移量或时区区域名称的日期时间值中提取UTC(协调世界时-以前称为格林威治平均时间)。如果未指定时区,则日期时间与会话时区关联。入参有timestmp和timestamp两种形式。 返回值类型:timestamp。 示例: 1 2 3 4 5 6 7 8 910 gaussdb=# SELECT SYS_EXTRACT_UTC(TIMESTAMP '2000-03-28 11:30:00.00'); sys_extract_utc --------------------- 2000-03-28 03:30:00(1 row)gaussdb=# SELECT SYS_EXTRACT_UTC(TIMESTAMPTZ '2000-03-28 11:30:00.00 -08:00'); sys_extract_utc --------------------- 2000-03-28 19:30:00(1 row) 此函数在参数a_format_version值为10c和a_format_dev_version值为s2的情况下有效。 tz_offset('time_zone_name' | '(+/-)hh:mi' | SESSIONTIMEZONE | DBTIMEZONE) 描述:入参有以上四种形式,返回入参所表示时区的UTC偏移量。 返回值类型:text。 示例: 1 2 3 4 5 6 7 8 910 gaussdb=# SELECT TZ_OFFSET('US/Pacific'); tz_offset ----------- -08:00(1 row)gaussdb=# SELECT TZ_OFFSET(sessiontimezone); tz_offset ----------- +08:00(1 row) 此函数在参数a_format_version值为10c和a_format_dev_version值为s2的情况下生效。 pg_sleep(seconds) 描述:服务器线程延迟时间,单位为秒。 返回值类型:void 示例: 12345 gaussdb=# SELECT pg_sleep(10); pg_sleep ----------(1 row) statement_timestamp() 描述:当前日期及时间。 返回值类型:timestamp with time zone 示例: 12345 gaussdb=# SELECT statement_timestamp(); statement_timestamp ------------------------------- 2017-09-01 17:04:39.119267+08(1 row) sysdate 描述:当前日期及时间。 返回值类型:timestamp 示例: 12345 gaussdb=# SELECT sysdate; sysdate --------------------- 2017-09-01 17:04:49(1 row) timeofday() 描述:当前日期及时间(像clock_timestamp,但是返回时为text)。 返回值类型:text 示例: 12345 gaussdb=# SELECT timeofday(); timeofday ------------------------------------- Fri Sep 01 17:05:01.167506 2017 CST(1 row) transaction_timestamp() 描述:当前日期及时间,与current_timestamp等效。 返回值类型:timestamp with time zone 示例: 12345 gaussdb=# SELECT transaction_timestamp(); transaction_timestamp ------------------------------- 2017-09-01 17:05:13.534454+08(1 row) add_months(d,n) 描述:用于计算时间点d再加上n个月的时间。 d:timestamp类型的值,以及可以隐式转换为timestamp类型的值。 n:INTEGER类型的值,以及可以隐式转换为INTEGER类型的值。 返回值类型:timestamp 示例: 12345 gaussdb=# SELECT add_months(to_date('2017-5-29', 'yyyy-mm-dd'), 11) FROM sys_dummy; add_months --------------------- 2018-04-29 00:00:00(1 row) 此函数在参数a_format_version值为10c和a_format_dev_version值为s1的情况下: 当计算结果大于公元9999年时会报错。 参数n入参若为小数则不会被四舍五入,而是被截断。 last_day(d) 描述:用于计算时间点d当月最后一天的时间。 返回值类型:timestamp 示例: 12345 gaussdb=# select last_day(to_date('2017-01-01', 'YYYY-MM-DD')) AS cal_result; cal_result --------------------- 2017-01-31 00:00:00(1 row)
  • 内置函数 HLL(HyperLogLog)有一系列内置函数用于内部对数据进行处理,一般情况下用户不需要熟知这些函数的使用。详情见表1。 表1 内置函数 函数名称 功能描述 hll_in 以string格式接收hll数据。 hll_out 以string格式发送hll数据。 hll_recv 以bytea格式接收hll数据。 hll_send 以bytea格式发送hll数据。 hll_trans_in 以string格式接收hll_trans_type数据。 hll_trans_out 以string格式发送hll_trans_type数据。 hll_trans_recv 以bytea形式接收hll_trans_type数据。 hll_trans_send 以bytea形式发送hll_trans_type数据。 hll_typmod_in 接收typmod类型数据。 hll_typmod_out 发送typmod类型数据。 hll_hashval_in 接收hll_hashval类型数据。 hll_hashval_out 发送hll_hashval类型数据。 hll_add_trans0 类似于hll_add所提供的功能,初始化时无指定入参,通常在聚合运算的第一阶段DN上使用。 hll_add_trans1 类似于hll_add所提供的功能,初始化时指定一个入参,通常在聚合运算的第一阶段DN上使用。 hll_add_trans2 类似于hll_add所提供的功能,初始化时指定两个入参,通常在聚合运算的第一阶段DN上使用。 hll_add_trans3 类似于hll_add所提供的功能,初始化时指定三个入参,通常在聚合运算的第一阶段DN上使用。 hll_add_trans4 类似于hll_add所提供的功能,初始化时指定四个入参,通常在聚合运算的第一阶段DN上使用。 hll_union_trans 类似hll_union所提供的功能,在聚合运算的第一阶段DN上使用。 hll_union_collect 类似于hll_union所提供的功能,在聚合运算第二阶段DN上使用,汇总各个DN上的结果。 hll_pack 在聚合运算第三阶段DN上使用,把自定义hll_trans_type类型最后转换成hll类型。 hll 用于hll类型转换成hll类型,根据输入参数会设定指定参数。 hll_hashval 用于bigint类型转换成hll_hashval类型。 hll_hashval_int4 用于int4类型转换成hll_hashval类型。
  • 聚合函数 hll_add_agg(hll_hashval) 描述:把哈希后的数据按照分组放到hll中。 返回值类型:hll 示例: 1 2 3 4 5 6 7 8 910111213141516171819 --准备数据gaussdb=# create table t_id(id int);gaussdb=# insert into t_id values(generate_series(1,500));gaussdb=# create table t_data(a int, c text);gaussdb=# insert into t_data select mod(id,2), id from t_id;--创建表并指定列为hllgaussdb=# create table t_a_c_hll(a int, c hll);--根据a列group by对数据分组,把各组数据加到hll中gaussdb=# insert into t_a_c_hll select a, hll_add_agg(hll_hash_text(c)) from t_data group by a;--得到每组数据中hll的Distinct值gaussdb=# select a, #c as cardinality from t_a_c_hll order by a; a | cardinality ---+------------------ 0 | 247.862354346299 1 | 250.908710610377(2 rows) hll_add_agg(hll_hashval, int32 log2m) 描述:把哈希后的数据按照分组放到hll中, 并指定参数log2m,取值范围是10到16。若输入-1或者NULL,则采用内置默认值。 返回值类型:hll 示例: 12345 gaussdb=# select hll_cardinality(hll_add_agg(hll_hash_text(c), 12)) from t_data; hll_cardinality ------------------ 497.965240179228(1 row) hll_add_agg(hll_hashval, int32 log2m, int32 log2explicit) 描述:把哈希后的数据按照分组放到hll中,依次指定参数log2m、log2explicit。 log2explicit取值范围是0到12,0表示直接跳过Explicit模式。该参数可以用来设置Explicit模式的阈值大小,在数据段长度达到2log2explicit后切换为Sparse模式或者Full模式。若输入-1或者NULL,则log2explicit采用内置默认值。 返回值类型:hll 示例: 12345 gaussdb=# select hll_cardinality(hll_add_agg(hll_hash_text(c), NULL, 1)) from t_data; hll_cardinality ------------------ 498.496062953313(1 row) hll_add_agg(hll_hashval, int32 log2m, int32 log2explicit, int64 log2sparse) 描述:把哈希后的数据按照分组放到hll中, 依次指定参数log2m、log2explicit、log2sparse。,log2sparse取值范围是0到14,0表示直接跳过Sparse模式。该参数可以用来设置Sparse模式的阈值大小,在数据段长度达到2log2sparse后切换为Full模式。若输入-1或者NULL,则log2sparse采用内置默认值。 返回值类型:hll 示例: 12345 gaussdb=# select hll_cardinality(hll_add_agg(hll_hash_text(c), NULL, 6, 10)) from t_data; hll_cardinality ------------------ 498.496062953313(1 row) hll_add_agg(hll_hashval, int32 log2m, int32 log2explicit, int64 log2sparse, int32 duplicatecheck) 描述:把哈希后的数据按照分组放到hll中, 依次制定参数log2m、log2explicit、log2sparse、duplicatecheck,duplicatecheck取值范围是0或者1,表示是否开启该模式,默认情况下该模式会关闭。若输入-1或者NULL,则duplicatecheck采用内置默认值。 返回值类型:hll 示例: 12345 gaussdb=# select hll_cardinality(hll_add_agg(hll_hash_text(c), NULL, 6, 10, -1)) from t_data; hll_cardinality ------------------ 498.496062953313(1 row) hll_union_agg(hll) 描述:将多个hll类型数据union成一个hll。 返回值类型:hll 示例: 123456 --将各组中的hll数据union成一个hll,并计算distinct值。gaussdb=# select #hll_union_agg(c) as cardinality from t_a_c_hll; cardinality ------------------ 498.496062953313(1 row) 注意:当两个或者多个hll数据结构做union的时候,必须要保证其中每一个hll里面的精度参数一样,否则将不可以进行union。同样的约束也适用于函数hll_union(hll,hll)。
  • 废弃函数 由于版本升级,HLL(HyperLogLog)有一些旧的函数废弃,用户可以用类似的函数进行替代。 hll_schema_version(hll) 描述:查看当前hll中的schema version。旧版本schema version是常值1,用来进行hll字段的头部校验,重构后的hll在头部增加字段“HLL”进行校验,schema version不再使用。 hll_regwidth(hll) 描述:查看hll数据结构中桶的位数大小。旧版本桶的位数regwidth取值1~5,会存在较大的误差,也限制了基数估计上限。 重构后regwidth为固定值6,不再使用regwidth变量。 hll_expthresh(hll) 描述:得到当前hll中expthresh大小。采用hll_log2explicit(hll)替代类似功能。 hll_sparseon(hll) 描述:是否启用Sparse模式。采用hll_log2sparse(hll)替代类似功能,0表示关闭Sparse模式。
  • 日志函数 hll主要存在三种模式Explicit,Sparse,Full。当数据规模比较小的时候会使用Explicit模式,这种模式下distinct值的计算是没有误差的;随着distinct值越来越多,hll会先后转换为Sparse模式和Full模式,这两种模式在计算结果上没有任何区别,只影响hll函数的计算效率和hll对象的存储空间。下面的函数可以用于查看hll的一些参数。 hll_print(hll) 描述:打印hll的一些debug参数信息。 示例: 12345 gaussdb=# select hll_print(hll_empty()); hll_print------------------------------------------------------------------------------- type=1(HLL_EMPTY), log2m=14, log2explicit=10, log2sparse=12, duplicatecheck=0(1 row) hll_type(hll) 描述:查看当前hll的类型。返回值具体含义如下:返回值0,表示HLL_UNINIT,未初始化的hll对象;返回值1,表示HLL_EMPTY,hll空对象;返回值2,表示HLL_EXPLICIT,Explicit模式的hll对象;返回值3,表示HLL_SPARSE,Sparse模式的hll对象;返回值4,表示HLL_FULL,Full模式的hll对象;返回值5,表示HLL_UNDEFINED,不合法的hll对象。 示例: 12345 gaussdb=# select hll_type(hll_empty()); hll_type ---------- 1(1 row) hll_log2m(hll) 描述:查看当前hll数据结构中的log2m数值,log2m是分桶数的对数值,此值会影响最后hll计算distinct误差率,误差率计算公式为±1.04/√(2 ^ log2m)。当显式指定log2m的取值为10-16之间时,hll会设置分桶数为2log2m。当显示指定log2explicit为-1时,会采用内置默认值。 示例: 1 2 3 4 5 6 7 8 91011121314151617 gaussdb=# select hll_log2m(hll_empty()); hll_log2m----------- 14(1 row)gaussdb=# select hll_log2m(hll_empty(10)); hll_log2m----------- 10(1 row)gaussdb=# select hll_log2m(hll_empty(-1)); hll_log2m----------- 14(1 row) hll_log2explicit(hll) 描述:查看当前hll数据结构中的log2explicit数值。hll通常会由Explicit模式到Sparse模式再到Full模式,这个过程称为promotion hierarchy策略。可以通过调整log2explicit值的大小改变策略,比如log2explicit为0的时候就会跳过Explicit模式而直接进入Sparse模式。当显式指定log2explicit的取值为1-12之间时,hll会在数据段长度超过2log2explicit时转为Sparse模式。当显示指定log2explicit为-1时,会采用内置默认值。 示例: 1 2 3 4 5 6 7 8 91011121314151617 gaussdb=# select hll_log2explicit(hll_empty()); hll_log2explicit------------------ 10(1 row)gaussdb=# select hll_log2explicit(hll_empty(12, 8)); hll_log2explicit------------------ 8(1 row)gaussdb=# select hll_log2explicit(hll_empty(12, -1)); hll_log2explicit------------------ 10(1 row) hll_log2sparse(hll) 描述:查看当前hll数据结构中的log2sparse数值。hll通常会由Explicit模式到Sparse模式再到Full模式,这个过程称为promotion hierarchy策略。可以通过调整log2sparse值的大小改变策略,比如log2sparse为0的时候就会跳过Sparse模式而直接进入Full模式。当显式指定Sparse的取值为1-14之间时,hll会在数据段长度超过2log2sparse时转为Full模式。当显示指定log2sparse为-1时,会采用内置默认值。 示例: 1 2 3 4 5 6 7 8 91011121314151617 gaussdb=# select hll_log2sparse(hll_empty()); hll_log2sparse---------------- 12(1 row)gaussdb=# select hll_log2sparse(hll_empty(12, 8, 10)); hll_log2sparse---------------- 10(1 row)gaussdb=# select hll_log2sparse(hll_empty(12, 8, -1)); hll_log2sparse---------------- 12(1 row) hll_duplicatecheck(hll) 描述:是否启用duplicatecheck,0是关闭,1是开启。默认关闭,对于有较多重复值出现的情况,可以开启以提高效率。当显示指定duplicatecheck为-1时,会采用内置默认值。 示例: 1 2 3 4 5 6 7 8 91011121314151617 gaussdb=# select hll_duplicatecheck(hll_empty()); hll_duplicatecheck-------------------- 0(1 row)gaussdb=# select hll_duplicatecheck(hll_empty(12, 8, 10, 1)); hll_duplicatecheck-------------------- 1(1 row)gaussdb=# select hll_duplicatecheck(hll_empty(12, 8, 10, -1)); hll_duplicatecheck-------------------- 0(1 row)
  • 功能函数 hll_empty() 描述:创建一个空的hll。 返回值类型:hll 示例: 12345 gaussdb=# select hll_empty(); hll_empty------------------------------------------------------------ \x484c4c00000000002b05000000000000000000000000000000000000(1 row) hll_empty(int32 log2m) 描述:创建空的hll并指定参数log2m,取值范围是10到16。若输入-1,则采用内置默认值。 返回值类型:hll 示例: 1 2 3 4 5 6 7 8 91011 gaussdb=# select hll_empty(10); hll_empty------------------------------------------------------------ \x484c4c00000000002b04000000000000000000000000000000000000(1 row)gaussdb=# select hll_empty(-1); hll_empty------------------------------------------------------------ \x484c4c00000000002b05000000000000000000000000000000000000(1 row) hll_empty(int32 log2m, int32 log2explicit) 描述:创建空的hll并依次指定参数log2m、log2explicit。log2explicit取值范围是0到12,0表示直接跳过Explicit模式。该参数可以用来设置Explicit模式的阈值大小,在数据段长度达到2log2explicit后切换为Sparse模式或者Full模式。若输入-1,则log2explicit采用内置默认值。 返回值类型: hll 示例: 1 2 3 4 5 6 7 8 91011 gaussdb=# select hll_empty(10, 4); hll_empty------------------------------------------------------------ \x484c4c00000000001304000000000000000000000000000000000000(1 row)gaussdb=# select hll_empty(10, -1); hll_empty------------------------------------------------------------ \x484c4c00000000002b04000000000000000000000000000000000000(1 row) hll_empty(int32 log2m, int32 log2explicit, int64 log2sparse) 描述:创建空的hll并依次指定参数log2m、log2explicit、log2sparse。log2sparse取值范围是0到14,0表示直接跳过Sparse模式。该参数可以用来设置Sparse模式的阈值大小,在数据段长度达到2log2sparse后切换为Full模式。若输入-1,则log2sparse采用内置默认值。 返回值类型:hll 示例: 1 2 3 4 5 6 7 8 91011 gaussdb=# select hll_empty(10, 4, 8); hll_empty------------------------------------------------------------ \x484c4c00000000001204000000000000000000000000000000000000(1 row)gaussdb=# select hll_empty(10, 4, -1); hll_empty------------------------------------------------------------ \x484c4c00000000001304000000000000000000000000000000000000(1 row) hll_empty(int32 log2m, int32 log2explicit, int64 log2sparse, int32 duplicatecheck) 描述:创建空的hll并依次指定参数log2m、log2explicit、log2sparse、duplicatecheck。duplicatecheck取0或者1,表示是否开启该模式,默认情况下该模式会关闭。若输入-1,则duplicatecheck采用内置默认值。 返回值类型:hll 示例: 1 2 3 4 5 6 7 8 91011 gaussdb=# select hll_empty(10, 4, 8, 0); hll_empty------------------------------------------------------------ \x484c4c00000000001204000000000000000000000000000000000000(1 row)gaussdb=# select hll_empty(10, 4, 8, -1); hll_empty------------------------------------------------------------ \x484c4c00000000001204000000000000000000000000000000000000(1 row) hll_add(hll, hll_hashval) 描述:把hll_hashval加入到hll中。 返回值类型:hll 示例: 12345 gaussdb=# select hll_add(hll_empty(), hll_hash_integer(1)); hll_add---------------------------------------------------------------------------- \x484c4c08000002002b0900000000000000f03f3e2921ff133fbaed3e2921ff133fbaed00(1 row) hll_add_rev(hll_hashval, hll) 描述:把hll_hashval加入到hll中,和hll_add功能一样,只是参数位置进行了交换。 返回值类型:hll 示例: 12345 gaussdb=# select hll_add_rev(hll_hash_integer(1), hll_empty()); hll_add_rev---------------------------------------------------------------------------- \x484c4c08000002002b0900000000000000f03f3e2921ff133fbaed3e2921ff133fbaed00(1 row) hll_eq(hll, hll) 描述:比较两个hll是否相等。 返回值类型:bool 示例: 12345 gaussdb=# select hll_eq(hll_add(hll_empty(), hll_hash_integer(1)), hll_add(hll_empty(), hll_hash_integer(2))); hll_eq -------- f(1 row) hll_ne(hll, hll) 描述:比较两个hll是否不相等。 返回值类型:bool 示例: 12345 gaussdb=# select hll_ne(hll_add(hll_empty(), hll_hash_integer(1)), hll_add(hll_empty(), hll_hash_integer(2))); hll_ne -------- t(1 row) hll_cardinality(hll) 描述:计算hll的distinct值。 返回值类型:int 示例: 12345 gaussdb=# select hll_cardinality(hll_empty() || hll_hash_integer(1)); hll_cardinality ----------------- 1(1 row) hll_union(hll, hll) 描述:把两个hll数据结构union成一个。 返回值类型:hll 示例: 12345 gaussdb=# select hll_union(hll_add(hll_empty(), hll_hash_integer(1)), hll_add(hll_empty(), hll_hash_integer(2))); hll_union-------------------------------------------------------------------------------------------- \x484c4c10002000002b090000000000000000400000000000000000b3ccc49320cca1ae3e2921ff133fbaed00(1 row)
  • 序列号生成函数 generate_series(start, stop) 描述:生成一个数值序列,从start到stop,步长为1。 参数类型:int、bigint、numeric 返回值类型:setof int、setof bigint、setof numeric(与参数类型相同) generate_series(start, stop, step) 描述:生成一个数值序列,从start到stop,步长为step。 参数类型:int、bigint、numeric 返回值类型:setof int、setof bigint、setof numeric(与参数类型相同) generate_series(start, stop, step interval) 描述:生成一个数值序列,从start到stop,步长为step。 参数类型:timestamp或timestamp with time zone 返回值类型:setof timestamp或setof timestamp with time zone(与参数类型相同)
  • 下标生成函数 generate_subscripts(array anyarray, dim int) 描述:生成一系列包括给定数组的下标。 返回值类型:setof int generate_subscripts(array anyarray, dim int, reverse boolean) 描述:生成一系列包括给定数组的下标。当reverse为真时,该系列则以相反的顺序返回。 返回值类型:setof int
  • 数组函数 array_append(anyarray, anyelement) 描述:向数组末尾添加元素,只支持一维数组。 返回类型:anyarray 示例: 12345 gaussdb=# SELECT array_append(ARRAY[1,2], 3) AS RESULT; result --------- {1,2,3}(1 row) array_prepend(anyelement, anyarray) 描述:向数组开头添加元素,只支持一维数组。 返回类型:anyarray 示例: 12345 gaussdb=# SELECT array_prepend(1, ARRAY[2,3]) AS RESULT; result --------- {1,2,3}(1 row) array_cat(anyarray, anyarray) 描述:连接两个数组,支持多维数组。 返回类型:anyarray 示例: 1 2 3 4 5 6 7 8 91011 gaussdb=# SELECT array_cat(ARRAY[1,2,3], ARRAY[4,5]) AS RESULT; result ------------- {1,2,3,4,5}(1 row)gaussdb=# SELECT array_cat(ARRAY[[1,2],[4,5]], ARRAY[6,7]) AS RESULT; result --------------------- {{1,2},{4,5},{6,7}}(1 row) array_ndims(anyarray) 描述:返回数组的维数。 返回类型:int 示例: 12345 gaussdb=# SELECT array_ndims(ARRAY[[1,2,3], [4,5,6]]) AS RESULT; result -------- 2(1 row) array_dims(anyarray) 描述:返回数组各个维度中的低位下标值和高位下标值。 返回类型:text 示例: 12345 gaussdb=# SELECT array_dims(ARRAY[[1,2,3], [4,5,6]]) AS RESULT; result ------------ [1:2][1:3](1 row) array_length(anyarray, int) 描述:返回指定数组维度的长度。int为指定数组维度。 返回类型:int 示例: 1 2 3 4 5 6 7 8 91011 gaussdb=# SELECT array_length(array[1,2,3], 1) AS RESULT; result -------- 3(1 row)gaussdb=# SELECT array_length(array[[1,2,3],[4,5,6]], 2) AS RESULT; result-------- 3(1 row) array_lower(anyarray, int) 描述:返回指定数组维数的下界。int为指定数组维度。 返回类型:int 示例: 12345 gaussdb=# SELECT array_lower('[0:2]={1,2,3}'::int[], 1) AS RESULT; result -------- 0(1 row) array_upper(anyarray, int) 描述:返回指定数组维数的上界。int为指定数组维度。 返回类型:int 示例: 12345 gaussdb=# SELECT array_upper(ARRAY[1,8,3,7], 1) AS RESULT; result -------- 4(1 row) array_upper(anyarray, int) 描述:返回指定数组维数的上界。int为指定数组维度。 返回类型:int 示例: gaussdb=# SELECT array_upper(ARRAY[1,8,3,7], 1) AS RESULT; result -------- 4(1 row) array_to_string(anyarray, text [, text]) 描述:使用第一个text作为数组的新分隔符,使用第二个text替换数组值为null的值。 返回类型:text 示例: 12345 gaussdb=# SELECT array_to_string(ARRAY[1, 2, 3, NULL, 5], ',', '*') AS RESULT; result ----------- 1,2,3,*,5(1 row) array_delete(anyarray) 描述:清空数组中的元素并返回一个同类型的空数组。 返回类型:anyarray 示例: gaussdb=# SELECT array_delete(ARRAY[1,8,3,7]) AS RESULT; result -------- {}(1 row) array_deleteidx(anyarray, int) 描述:从数组中删除指定下标的元素并返回剩余元素组成的数组。 返回类型:anyarray 示例: gaussdb=# SELECT array_deleteidx(ARRAY[1,2,3,4,5], 1) AS RESULT; result----------- {2,3,4,5}(1 row) array_deleteidx(anyarray, int)此函数在参数a_format_version值为10c和a_format_dev_version值为s1的情况下被禁用。 array_extendnull(anyarray, int) 描述:往数组尾部添加指定个数的null空元素。 返回类型:anyarray 示例: gaussdb=# SELECT array_extendnull(ARRAY[1,8,3,7],1) AS RESULT; result --------------{1,8,3,7,null}(1 row) array_extendnull(anyarray, int, int) 描述:往数组尾部添加指定个数的指定索引的元素。 返回类型:anyarray 示例: gaussdb=# SELECT array_extendnull(ARRAY[1,8,3,7],2,2) AS RESULT; result --------------{1,8,3,7,8,8}(1 row) array_extendnull(anyarray, int, int)此函数在参数a_format_version值为10c和a_format_dev_version值为s1的情况下有效。 array_trim(anyarray, int) 描述:从数组尾部删除指定个数个元素。 返回类型:anyarray 示例: gaussdb=# SELECT array_trim(ARRAY[1,8,3,7],1) AS RESULT; result--------- {1,8,3}(1 row) array_exists(anyarray, int) 描述:检查第二个参数是否是数组的合法下标。 返回类型:boolean 示例: gaussdb=# SELECT array_exists(ARRAY[1,8,3,7],1) AS RESULT; result -------- t(1 row) array_next(anyarray, int) 描述:根据第二个入参返回数组中指定下标元素的下一个元素的下标。 返回类型:int 示例: gaussdb=# SELECT array_next(ARRAY[1,8,3,7],1) AS RESULT; result -------- 2(1 row) array_prior(anyarray, int) 描述:根据第二个入参返回数组中指定下标元素的上一个元素的下标。 返回类型:int 示例: gaussdb=# SELECT array_prior(ARRAY[1,8,3,7],2) AS RESULT; result -------- 1(1 row) string_to_array(text, text [, text]) 描述:使用第二个text指定分隔符,使用第三个可选的text作为NULL值替换模板,如果分隔后的子串与第三个可选的text完全匹配,则将其替换为NULL。 返回类型:text[] 示例: 1 2 3 4 5 6 7 8 910 gaussdb=# SELECT string_to_array('xx~^~yy~^~zz', '~^~', 'yy') AS RESULT; result -------------- {xx,NULL,zz}(1 row)gaussdb=# SELECT string_to_array('xx~^~yy~^~zz', '~^~', 'y') AS RESULT; result ------------ {xx,yy,zz}(1 row) unnest(anyarray) 描述:扩大一个数组为一组行。 返回类型:setof anyelement 示例: 123456 gaussdb=# SELECT unnest(ARRAY[1,2]) AS RESULT; result -------- 1 2(2 rows)
  • 账本数据库的函数 当前特性是实验室特性,使用时请联系华为工程师提供技术支持。 get_dn_hist_relhash(text, text) 描述:返回指定防篡改用户表的表级数据hash值。该函数集中式暂不支持。 参数类型:text 返回值类型:hash16 ledger_hist_check(text, text) 描述:校验指定防篡改用户表的表级数据hash值与其对应历史表hash一致性。 参数类型:text 返回值类型:Boolean ledger_hist_repair(text, text) 描述:修复指定防篡改用户表对应的历史表hash值,使之与用户表hash一致,返回hash差值。 参数类型:text 返回值类型:hash16 ledger_hist_archive(text, text) 描述:归档指定防篡改用户表对应的历史表至审计日志目录中hist_back文件夹下。 参数类型:text 返回值类型:Boolean ledger_gchain_check(text, text) 描述:校验指定防篡改用户表对应的历史表hash与全局历史表对应的relhash一致性。 参数类型:text 返回值类型:Boolean ledger_gchain_repair(text, text) 描述:修复验指定防篡改用户表在全局历史表中的relhash,使之与其历史表hash一致,返回hash差值。 参数类型:text 返回值类型:hash16 ledger_gchain_archive(void) 描述:归档全局历史表至审计日志目录中hist_back文件夹下。 参数类型:void 返回值类型:Boolean hash16in(cstring) 描述:将输入16进制字符串转化成内部hash16形式。 参数类型:cstring 返回值类型:hash16 hash16out(hash16) 描述:将内部hash16类型的数据转码转化为16进制cstring类型。 参数类型:hash16 返回值类型:cstring hash32in(cstring) 描述:将输入16进制字符串(32个字符)转化成内部类型hash32形式。 参数类型:cstring 返回值类型:hash32 hash32out(hash32) 描述:将内部hash32类型的数据转码转化为16进制cstring类型。 参数类型:cstring 返回值类型:hash32 父主题: 函数和操作符
  • 范围函数 numrange(numeric, numeric, [text]) 描述:表示一个范围。 返回类型:范围元素类型 示例: 1 2 3 4 5 6 7 8 910 gaussdb=# SELECT numrange(1.1,2.2) AS RESULT; result --------[1.1,2.2)(1 row)gaussdb=# SELECT numrange(1.1,2.2, '()') AS RESULT; result --------(1.1,2.2)(1 row) lower(anyrange) 描述:范围的下界 返回类型:范围元素类型 示例: 12345 gaussdb=# SELECT lower(numrange(1.1,2.2)) AS RESULT; result -------- 1.1(1 row) upper(anyrange) 描述:范围的上界 返回类型:范围元素类型 示例: 12345 gaussdb=# SELECT upper(numrange(1.1,2.2)) AS RESULT; result -------- 2.2(1 row) isempty(anyrange) 描述:范围是否为空 返回类型:Boolean 示例: 12345 gaussdb=# SELECT isempty(numrange(1.1,2.2)) AS RESULT; result -------- f(1 row) lower_inc(anyrange) 描述:是否包含下界 返回类型:Boolean 示例: 12345 gaussdb=# SELECT lower_inc(numrange(1.1,2.2)) AS RESULT; result -------- t(1 row) upper_inc(anyrange) 描述:是否包含上界 返回类型:Boolean 示例: 12345 gaussdb=# SELECT upper_inc(numrange(1.1,2.2)) AS RESULT; result -------- f(1 row) lower_inf(anyrange) 描述:下界是否为无穷 返回类型:Boolean 示例: 12345 gaussdb=# SELECT lower_inf('(,)'::daterange) AS RESULT; result -------- t(1 row) upper_inf(anyrange) 描述:上界是否为无穷 返回类型:Boolean 示例: 12345 gaussdb=# SELECT upper_inf('(,)'::daterange) AS RESULT; result -------- t(1 row) 如果范围是空或者需要的界限是无穷的,lower和upper函数将返回null。lower_inc、upper_inc、lower_inf和upper_inf函数均对空范围返回false。
  • SEQUENCE函数 序列函数为用户从序列对象中获取后续的序列值提供了简单的多用户安全的方法。 nextval(regclass) 描述:递增序列并返回新值。 为了避免从同一个序列获取值的并发事务被阻塞,nextval操作不会回滚;也就是说,一旦一个值已经被抓取,那么就认为它已经被用过了,并且不会再被返回。即使该操作处于事务中,当事务之后中断,或者如果调用查询结束不使用该值,也是如此。这种情况将在指定值的顺序中留下未使用的“空洞”。因此,GaussDB Kernel序列对象不能用于获得“无间隙”序列。 nextval函数只能在主机上执行,备机不支持执行此函数。 返回类型:numeric nextval函数有两种调用方式(其中第二种调用方式目前不支持Sequence命名中有特殊字符"."的情况),如下: 示例1: 12345 gaussdb=# select nextval('seqDemo'); nextval--------- 2(1 row) 示例2: 12345 gaussdb=# select seqDemo.nextval; nextval--------- 2(1 row) currval(regclass) 返回当前会话里最近一次nextval返回的指定的sequence的数值。如果当前会话还没有调用过指定的sequence的nextval,那么调用currval将会报错。 返回类型:numeric currval函数有两种调用方式(其中第二种调用方式目前不支持Sequence命名中有特殊字符"."的情况),如下: 示例1: 12345 gaussdb=# select currval('seq1'); currval--------- 2(1 row) 示例2: 12345 gaussdb=# select seq1.currval; currval--------- 2(1 row) lastval() 描述:返回当前会话里最近一次nextval返回的数值。这个函数等效于currval,只是它不用序列名为参数,它抓取当前会话里面最近一次nextval使用的序列。如果当前会话还没有调用过nextval,那么调用lastval将会报错。 返回类型:numeric 示例: 12345 gaussdb=# select lastval(); lastval--------- 2(1 row) setval(regclass, numeric) 描述:设置序列的当前数值。 返回类型:numeric 示例: 12345 gaussdb=# select setval('seqDemo',1); setval-------- 1(1 row) setval(regclass, numeric, Boolean) 描述:设置序列的当前数值以及is_called标志。 返回类型:numeric 示例: 12345 gaussdb=# select setval('seqDemo',1,true); setval-------- 1(1 row) Setval后当前会话会立刻生效,但如果其他会话有缓存的序列值,只能等到缓存值用尽才能感知Setval的作用。所以为了避免序列值冲突,setval要谨慎使用。 因为序列是非事务的,setval造成的改变不会由于事务的回滚而撤销。 nextval函数只能在主机上执行,备机不支持执行此函数。 pg_sequence_last_value(sequence_oid oid, OUT cache_value int16, OUT last_value int16) 描述:获取指定sequence的参数,包含缓存值,当前值。 返回类型:int16,int16 last_insert_id() 描述:获取最近一次为自动增长列成功插入的第一个自动生成的值。 返回类型:int16 last_insert_id(int16) 描述:设置下一次last_insert_id()函数的返回值,并返回此值。若参数为NULL,将下一次last_insert_id()函数的返回值设为0,此函数返回NULL。 返回值类型:int16 示例: 1 2 3 4 5 6 7 8 910 gaussdb=# select last_insert_id(100); last_insert_id---------------- 100(1 row)gaussdb=# select last_insert_id(); last_insert_id---------------- 100(1 row) last_insert_id()和last_insert_id(int16)是会话级别的函数,若当前会话未对自动增长列插入任何数据,last_insert_id()返回值为0。 last_insert_id()和last_insert_id(int16)仅在参数sql_compatibility='B'时可用。 父主题: 函数和操作符
  • JSON/JSONB支持的函数 array_to_json(anyarray [, pretty_bool]) 描述:返回JSON类型的数组。将一个多维数组组成一个JSON数组。如果pretty_bool为true,将在一维元素之间添加换行符。 返回类型:json 示例: gaussdb=# SELECT array_to_json('{{1,5},{99,100}}'::int[]); array_to_json ------------------ [[1,5],[99,100]] (1 row) row_to_json(record [, pretty_bool]) 描述:返回JSON类型的行。如果pretty_bool为true,将在第一级元素之间添加换行符。 返回类型:json 示例: gaussdb=# SELECT row_to_json(row(1,'foo')); row_to_json --------------------- {"f1":1,"f2":"foo"} (1 row)
  • 文本检索调试函数 ts_debug([ config regconfig, ] document text, OUT alias text, OUT description text, OUT token text, OUT dictionaries regdictionary[], OUT dictionary regdictionary, OUT lexemes text[]) 描述:测试一个配置。 返回类型:setof record 示例: 123456789 gaussdb=# SELECT ts_debug('english', 'The Brightest supernovaes'); ts_debug ----------------------------------------------------------------------------------- (asciiword,"Word, all ASCII",The,{english_stem},english_stem,{}) (blank,"Space symbols"," ",{},,) (asciiword,"Word, all ASCII",Brightest,{english_stem},english_stem,{brightest}) (blank,"Space symbols"," ",{},,) (asciiword,"Word, all ASCII",supernovaes,{english_stem},english_stem,{supernova})(5 rows) ts_lexize(dict regdictionary, token text) 描述:测试一个数据字典。 返回类型:text[] 示例: 12345 gaussdb=# SELECT ts_lexize('english_stem', 'stars'); ts_lexize ----------- {star}(1 row) ts_parse(parser_name text, document text, OUT tokid integer, OUT token text) 描述:测试一个解析。 返回类型:setof record 示例: 12345678 gaussdb=# SELECT ts_parse('default', 'foo - bar'); ts_parse ----------- (1,foo) (12," ") (12,"- ") (1,bar)(4 rows) ts_parse(parser_oid oid, document text, OUT tokid integer, OUT token text) 描述:测试一个解析。 返回类型:setof record 示例: 12345678 gaussdb=# SELECT ts_parse(3722, 'foo - bar'); ts_parse ----------- (1,foo) (12," ") (12,"- ") (1,bar)(4 rows) ts_token_type(parser_name text, OUT tokid integer, OUT alias text, OUT description text) 描述:获取分析器定义的记号类型。 返回类型:setof record 示例: 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627 gaussdb=# SELECT ts_token_type('default'); ts_token_type -------------------------------------------------------------- (1,asciiword,"Word, all ASCII") (2,word,"Word, all letters") (3,numword,"Word, letters and digits") (4,email,"Email address") (5,url,URL) (6,host,Host) (7,sfloat,"Scientific notation") (8,version,"Version number") (9,hword_numpart,"Hyphenated word part, letters and digits") (10,hword_part,"Hyphenated word part, all letters") (11,hword_asciipart,"Hyphenated word part, all ASCII") (12,blank,"Space symbols") (13,tag,"XML tag") (14,protocol,"Protocol head") (15,numhword,"Hyphenated word, letters and digits") (16,asciihword,"Hyphenated word, all ASCII") (17,hword,"Hyphenated word, all letters") (18,url_path,"URL path") (19,file,"File or path name") (20,float,"Decimal notation") (21,int,"Signed integer") (22,uint,"Unsigned integer") (23,entity,"XML entity")(23 rows) ts_token_type(parser_oid oid, OUT tokid integer, OUT alias text, OUT description text) 描述:获取分析器定义的记号类型。 返回类型:setof record 示例: 1 2 3 4 5 6 7 8 9101112131415161718192021222324252627 gaussdb=# SELECT ts_token_type(3722); ts_token_type -------------------------------------------------------------- (1,asciiword,"Word, all ASCII") (2,word,"Word, all letters") (3,numword,"Word, letters and digits") (4,email,"Email address") (5,url,URL) (6,host,Host) (7,sfloat,"Scientific notation") (8,version,"Version number") (9,hword_numpart,"Hyphenated word part, letters and digits") (10,hword_part,"Hyphenated word part, all letters") (11,hword_asciipart,"Hyphenated word part, all ASCII") (12,blank,"Space symbols") (13,tag,"XML tag") (14,protocol,"Protocol head") (15,numhword,"Hyphenated word, letters and digits") (16,asciihword,"Hyphenated word, all ASCII") (17,hword,"Hyphenated word, all letters") (18,url_path,"URL path") (19,file,"File or path name") (20,float,"Decimal notation") (21,int,"Signed integer") (22,uint,"Unsigned integer") (23,entity,"XML entity")(23 rows) ts_stat(sqlquery text, [ weights text, ] OUT word text, OUT ndoc integer, OUT nentry integer) 描述:获取tsvector列的统计数据。 返回类型:setof record 示例: 123456 gaussdb=# SELECT ts_stat('select ''hello world''::tsvector'); ts_stat ------------- (world,1,1) (hello,1,1)(2 rows)
  • 几何函数 area(object) 描述:计算图形的面积。 返回类型:double precision 示例: 12345 gaussdb=# SELECT area(box '((0,0),(1,1))') AS RESULT; result -------- 1(1 row) center(object) 描述:计算图形的中心。 返回类型:point 示例: 12345 gaussdb=# SELECT center(box '((0,0),(1,2))') AS RESULT; result --------- (0.5,1)(1 row) diameter(circle) 描述:计算圆的直径。 返回类型:double precision 示例: 12345 gaussdb=# SELECT diameter(circle '((0,0),2.0)') AS RESULT; result -------- 4(1 row) height(box) 描述:矩形的竖直高度。 返回类型:double precision 示例: 12345 gaussdb=# SELECT height(box '((0,0),(1,1))') AS RESULT; result -------- 1(1 row) isclosed(path) 描述:图形是否为闭合路径。 返回类型:Boolean 示例: 12345 gaussdb=# SELECT isclosed(path '((0,0),(1,1),(2,0))') AS RESULT; result -------- t(1 row) isopen(path) 描述:图形是否为开放路径。 返回类型:Boolean 示例: 12345 gaussdb=# SELECT isopen(path '[(0,0),(1,1),(2,0)]') AS RESULT; result -------- t(1 row) length(object) 描述:计算图形的长度。 返回类型:double precision 示例: 12345 gaussdb=# SELECT length(path '((-1,0),(1,0))') AS RESULT; result -------- 4(1 row) npoints(path) 描述:计算路径的顶点数。 返回类型:int 示例: 12345 gaussdb=# SELECT npoints(path '[(0,0),(1,1),(2,0)]') AS RESULT; result -------- 3(1 row) npoints(polygon) 描述:计算多边形的顶点数。 返回类型:int 示例: 12345 gaussdb=# SELECT npoints(polygon '((1,1),(0,0))') AS RESULT; result -------- 2(1 row) pclose(path) 描述:把路径转换为闭合路径。 返回类型:path 示例: 12345 gaussdb=# SELECT pclose(path '[(0,0),(1,1),(2,0)]') AS RESULT; result --------------------- ((0,0),(1,1),(2,0))(1 row) popen(path) 描述:把路径转换为开放路径。 返回类型:path 示例: 12345 gaussdb=# SELECT popen(path '((0,0),(1,1),(2,0))') AS RESULT; result --------------------- [(0,0),(1,1),(2,0)](1 row) radius(circle) 描述:计算圆的半径。 返回类型:double precision 示例: 12345 gaussdb=# SELECT radius(circle '((0,0),2.0)') AS RESULT; result -------- 2(1 row) width(box) 描述:计算矩形的水平尺寸。 返回类型:double precision 示例: 12345 gaussdb=# SELECT width(box '((0,0),(1,1))') AS RESULT; result -------- 1(1 row)
  • macaddr函数 函数trunc(macaddr)返回一个MAC地址,该地址的最后三个字节设置为零。 trunc(macaddr) 描述:把后三个字节置为零。 返回类型:macaddr 示例: 12345 gaussdb=# SELECT trunc(macaddr '12:34:56:78:90:ab') AS RESULT; result ------------------- 12:34:56:00:00:00(1 row)
  • cidr和inet函数 函数abbrev,host,text主要是为了提供可选的显示格式。 abbrev(inet) 描述:缩写显示格式文本。 返回类型:text 示例: 12345 gaussdb=# SELECT abbrev(inet '10.1.0.0/16') AS RESULT; result ------------- 10.1.0.0/16(1 row) abbrev(cidr) 描述:缩写显示格式文本。 返回类型:text 示例: 12345 gaussdb=# SELECT abbrev(cidr '10.1.0.0/16') AS RESULT; result --------- 10.1/16(1 row) broadcast(inet) 描述:网络广播地址。 返回类型:inet 示例: 12345 gaussdb=# SELECT broadcast('192.168.1.5/24') AS RESULT; result ------------------ 192.168.1.255/24(1 row) family(inet) 描述:抽取地址族,4为IPv4。 返回类型:int 示例: 12345 gaussdb=# SELECT family('127.0.0.1') AS RESULT; result -------- 4(1 row) host(inet) 描述:将主机地址类型抽出为文本。 返回类型:text 示例: 12345 gaussdb=# SELECT host('192.168.1.5/24') AS RESULT; result ------------- 192.168.1.5(1 row) hostmask(inet) 描述:为网络构造主机掩码。 返回类型:inet 示例: 12345 gaussdb=# SELECT hostmask('192.168.23.20/30') AS RESULT; result --------- 0.0.0.3(1 row) masklen(inet) 描述:抽取子网掩码长度。 返回类型:int 示例: 12345 gaussdb=# SELECT masklen('192.168.1.5/24') AS RESULT; result -------- 24(1 row) netmask(inet) 描述:为网络构造子网掩码。 返回类型:inet 示例: 12345 gaussdb=# SELECT netmask('192.168.1.5/24') AS RESULT; result --------------- 255.255.255.0(1 row) network(inet) 描述:抽取地址的网络部分。 返回类型:cidr 示例: 12345 gaussdb=# SELECT network('192.168.1.5/24') AS RESULT; result ---------------- 192.168.1.0/24(1 row) set_masklen(inet, int) 描述:为inet数值设置子网掩码长度。 返回类型:inet 示例: 12345 gaussdb=# SELECT set_masklen('192.168.1.5/24', 16) AS RESULT; result ---------------- 192.168.1.5/16(1 row) set_masklen(cidr, int) 描述:为cidr数值设置子网掩码长度。 返回类型:cidr 示例: 12345 gaussdb=# SELECT set_masklen('192.168.1.0/24'::cidr, 16) AS RESULT; result ---------------- 192.168.0.0/16(1 row) text(inet) 描述:把IP地址和掩码长度抽取为文本。 返回类型:text 示例: 12345 gaussdb=# SELECT text(inet '192.168.1.5') AS RESULT; result ---------------- 192.168.1.5/32(1 row)
共100000条