华为云用户手册

  • SPM计划管理函数 当前SPM计划管理特性在分布式下不支持,所以在分布式下调用下面的这些函数都会给出分布式下不支持的错误提示。 GS_SPM_EVOLUTE_PLAN(sql_hash, plan_hash) 描述:GS_SPM_EVOLUTE_PLAN属于DBE_SQL_UTIL schema,是SPM特性用于计划演进的接口函数。 参数:参数介绍见表1 表1 GS_SPM_EVOLUTE_PLAN入参和返回值列表 参数 类型 描述 取值范围 sql_hash IN bigint SQL文本的hash值。 - plan_hash IN bigint SQL计划outline文本的hash值。 - evolute_status OUT boolean 演进行为是否正常完成:t表示正常;异常会报错。 t/f 返回值类型:boolean GS_SPM_SET_PLAN_STATUS(sql_hash, plan_hash, plan_status) 描述:GS_SPM_SET_PLAN_STATUS属于DBE_SQL_UTIL schema,它是SPM特性用于修改baseline状态的接口函数。 参数:参数介绍见表2 表2 GS_SPM_SET_PLAN_STATUS入参和返回值列表 参数 类型 描述 取值范围 sql_hash IN bigint SQL文本的hash值。 - plan_hash IN bigint SQL计划outline文本的hash值。 - plan_status IN text 计划的状态。 ACC:表示已经接受的计划。 UNACC:表示未接受的计划。 FIXED:一种特殊的ACC状态的计划,计划的匹配优先级高于ACC状态的计划。 execute_status OUT boolean 修改计划状态行为是否正常完成:t表示正常;异常会报错。 t/f 返回值类型:boolean GS_SPM_DISPLAY_PLANS(sql_hash) 描述:GS_SPM_DISPLAY_PLANS属于DBE_SQL_UTIL schema,它是SPM特性用于查看单条SQL所有baseline的接口函数。 参数:参数介绍见表3 表3 GS_SPM_DISPLAY_PLANS入参和返回值列表 参数 类型 描述 取值范围 sql_hash IN bigint SQL唯一标识。 - sql_hash OUT bigint SQL文本的hash值。 - plan_hash OUT bigint SQL计划outline文本的hash值。 - outline OUT text 当前计划对应outline的所有Hint的组合字符串。 - cost OUT double 当前计划的代价。 - status OUT text 当前计划的状态。 ACC:表示已经接受的计划。 UNACC:表示未接受的计划。 FIXED:一种特殊的ACC状态的计划,计划的匹配优先级高于ACC状态的计划。 gplan OUT boolean 当前计划是否是gplan。t表示是gplan;异常会报错。 t/f 返回值类型:bigint, text, double, text, boolean GS_SPM_RELOAD_PLAN(sql_hash,plan_hash) 描述:GS_SPM_RELOAD_PLAN属于DBE_SQL_UTIL schema,它是SPM特性用于加载baseline系统表中某baseline到SPM global cache中的接口函数。 参数:参数介绍见表4 表4 GS_SPM_RELOAD_PLAN入参和返回值列表 参数 类型 描述 取值范围 sql_hash IN bigint SQL文本的hash值。 - plan_hash IN bigint SQL计划outline文本的hash值。 - execute_status OUT boolean baseine的加载行为是否正常完成:t表示正常;异常会报错。 t/f 返回值类型:boolean GS_SPM_VALIDATE_PLAN(sql_hash, plan_hash) 描述:GS_SPM_VALIDATE_PLAN属于DBE_SQL_UTIL schema,它是SPM特性用于计划可用性验证的接口函数。 参数:参数介绍见表5 表5 GS_SPM_VALIDATE_PLAN入参和返回值列表 参数 类型 描 取值范围 sql_hash IN bigint SQL文本的hash值。 - plan_hash IN bigint SQL计划outline文本的hash值。 - execute_status OUT boolean 被验证的计划是否可用: t:被验证的计划可用;f: 被验证的计划不可用 t/f 返回值类型:boolean GS_SPM_DELETE_PLAN(sql_hash, plan_hash) 描述:GS_SPM_DELETE_PLAN属于DBE_SQL_UTIL schema,它是SPM特性用于计划删除baseline的接口函数。 参数: 参数介绍见表6 表6 GS_SPM_DELETE_PLAN入参和返回值列表 参数 类型 描述 取值范围 sql_hash IN bigint SQL文本的hash值。 - plan_hash IN bigint SQL计划outline文本的hash值。 - execute_status OUT boolean 计划删除行为是否正常完成:t表示正常;异常会报错。 t/f 返回值类型:boolean 父主题: 函数和操作符
  • 数据库对象位置函数 pg_relation_filenode(relation regclass) 描述:指定关系的文件节点数。 返回值类型:oid 备注:pg_relation_filenode接受一个表、索引、序列或压缩表的OID或者名称,并且返回当前分配给它的“filenode”数。文件节点是关系使用的文件名称的基本组件。对大多数表来说,结果和pg_class.relfilenode相同,但对确定的系统目录来说, relfilenode为0而且这个函数必须用来获取正确的值。如果传递一个没有存储的关系,比如一个视图,那么这个函数返回NULL。 pg_relation_filepath(relation regclass) 描述:指定关系的文件路径名。只能用于非段页式关系。 返回值类型:text 备注:pg_relation_filepath类似于pg_relation_filenode,但是它返回关系的整个文件路径名(相对于数据库集群的数据目录PGDATA)。 段页式关系建议使用段页式相关函数或视图,例如: SELECT e.*, f.file_name FROM gs_seg_extents e, gs_seg_datafiles f WHERE e.tablespace_name = f.tablespace_name AND e.bucketnode = f.bucketnode AND e.file_id = f.file_id AND e.forknum = f.forknum; get_large_table_name(relfile_node text, threshold_size_gb int8) 描述:根据表的文件编码(relfile_node)查询对应的表大小(单位为GB)是否超过阈值(threshold_size_gb),如果超过则返回模式名和表名(形式为schemaname.tablename), 否则返回字符串'null'。 返回值类型:text pg_filenode_relation(tablespacename, relname) 描述:获取对应的tablespace和relfilenode所对应的表名。 返回类型:regclass pg_partition_filenode(partition_oid) 描述:获取到指定分区表的oid锁对应的filenode。 返回类型:oid pg_partition_filepath(partition_oid) 描述:指定分区的文件路径名。只能用于非段页式关系。 返回值类型:text 备注:段页式关系建议使用段页式相关函数或视图,例如: SELECT e.*, f.file_name FROM gs_seg_extents e, gs_seg_datafiles f WHERE e.tablespace_name = f.tablespace_name ADN e.bucketnode = f.bucketnode ADN e.file_id = f.file_id ADN e.forknum = f.forknum;
  • 恢复控制函数 恢复信息函数提供了当前备机状态的信息。这些函数可能在恢复期间或正常运行中执行。 pg_is_in_recovery() 描述:如果恢复仍然在进行中则返回true。 返回值类型:Boolean pg_last_xlog_receive_location() 描述:获取最后接收事务日志的位置并通过流复制将其同步到磁盘。当流复制正在进行时,事务日志将持续递增。如果恢复已完成,则最后一次获取的WAL记录会被静态保持并在恢复过程中同步到磁盘。如果流复制不可用,或还没有开始,这个函数返回NULL。 返回值类型:text pg_last_xlog_replay_location() 描述:获取最后一个事务日志在恢复时重放的位置。如果恢复仍在进行,事务日志将持续递增。如果已经完成恢复,则将保持在恢复期间最后接收WAL记录的值。如果未进行恢复但服务器正常启动时,则这个函数返回NULL。 返回值类型:text pg_last_xact_replay_timestamp() 描述:获取最后一个事务在恢复时重放的时间戳。这是为在主节点上生成事务提交或终止WAL记录的时间。如果在恢复时没有事务重放,则这个函数返回NULL。如果恢复仍在进行,则事务日志将持续递增。如果恢复已经完成,则将保持在恢复期间最后接收WAL记录的值。如果服务器无需恢复就已正常启动,则这个函数返回NULL。 返回值类型:timestamp with time zone 恢复控制函数控制恢复的线程。这些函数可能只在恢复时被执行。 pg_is_xlog_replay_paused() 描述:如果恢复暂停则返回true。 返回值类型:Boolean pg_xlog_replay_pause() 描述:立即暂停恢复。 返回值类型:void pg_xlog_replay_resume() 描述:如果恢复处于暂停状态,则重新启动。 返回值类型:void gs_get_active_archiving_standby() 描述:查询同一分片内归档备机的信息。返回备机名,备机归档位置和已归档日志个数。 返回值类型:text,int gs_pitr_get_warning_for_xlog_force_recycle() 描述:查询开启归档后是否因归档槽不推进日志大量堆积导致日志被回收。 返回值类型:Boolean gs_pitr_clean_history_global_barriers(stop_barrier_timestamp cstring) 描述:清理指定时间之前所有barrier记录。返回最旧的barrier记录。入参为cstring类型,linux时间戳。需要管理员角色或运维管理员角色执行。 返回值类型:text gs_pitr_archive_slot_force_advance(stop_barrier_timestamp cstring) 描述:强制推进归档槽,并清理不需要的barrier记录。返回新的归档槽位置。入参为cstring类型,linux时间戳。需要管理员角色或运维管理员角色执行。 返回值类型:text gs_recent_barrier_buffer_info(start_time text, end_time text) 描述:根据用户输入的时间范围,进行相应的barrier信息查询,获取time_stamp、 CS N、LSN和standard_time。 返回值类型:records 说明:调用该函数的用户需要具有SYSADMIN权限或具有OPRADMIN权限。输入参数start_time和end_time采用“年-月-日 时间”格式,其中时间采用clock格式。查询最大时间跨度为1天,超出跨度约束,根据查询起始时间将结束时间自动转换为极限边界进行查询。例如: gaussdb=# SELECT * FROM gs_recent_barrier_buffer_info('2024-01-15 23:27:50', '2024-01-15 23:28:00'); timestamp | lsn | csn | standard_time ------------+-------------------+----------+--------------------- 1705332470 | 00000000/15FFBBA0 | 41020421 | 2024-01-15 23:27:50 1705332471 | 00000000/15FFBDF0 | 41020422 | 2024-01-15 23:27:51 1705332472 | 00000000/15FFC058 | 41020423 | 2024-01-15 23:27:52 1705332472 | 00000000/15FFC0F8 | 41020424 | 2024-01-15 23:27:52 1705332473 | 00000000/15FFC348 | 41020425 | 2024-01-15 23:27:53 1705332474 | 00000000/15FFC598 | 41020426 | 2024-01-15 23:27:54 1705332475 | 00000000/15FFC638 | 41020427 | 2024-01-15 23:27:55 1705332476 | 00000000/15FFC888 | 41020428 | 2024-01-15 23:27:56 1705332476 | 00000000/15FFDC80 | 41020433 | 2024-01-15 23:27:56 1705332477 | 00000000/15FFDD20 | 41020434 | 2024-01-15 23:27:57 1705332478 | 00000000/15FFDF70 | 41020435 | 2024-01-15 23:27:58 1705332479 | 00000000/15FFE1D8 | 41020436 | 2024-01-15 23:27:59 1705332480 | 00000000/15FFE278 | 41020437 | 2024-01-15 23:28:00 1705332480 | 00000000/15FFE4C8 | 41020438 | 2024-01-15 23:28:00 (14 rows) gs_show_obs_media_files(slot_name cstring, src cstring, offset int32, limit int32) 描述:根据用户输入的归档槽(slot_name)和OBS目录地址(src),查询OBS文件列表。 返回值类型:records 说明:调用该函数的用户需要具有SYSADMIN权限或具有OPRADMIN权限。Offset为查询结果偏移,limit为输出最大行数,查询src下所有文件。例如: gaussdb=# SELECT gs_show_obs_archive_files('ssh','cn_5001/pg_xlog',1, 5); gs_show_obs_archive_files ------------------------------------------------------------------------------------------------- (wstdist_ssh/archive/cn_5001/pg_xlog/000000010000000000000010_01_01_00000000_00000000_00000003) (wstdist_ssh/archive/cn_5001/pg_xlog/000000010000000000000010_02_01_00000000_00000000_00000003) (wstdist_ssh/archive/cn_5001/pg_xlog/000000010000000000000010_03_01_00000000_00000000_00000003) (wstdist_ssh/archive/cn_5001/pg_xlog/000000010000000000000011_00_01_00000000_00000000_00000003) (wstdist_ssh/archive/cn_5001/pg_xlog/000000010000000000000011_01_01_00000000_00000000_00000003) (5 rows) gs_upload_obs_media_file(slot_name cstring, src cstring, dest cstring, is_forced bool) 描述:根据用户输入的归档槽(slot_name)、上传文件原地址(src)、OBS地址(dest)和是否强制上传(is_forced),上传OBS文件。 返回值类型:void 说明:调用该函数的用户需要具有SYSADMIN权限或具有OPRADMIN权限。原文件目录仅允许为$GAUSS LOG 目录。例如: gaussdb=# SELECT * FROM gs_upload_obs_archive_file('ssh', '/data/gauss/log/stwang/test/000000010000000000000019_02_01_00000000_00000000_00000003', 'cn_5001/pg_xlog/000000010000000000000019_02_01_00000000_00000000_00000003', true); gs_upload_obs_archive_file ---------------------------- (1 row) gs_download_obs_media_file(slot_name cstring, src cstring, dest cstring) 描述:根据用户输入的归档槽(slot_name)、下载原地址(src)和本地目标地址(dest),下载OBS文件。 返回值类型:void 说明:调用该函数的用户需要具有SYSADMIN权限或具有OPRADMIN权限。下载目录仅允许为$GAUSSLOG目录。例如: gaussdb=# SELECT * FROM gs_download_obs_archive_file('ssh','cn_5001/pg_xlog/000000010000000000000019_02_01_00000000_00000000_00000003','/data/gauss/log/stwang/test'); gs_download_obs_archive_file ------------------------------ (1 row) 当恢复暂停时,没有发生数据库更改。如果是在热备里,所有新的查询将看到一致的数据库快照,并且不会有进一步的查询冲突产生,直到恢复继续。 如果不能使用流复制,则暂停状态将无限的延续。当流复制正在进行时,将连续接收WAL记录,最终将填满可用磁盘空间,这个进度取决于暂停的持续时间,WAL生成的速度和可用的磁盘空间。
  • 配置设置函数 配置设置函数是可以用于查询以及修改运行时配置参数的函数。 current_setting(setting_name) 描述:当前的设置值。 返回值类型:text 备注:current_setting用于以查询形式获取setting_name的当前值。和SQL语句SHOW是等效的。比如: 1 2 3 4 5 6 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是等效的。 示例: 1 2 3 4 5 6 gaussdb=# SELECT set_config('log_statement_stats', 'off', false); set_config ------------ off (1 row) 父主题: 系统管理函数
  • 事务ID和快照 内部事务ID类型(xid)是64位。这些函数使用的数据类型txid_snapshot,存储在特定时刻事务ID可见性的信息。其组件描述如表14所示。 表14 快照组件 名称 描述 xmin 最早的事务ID(txid)仍然活动。所有较早事务将是已经提交可见的,或者是直接回滚。 xmax 作为尚未分配的txid。所有大于或等于此txids的都是尚未开始的快照时间,因此不可见。 xip_list 当前快照中活动的txids。这个列表只包含在xmin和xmax之间活动的txids,有可能活动的txids高于xmax。介于大于等于xmin、小于xmax,并且不在这个列表中的txid,在这个时间快照已经完成的,因此按照提交状态查看他是可见还是回滚。这个列表不包含子事务的txids。 txid_snapshot的文本表示为:xmin:xmax:xip_list。 示例:10:20:10,14,15意思为:xmin=10, xmax=20, xip_list=10, 14, 15。 以下的函数在一个输出形式中提供服务器事务信息。这些函数的主要用途是为了确定在两个快照之间有哪一个事务提交。 pgxc_is_committed(transaction_id) 描述:如果普通表提交或忽略给定的XID(gxid)。NULL表示的状态是未知的(运行、准备、冻结等)。如果在维护模式(GUC参数xc_maintenance_mode为on时)下,会遍历所有bucketid和普通表对应的xid状态,如果有状态冲突,例如同一个xid,在bucket1状态为提交,在bucket2为回滚则报错。该模式谨慎打开,一般供维护人员排查问题使用,一般用户不应使用该模式。 返回类型:Boolean pgxc_is_committed(transaction_id, bucketid) 描述:如果指定bucketid提交或忽略给定的XID(gxid)。NULL表示的状态是未知的(运行、准备、冻结等), bucketid是hashbucket表的物理bucketid,普通表为-1。如果在维护模式(GUC参数xc_maintenance_mode为on时)下,指定bucketid为-1,会遍历所有bucketid和普通表对应的xid状态,如果有状态冲突,例如同一个xid,在bucket1状态为提交,在bucket2为回滚则报错。该模式谨慎打开,一般供维护人员排查问题使用,一般用户不应使用该模式。 返回类型:Boolean txid_current() 描述:获取当前事务ID。 返回类型:bigint gs_txid_oldestxmin() 描述:获取当前最小事务id的值oldesxmin。 返回类型:bigint txid_current_snapshot() 描述:获取当前快照。 返回类型:txid_snapshot txid_snapshot_xip(txid_snapshot) 描述:在快照中获取正在进行的事务ID。 返回类型:setof bigint txid_snapshot_xmax(txid_snapshot) 描述:获取快照的xmax。 返回类型:bigint txid_snapshot_xmin(txid_snapshot) 描述:获取快照的xmin。 返回类型:bigint txid_visible_in_snapshot(bigint, txid_snapshot) 描述:在快照中事务ID是否可见(不使用子事务ID)。 返回类型:Boolean get_local_prepared_xact() 描述:获取当前节点两阶段残留事务信息,包括事务id,两阶段gid名称,prepared的时间,owner的oid,database的oid及当前节点的node_name。 返回类型:xid, text, timestamptz, oid, text get_remote_prepared_xacts() 描述:获取所有远程节点两阶段残留事务信息,包括事务id,两阶段gid名称,prepared的时间,owner的名称,database的名称及node_name。 返回类型:xid, text, timestamptz, name, text global_clean_prepared_xacts(text, text) 描述:并发清理两阶段残留事务,仅gs_clean工具调用该函数进行清理,其他情况下调用均返回false。 返回类型:Boolean pgxc_stat_get_wal_senders() 描述:返回集群中所有主DN的发送日志的信息和其对应的备DN的接收日志的信息。仅支持system admin或monitor admin权限用户使用。 返回值如表15所示。 表15 pgxc_stat_get_wal_senders返回参数说明 字段名 描述 nodename 实例名。 sender_pid 发送日志的线程pid。 local_role 实例角色。 peer_role 接收端的实例的角色。 peer_state 接收端的实例的状态。 state 实例间同步的状态。 sender_sent_location 发送端发送日志的位置。 sender_write_location 发送端写日志的位置。 sender_flush_location 发送端刷盘日志的位置。 sender_replay_location 当前实例的日志位置。如果是主DN,则该位置和 sender_flush_location相同;否则该位置为当前实例日志回放到的位置。 receiver_received_location 接收端日志接收到的位置。 receiver_write_location 接收端日志写的位置。 receiver_flush_location 接收端日志刷盘的位置。 receiver_replay_location 接收端日志回放的位置。 pgxc_stat_get_wal_senders_status() 描述:返回所有节点事务日志接收状态。仅支持system admin或monitor admin权限用户使用。 返回值如表16所示。 表16 pgxc_stat_get_wal_senders_status返回参数说明 字段名 描述 nodename 主节点名。 source_ip 主节点IP。 source_port 主节点端口。 dest_ip 备节点IP。 dest_port 备节点端口。 sender_pid 发送线程PID。 local_role 主节点类型。 peer_role 备节点类型。 peer_state 备节点状态。 state wal sender状态。 sender_sent_location 主节点发送位置。 sender_write_location 主节点落盘位置。 sender_replay_location 主节点redo位置。 receiver_received_location 备节点接收位置。 receiver_write_location 备节点落盘位置。 receiver_flush_location 备节点flush磁盘位置。 receiver_replay_location 备节点redo位置。 gs_get_next_xid_csn() 描述:返回全局所有节点上的next_xid和next_csn值。 返回值如表17所示。 表17 gs_get_next_xid_csn返回参数说明 字段名 描述 nodename 节点名称。 next_xid 当前节点下一个事务id号。 next_csn 当前节点下一个csn号。 pg_control_system() 描述:返回系统控制文件状态。 返回类型:SETOF record pg_control_checkpoint() 描述:返回系统检查点状态。 返回类型:SETOF record get_prepared_pending_xid() 描述:当恢复完成时,返回nextxid。 参数:nan 返回值类型:text pg_clean_region_info() 描述:清理regionmap。 参数:nan 返回值类型:character varying pg_get_replication_slot_name() 描述:获取slot name。 参数:nan 返回值类型:text pg_get_running_xacts() 描述:获取运行中的xact。 参数:nan 返回值类型:handle integer, gxid xid, state tinyint, node text, xmin xid, vacuum boolean, timeline bigint, prepare_xid xid, pid bigint, next_xid xid pg_get_variable_info() 描述:获取共享内存变量cache。 参数:nan 返回值类型:node_name text, nextOid oid, nextXid xid, oldestXid xid, xidVacLimit xid, oldestXidDB oid, lastExtendCSNLogpage xid, startExtendCSNLogpage xid, nextCommitSeqNo xid, latestCompletedXid xid, startupMaxXid xid pg_get_xidlimit() 描述:从共享内存获取事物id信息。 参数:nan 返回值类型:nextXid xid, oldestXid xid, xidVacLimit xid, xidWarnLimit xid, xidStopLimit xid, xidWrapLimit xid, oldestXidDB oid pg_relation_compression_ratio() 描述:查询表压缩率,默认返回1.0。 参数:text 返回值类型:real pg_relation_with_compression() 描述:查询表是否压缩。 参数:text 返回值类型:boolean pg_stat_file_recursive() 描述:列出路径下所有文件。 参数:location text 返回值类型:path text, filename text, size bigint, isdir boolean pg_stat_get_activity_for_temptable() 描述:返回临时表相关的后台线程的记录。 参数:nan 返回值类型:datid oid, timelineid integer, tempid integer, sessionid bigint pg_stat_get_activity_ng() 描述:返回nodegroup相关的后台线程的记录。 参数:pid bigint 返回值类型:datid oid, pid bigint, sessionid bigint, node_group text pg_stat_get_cgroup_info() 描述:返回cgroup信息。 参数:nan 返回值类型:cgroup_name text, percent integer, usage_percent integer, shares bigint, usage bigint, cpuset text, relpath text, valid text, node_group text pg_stat_get_realtime_info_internal() 描述:返回实时信息,当前该接口已不可用,返回FailedToGetSessionInfo。 参数:oid, oid, bigint, cstring, oid 返回值类型:text pg_stat_get_wlm_session_iostat_info() 描述:返回会话负载I/O信息。 参数:nan 返回值类型:threadid bigint, maxcurr_iops integer, mincurr_iops integer, maxpeak_iops integer, minpeak_iops integer, iops_limits integer, io_priority integer, curr_io_limits integer pg_test_err_contain_err() 描述:测试错误类型和返回信息。 参数:integer 返回值类型:void pv_session_memory_detail_tp() 描述:返回会话的内存使用情况,参考pv_session_memory_detail。 参数:nan 返回值类型:sessid text, sesstype text, contextname text, level smallint, parent text, totalsize bigint, freesize bigint, usedsize bigint gs_get_table_distribution() 描述:返回表数据在各个数据节点的分布情况。 参数:table_name text, schema_name text 返回值类型:text pv_builtin_functions() 描述:查看所有内置系统函数信息。 参数:nan 返回值类型:proname name, pronamespace oid, proowner oid, prolang oid, procost real, prorows real, provariadic oid, protransform regproc, proisagg boolean, proiswindow boolean, prosecdef boolean, proleakproof boolean, proisstrict boolean, proretset boolean, provolatile "char", pronargs smallint, pronargdefaults smallint, prorettype oid, proargtypes oidvector, proallargtypes integer[], proargmodes "char"[], proargnames text[], proargdefaults pg_node_tree, prosrc text, probin text, proconfig text[], proacl aclitem[], prodefaultargpos int2vector, fencedmode boolean, proshippable boolean, propackage boolean, oid oid pv_thread_memory_detail() 描述:返回各线程的内存信息。 参数:nan 返回值类型:threadid text, tid bigint, thrdtype text, contextname text, level smallint, parent text, totalsize bigint, freesize bigint, usedsize bigint pg_shared_memory_detail() 描述:返回所有已产生的共享内存上下文的使用信息,各列描述请参考SHARED_MEMORY_DETAIL。 参数:nan 返回值类型:contextname text, level smallint, parent text, totalsize bigint, freesize bigint, usedsize bigint pgxc_get_running_xacts() 描述:返回集群中各个节点运行事务的信息,字段内容和PGXC_RUNNING_XA CTS 相同。只有system admin和monitor admin用户有权限查看。 参数:nan 返回值类型:setof record pgxc_snapshot_status() 描述:在GTM模式下,返回GTM中关键内存信息状态,用来支持问题定位,GTM-Free、GTM-Lite不支持本函数。 参数:nan 返回值类型:xmin xid, xmax xid, xcnt int, oldestxmin xid, next_xid xid, timeline int, active_thread_num int, max_active_thread_num int, snapshot_num int, snapshot_totalsize bigint 返回值描述如表18所示。 表18 get_gtm_lite_status返回参数说明 字段名 描述 xmin GTM上当前最小的活跃事务id。 xmax GTM上当前提交的最大的事务id + 1,大于等于该值的事务id是活跃的。 xcnt GTM上当前活跃事务个数。 oldestxmin GTM上最老被访问的事务id号。 next_xid GTM上下一个分配的事务id号。 timeline GTM上当前的时间线。 active_thread_num GTM上当前活跃的工作线程数。 max_active_thread_num GTM上1分钟内工作线程数峰值。 snapshot_num GTM上1分钟内下发的快照个数。 snapshot_totalsize GTM上1分钟内下发快照总大小。 get_gtm_lite_status() 描述:返回GTM上的backupXid和csn号,用来支持问题定位,GTM-FREE模式下不支持使用本系统函数。 返回值如表19所示。 表19 get_gtm_lite_status返回参数说明 字段名 描述 backup_xid GTM上的备份Xid值。 csn GTM当前下发的最新的csn号。 adm_hist_snapshot_func() 描述:返回快照执行时间相关信息,访问该函数需要打开enable_wdr_snapshot参数,并且需要snapshot schema, snapshot表和tables_snap_timestamp表的访问权限。 参数:nan 返回值类型:snap_id bigint, dbid oid, begin_interval_time timestamp(3), end_interval_time timestamp(3), flush_elapsed interval day(5) to second(1), begin_interval_time_tz timestamp(3) with time zone, end_interval_time_tz timestamp(3) with time zone global_sql_patch_func() 描述:全局各个节点上的SQL PATCH信息,用于返回global_sql_patch视图的结果。 返回值如表20所示。 表20 global_sql_patch_func返回参数说明 名称 类型 描述 node_name text SQLpatch所在节点名。 patch_name name PATCH名称。 unique_sql_id bigint 查询全局唯一ID。 owner oid PATCH的创建用户ID。 enable boolean PATCH是否生效。 status "char" PATCH的状态(预留字段)。 abort boolean 是否是AbortHint。 hint_string text Hint文本。 description text PATCH的备注。 parent_unique_sql_id bigint PATCH生效的SQL语句的外层语句的全局唯一ID,存储过程外的语句该值为0,存储过程内的语句该值为调用该存储过程语句的全局唯一ID。 gs_get_current_version() 描述:依据当前编译宏返回当前编译模式,返回'M'。 参数:nan 返回值类型:char gs_get_kernel_info() 描述:全局各个CN、DN主节点上的事务相关的信息。 返回值如表21所示。 表21 gs_get_kernel_info返回参数说明 名称 类型 描述 node_name text 节点名。 module text 模块名。包括: XACT(事务模块)。 STANDBY(备机模块)。 UNDO(undo模块)。 HOTPATH(热补丁模块)。 name text 探查内存态关键数据名字。包括: startup_max_xid(线程启动时最大的xid值)。 recent_local_xmin(本地活跃事务最小xid值)recent_global_xmin(全局活跃事务最小xid值)。 standby_xmin(备机活跃事务最小xid值)。 standby_redo_cleanup_xmin(备机redo时cleanup日志最小xid值)。 standby_redo_cleanup_xmin_lsn(备机redo时cleanup日志最小xid的LSN值)。 local_csn_min(本地活跃事务最小CSN值)。 replication_slot_xmin(复制槽的最小xid值)。 replication_slot_catalog_xmin(catalog复制槽最小xid值)。 global_recycle_xid(全局undo回收事务的最小xid值)。 global_frozen_xid(全局冻结事务的最小的xid值)。 recent_xmin(当前会话活跃事务最小xid值)。 next_csn(下一个事务的CSN值)。 hotpatch_additional_info(热补丁预留字段)。 stmt_session_discard_records(内核支持全量SQL因slot满丢弃数据量)。 stmt_shm_flush_discard_records(内核支持全量SQL因ringbuf满丢弃数据量)。 value text 探查内存态关键数据值。 示例: gaussdb=# SELECT * FROM gs_get_kernel_info(); node_name | module | name | value --------------+---------+-------------------------------+--------- coordinator1 | XACT | startup_max_xid | 16488 coordinator1 | XACT | recent_local_xmin | 16504 coordinator1 | XACT | recent_global_xmin | 16503 coordinator1 | STANDBY | standby_xmin | 0 coordinator1 | STANDBY | standby_redo_cleanup_xmin | 0 coordinator1 | STANDBY | standby_redo_cleanup_xmin_lsn | 0/0 coordinator1 | XACT | local_csn_min | 6014225 coordinator1 | XACT | replication_slot_xmin | 0 coordinator1 | XACT | replication_slot_catalog_xmin | 0 coordinator1 | UNDO | global_recycle_xid | 16501 coordinator1 | XACT | global_frozen_xid | 0 coordinator1 | XACT | recent_xmin | 16504 coordinator1 | XACT | next_csn | 6014226 coordinator1 | HOTPATH | hotpatch_additional_info | coordinator1 | FULL_SQL| stmt_session_discard_records | 0 coordinator1 | FULL_SQL| stmt_shm_flush_discard_records| 0 datanode1 | XACT | startup_max_xid | 16488 datanode1 | XACT | recent_local_xmin | 15805 datanode1 | XACT | recent_global_xmin | 15805 datanode1 | STANDBY | standby_xmin | 0 datanode1 | STANDBY | standby_redo_cleanup_xmin | 0 datanode1 | STANDBY | standby_redo_cleanup_xmin_lsn | 0/0 datanode1 | XACT | local_csn_min | 6014225 datanode1 | XACT | replication_slot_xmin | 0 datanode1 | XACT | replication_slot_catalog_xmin | 0 datanode1 | UNDO | global_recycle_xid | 15805 datanode1 | XACT | global_frozen_xid | 0 datanode1 | XACT | recent_xmin | 15805 datanode1 | XACT | next_csn | 6014226 datanode1 | HOTPATH | hotpatch_additional_info | datanode1 | FULL_SQL| stmt_session_discard_records | 0 datanode1 | FULL_SQL| stmt_shm_flush_discard_records| 0 (32 row)
  • 系统表信息函数 format_type(type_oid, typemod) 描述:获取数据类型的SQL名称。 返回类型:text 备注:format_type通过某个数据类型的OID以及可能的修饰词,返回其SQL名称。如果不知道具体的修饰词,则在修饰词的位置传入NULL。修饰词一般只对有长度限制的数据类型有意义。format_type所返回的SQL名称中包含数据类型的长度值,其大小是:实际存储长度len - sizeof(int32),单位字节。原因是数据存储时需要32位的空间来存储用户对数据类型的自定义长度信息,即实际存储长度要比用户定义长度多4个字节。在下例中,format_type返回的SQL名称为“character varying(6)”,6表示varchar类型的长度值是6字节,因此该类型的实际存储长度为10字节。 1 2 3 4 5 gaussdb=# SELECT format_type((SELECT oid FROM pg_type WHERE typname='varchar'), 10); format_type ---------------------- character varying(6) (1 row) pg_check_authid(role_oid) 描述:检查是否存在给定oid的角色名。 返回类型:Boolean gaussdb=# select pg_check_authid(1); pg_check_authid ----------------- f (1 row) pg_describe_object(catalog_id, object_id, object_sub_id) 描述:获取数据库对象的描述。 返回类型:text 备注:pg_describe_object返回由目录OID,对象OID和一个(或许0个)子对象ID指定的数据库对象的描述。这有助于确认存储在pg_depend系统表中对象的身份。 pg_get_constraintdef(constraint_oid) 描述:获取约束的定义。 返回类型:text pg_get_constraintdef(constraint_oid, pretty_bool) 描述:获取约束的定义。 返回类型:text 备注:pg_get_constraintdef和pg_get_indexdef分别从约束或索引上使用创建命令进行重构。 pg_get_expr(pg_node_tree, relation_oid) 描述:反编译表达式的内部形式,假设其中的任何Vars都引用第二个参数指定的关系。 返回类型:text pg_get_expr(pg_node_tree, relation_oid, pretty_bool) 描述:反编译表达式的内部形式,假设其中的任何Vars都引用第二个参数指定的关系。 返回类型:text 备注:pg_get_expr反编译一个独立表达式的内部形式,比如一个字段的缺省值。便于检查系统表的内容。如果表达式可能包含关键字,则指定关键字引用相关的OID作为第二个参数;如果没有关键字,用零表示即可。 pg_get_functiondef(func_oid) 描述:获取函数的定义。 返回类型:text 示例: gaussdb=# SELECT * FROM pg_get_functiondef(598); headerlines | definition -------------+---------------------------------------------------- 4 | CREATE OR REPLACE FUNCTION pg_catalog.abbrev(inet)+ | RETURNS text + | LANGUAGE internal + | IMMUTABLE STRICT NOT FENCED NOT SHIPPABLE + | AS $function$inet_abbrev$function$ + | (1 row) pg_get_function_arguments(func_oid) 描述:获取函数定义的参数列表(带默认值)。 返回类型:text 备注:pg_get_function_arguments返回一个函数的参数列表,需要在CREATE FUNCTION中使用这种格式。 pg_get_function_identity_arguments(func_oid) 描述:获取参数列表来确定一个函数 (不带默认值)。 返回类型:text 备注:pg_get_function_identity_arguments返回需要的参数列表用来标识函数,这种形式需要在ALTER FUNCTION中使用,并且这种形式省略了默认值。 pg_get_function_result(func_oid) 描述:获取函数的RETURNS子句。 返回类型:text 备注:pg_get_function_result为函数返回适当的RETURNS子句。 pg_get_indexdef(index_oid) 描述:获取索引的CREATE INDEX命令。 返回类型:text 示例: gaussdb=# SELECT * FROM pg_get_indexdef(16416); pg_get_indexdef ------------------------------------------------------------------------- CREATE INDEX test3_b_idx ON test3 USING btree (b) TABLESPACE pg_default (1 row) pg_get_indexdef(index_oid, dump_schema_only) 描述:获取索引的CREATE INDEX命令,仅用于dump场景。当前版本dump_schema_only参数取值对函数输出结果无影响。 返回类型:text 示例: gaussdb=# SELECT * FROM pg_get_indexdef(16416, true); pg_get_indexdef ------------------------------------------------------------------------- CREATE INDEX test3_b_idx ON test3 USING btree (b) TABLESPACE pg_default (1 row) pg_get_indexdef(index_oid, column_no, pretty_bool) 描述:获取索引的CREATE INDEX命令,或者如果column_no不为零,则只获取一个索引字段的定义。 返回类型:text 示例: gaussdb=# SELECT * FROM pg_get_indexdef(16416, 0, false); pg_get_indexdef ------------------------------------------------------------------------- CREATE INDEX test3_b_idx ON test3 USING btree (b) TABLESPACE pg_default (1 row) gaussdb=# SELECT * FROM pg_get_indexdef(16416, 1, false); pg_get_indexdef ----------------- b (1 row) 备注:pg_get_functiondef为函数返回一个完整的CREATE OR REPLACE FUNCTION语句。 pg_get_keywords() 描述:获取SQL关键字和类别列表。 返回类型:setof record 备注:pg_get_keywords返回一组关于描述服务器识别SQL关键字的记录。word列包含关键字。catcode列包含一个分类代码:U表示通用的、C表示列名、T表示类型或函数名、R表示保留。catdesc列包含了一个可能本地化描述分类的字符串。 pg_get_ruledef(rule_oid) 描述:获取规则的CREATE RULE命令。 返回类型:text pg_get_ruledef(rule_oid, pretty_bool) 描述:获取规则的CREATE RULE命令。 返回类型:text pg_get_userbyid(role_oid) 描述:获取给定OID的角色名。 返回类型:name 备注:pg_get_userbyid通过角色的OID抽取对应的用户名。 pg_check_authid(role_id) 描述:通过role_id检查用户是否存在。 返回类型:text gaussdb=# SELECT pg_check_authid(20); pg_check_authid ----------------- f (1 row) pg_get_viewdef(view_name) 描述:为视图获取底层的SELECT命令。 返回类型:text pg_get_viewdef(view_name, pretty_bool) 描述:为视图获取底层的SELECT命令,如果pretty_bool为true,行字段可以包含80列。 返回类型:text 备注:pg_get_viewdef重构出定义视图的SELECT查询。这些函数通常都有两种形式,其中带有pretty_bool参数且参数为true时,是“适合打印”的结果,这种格式更容易读。另一种是缺省的格式,更有可能被将来的不同版本用同样的方法解释。如果是用于转储,那么尽可能避免使用适合打印的格式。给pretty-print参数传递false生成的结果和没有这个参数的变种生成的结果完全一样。 pg_get_viewdef(view_oid) 描述:为视图获取底层的SELECT命令 返回类型:text pg_get_viewdef(view_oid, pretty_bool) 描述:为视图获取底层的SELECT命令,如果pretty_bool为true,行字段可以包含80列。 返回类型:text pg_get_viewdef(view_oid, wrap_column_int) 描述:为视图获取底层的SELECT命令;行字段被换到指定的列数,打印是隐含的。 返回类型:text pg_get_tabledef(table_oid) 描述:根据table_oid获取表定义。 返回类型:text 示例: gaussdb=# SELECT * FROM pg_get_tabledef(16384); pg_get_tabledef ------------------------------------------------------------------------- SET search_path = public; + CREATE TABLE t1 ( + c1 bigint DEFAULT nextval('serial'::regclass) + ) + WITH (orientation=row, compression=no) + DISTRIBUTE BY HASH(c1) + TO GROUP group1; + ILM Security Policies: + POLICY "p4" TABLE + ROW STORE COMPRESS ADVANCED ROW AFTER 1 DAYS OF NO MODIFICATION + STATUS: ENABLED DELETED: NO + (1 row) pg_get_tabledef(table_name) 描述:根据table_name获取表定义。 返回类型:text 示例: gaussdb=# SELECT * FROM pg_get_tabledef('t1'); pg_get_tabledef ------------------------------------------------------------------------- SET search_path = public; + CREATE TABLE t1 ( + c1 bigint DEFAULT nextval('serial'::regclass) + ) + WITH (orientation=row, compression=no) + DISTRIBUTE BY HASH(c1) + TO GROUP group1; + ILM Security Policies: + POLICY "p4" TABLE + ROW STORE COMPRESS ADVANCED ROW AFTER 1 DAYS OF NO MODIFICATION + STATUS: ENABLED DELETED: NO + (1 row) 备注:pg_get_tabledef重构出表定义的CREATE语句,包含了表定义本身、索引信息、comments和ilm策略信息。对于表对象依赖的group、schema、tablespace、server等信息,需要用户自己创建。 pg_options_to_table(reloptions) 描述:获取存储选项名称/值对的集合 返回类型:setof record 备注:pg_options_to_table当通过pg_class.reloptions或pg_attribute.attoptions时返回存储选项名称/值对(option_name/option_value)的集合。 pg_tablespace_databases(tablespace_oid) 描述:获取在指定的表空间中有对象的数据库OID集合 返回类型:setof oid 备注:pg_tablespace_databases允许检查表空间的状况,返回在该表空间中保存了对象的数据库OID集合。如果这个函数返回数据行,则该表空间就是非空的,因此不能删除。要显示该表空间中的特定对象,用户需要连接pg_tablespace_databases标识的数据库与查询pg_class系统表。 pg_tablespace_location(tablespace_oid) 描述:获取表空间所在的文件系统的路径 返回类型:text pg_typeof(any) 描述:获取任何值的数据类型 返回类型:regtype 备注:pg_typeof返回传递给他的值的数据类型OID。这可能有助于故障排除或动态构造SQL查询。声明此函数返回regtype,这是一个OID别名类型(请参考对象标识符类型);这意味着它是一个为了比较而显示类型名称的OID。 示例: 1 2 3 4 5 6 7 8 9 10 11 gaussdb=# SELECT pg_typeof(33); pg_typeof ----------- integer (1 row) gaussdb=# SELECT typlen FROM pg_type WHERE oid = pg_typeof(33); typlen -------- 4 (1 row) collation for (any) 描述:获取参数的排序。 返回类型:text 备注:表达式collation for返回传递给他的值的排序。示例: 1 2 3 4 5 gaussdb=# SELECT collation for (description) FROM pg_description LIMIT 1; pg_collation_for ------------------ "default" (1 row) 值可能是引号括起来的并且模式限制的。如果没有为参数表达式排序,则返回一个null值。如果参数不是排序的类型,则提示一个错误。 getdistributekey(table_name) 描述:获取一个hash表的分布列。 返回类型:text 示例: 1 2 3 4 5 gaussdb=# SELECT getdistributekey('item'); getdistributekey ------------------ i_item_sk (1 row)
  • 注释信息函数 col_description(table_oid, column_number) 描述:获取一个表字段的注释。 返回类型:text 备注:col_description返回一个表中字段的注释,通过表OID和字段号来声明。 obj_description(object_oid, catalog_name) 描述:获取一个数据库对象的注释。 返回类型:text 备注:带有两个参数的obj_description返回一个数据库对象的注释,该对象是通过其OID和其所属的系统表名称声明。比如,obj_description(123456,'pg_class')将返回OID为123456的表的注释。只带一个参数的obj_description只要求对象OID。 obj_description不能用于表字段,因为字段没有自己的OID。 obj_description(object_oid) 描述:获取一个数据库对象的注释。 返回类型:text shobj_description(object_oid, catalog_name) 描述:获取一个共享数据库对象的注释。 返回类型:text 备注:shobj_description和obj_description差不多,不同之处仅在于前者用于共享对象。一些系统表是通用于集群中所有数据库的全局表,因此这些表的注释也是全局存储的。
  • 模式可见性查询函数 每个函数执行检查数据库对象类型的可见性。对于函数和操作符,如果在前面的搜索路径中没有相同的对象名称和参数的数据类型,则此对象是可见的。对于操作符类,则要同时考虑名称和相关索引的访问方法。 所有这些函数都需要使用OID来标识需要检查的对象。如果用户想通过名称测试对象,则使用OID别名类型(regclass、regtype、regprocedure、regoperator、regconfig或regdictionary)将会很方便。 比如,如果一个表所在的模式在搜索路径中,并且在前面的搜索路径中没有同名的表,则这个表是可见的。它等效于表可以不带明确模式修饰进行引用。比如,要列出所有可见表的名称: 1 gaussdb=# SELECT relname FROM pg_class WHERE pg_table_is_visible(oid); pg_collation_is_visible(collation_oid) 描述:该排序是否在搜索路径中可见。 返回类型:Boolean pg_conversion_is_visible(conversion_oid) 描述:该转换是否在搜索路径中可见。 返回类型:Boolean pg_function_is_visible(function_oid) 描述:该函数是否在搜索路径中可见。 返回类型:Boolean pg_opclass_is_visible(opclass_oid) 描述:该操作符类是否在搜索路径中可见。 返回类型:Boolean pg_operator_is_visible(operator_oid) 描述:该操作符是否在搜索路径中可见。 返回类型:Boolean pg_opfamily_is_visible(opclass_oid) 描述:该操作符族是否在搜索路径中可见。 返回类型:Boolean pg_table_is_visible(table_oid) 描述:该表是否在搜索路径中可见。 返回类型:Boolean pg_ts_config_is_visible(config_oid) 描述:该文本检索配置是否在搜索路径中可见。 返回类型:Boolean pg_ts_dict_is_visible(dict_oid) 描述:该文本检索词典是否在搜索路径中可见。 返回类型:Boolean pg_ts_parser_is_visible(parser_oid) 描述:该文本搜索解析是否在搜索路径中可见。 返回类型:Boolean pg_ts_template_is_visible(template_oid) 描述:该文本检索模板是否在搜索路径中可见。 返回类型:Boolean pg_type_is_visible(type_oid) 描述:该类型(或域)是否在搜索路径中可见。 返回类型:Boolean
  • 访问权限查询函数 DDL类权限ALTER、DROP、COMMENT、INDEX、VACUUM属于所有者固有的权限,隐式拥有。 以下访问权限查询函数仅表示用户是否具有某对象上的某种对象权限,即返回记录在系统表acl字段中的对象权限拥有情况。 has_any_column_privilege(user, table, privilege) 描述:指定用户是否有访问表任何列的权限。 表2 参数类型说明 参数名 合法入参类型 描述 取值范围 user name,oid 用户 用户名字或id。 table text,oid 表 表名称或表id。 privilege text 权限 SELECT:允许对指定表任何列执行SELECT语句。 INSERT:允许对指定表任何列执行INSERT语句。 UPDATE:允许对指定表任何列任意字段执行UPDATE语句。 REFEREN CES :允许创建一个外键约束(分布式场景暂不支持)。 COMMENT:允许对指定表任何列执行COMMENT语句。 返回类型:Boolean has_any_column_privilege(table, privilege) 描述:当前用户是否有访问表任何列的权限,合法参数类型见表2。 返回类型:Boolean 备注:has_any_column_privilege检查用户是否以特定方式访问表的任何列。其参数可能与has_table_privilege类似,除了访问权限类型必须是SELECT、INSERT、UPDATE或REFERENCES的一些组合。 拥有表的表级别权限则隐含的拥有该表每列的列级权限,因此如果与has_table_privilege参数相同,has_any_column_privilege总是返回true。但是如果授予至少一列的列级权限也返回成功。 has_column_privilege(user, table, column, privilege) 描述:指定用户是否有访问列的权限。 表3 参数类型说明 参数名 合法入参类型 描述 取值范围 user name,oid 用户 用户名字或者id。 table text,oid 表名 表的名字或id。 column text,smallint 列名 列的名字或属性号。 privilege text 权限 SELECT:允许对表的指定列执行SELECT语句。 INSERT:允许对表的指定列执行INSERT语句。 UPDATE:允许对表的指定列执行UPDATE语句。 REFERENCES:允许创建一个外键约束(分布式场景暂不支持)。 COMMENT:允许对表的指定列执行COMMENT语句。 返回类型:Boolean has_column_privilege(table, column, privilege) 描述:当前用户是否有访问列的权限,合法参数类型见表3。 返回类型:Boolean 备注:has_column_privilege检查用户是否以特定方式访问一列。其参数类似于has_table_privilege,可以通过列名或属性号添加列。想要的访问权限类型必须是SELECT、INSERT、UPDATE或REFERENCES的一些组合。 拥有表的表级别权限则隐含的拥有该表每列的列级权限。 has_cek_privilege(user, cek, privilege) 描述:指定用户是否有访问列加密密钥CEK的权限。 表4 参数类型说明 参数名 合法入参类型 描述 取值范围 user name,oid 用户 用户名字或id。 cek text,oid 列加密密钥 列加密密钥名称或id。 privilege text 权限 USAGE:允许使用指定列加密密钥。 DROP:允许删除指定列加密密钥。 返回类型:Boolean has_cmk_privilege(user, cmk, privilege) 描述:指定用户是否有访问客户端加密主密钥CMK的权限。 表5 参数类型说明 参数名 合法入参类型 描述 取值范围 user name,oid 用户 用户名字或id。 cmk text,oid 客户端加密主密钥 客户端加密主密钥名称或id。 privilege text 权限 USAGE:允许使用指定客户端加密主密钥。 DROP:允许删除指定客户端加密主密钥。 返回类型:Boolean has_database_privilege(user, database, privilege) 描述:指定用户是否有访问数据库的权限。 表6 参数类型说明 参数名 合法入参类型 描述 取值范围 user name,oid 用户 用户名字或id。 database text,oid 数据库 数据库名字或id。 privilege text 权限 CREATE:对于数据库,允许在数据库里创建新的模式。 TEMPORARY:允许在使用数据库的时候创建临时表。 TEMP:允许在使用数据库的时候创建临时表。 CONNECT:允许用户连接到指定的数据库。 ALTER:允许用户修改指定对象的属性。 DROP:允许用户删除指定的对象。 COMMENT:允许用户定义或修改指定对象的注释。 返回类型:Boolean has_database_privilege(database, privilege) 描述:当前用户是否有访问数据库的权限,合法参数类型见表6。 返回类型:Boolean 备注:has_database_privilege检查用户是否能以在特定方式访问数据库。其参数类似has_table_privilege。访问权限类型必须是CREATE、CONNECT、TEMPORARY或TEMP(等价于TEMPORARY)的一些组合。 has_directory_privilege(user, directory, privilege) 表7 参数类型说明 参数名 合法入参类型 描述 取值范围 user name,oid 用户 用户名字或id。 directory text,oid 目录 目录名字或者oid。 privilege text 权限 READ:允许对该目录进行读操作。 WRITE:允许对该目录进行写操作。 描述:指定用户是否有访问directory的权限。 返回类型:Boolean has_directory_privilege(directory, privilege) 描述:当前用户是否有访问directory的权限,合法参数类型见表7。 返回类型:Boolean has_foreign_data_wrapper_privilege(user, fdw, privilege) 表8 参数类型说明 参数名 合法入参类型 描述 取值范围 user name,oid 用户 用户名字或者id。 fdw text,oid 外部数据封装器 外部数据封装器名字或id。 privilege text 权限 USAGE:允许访问外部数据封装器。 描述:指定用户是否有访问外部数据封装器的权限。 返回类型:Boolean has_foreign_data_wrapper_privilege(fdw, privilege) 描述:当前用户是否有访问外部数据封装器的权限,合法参数类型见表8。 返回类型:Boolean 备注:has_foreign_data_wrapper_privilege检查用户是否能以特定方式访问外部数据封装器。其参数类似has_table_privilege。访问权限类型必须是USAGE。 has_function_privilege(user, function, privilege) 表9 参数类型说明 参数名 合法入参类型 描述 取值范围 user name,oid 用户 用户名字或者id function text,oid 函数 函数名称或id privilege text 权限 EXECUTE:允许使用指定的函数,以及利用这些函数实现的操作符。 ALTER:允许用户修改指定对象的属性。 DROP:允许用户删除指定的对象。 COMMENT:允许用户定义或修改指定对象的注释。 描述:指定用户是否有访问函数的权限。 返回类型:Boolean has_function_privilege(function, privilege) 描述:当前用户是否有访问函数的权限。合法参数类型见表9。 返回类型:Boolean 备注:has_function_privilege检查一个用户是否能以指定方式访问一个函数。其参数类似has_table_privilege。使用文本字符而不是OID声明一个函数时,允许输入的类型和regprocedure数据类型一样(请参考对象标识符类型)。访问权限类型必须是EXECUTE。 has_language_privilege(user, language, privilege) 表10 参数类型说明 参数名 合法入参类型 描述 取值范围 user name,oid 用户 用户名字或id。 language text,oid 语言 语言名称或id。 privilege text 权限 USAG:对于过程语言,允许用户在创建函数的时候指定过程语言。 描述:指定用户是否有访问语言的权限。 返回类型:Boolean has_language_privilege(language, privilege) 描述:当前用户是否有访问语言的权限。合法参数类型见表10。 返回类型:Boolean 备注:has_language_privilege检查用户是否能以特定方式访问一个过程语言。其参数类似has_table_privilege。访问权限类型必须是USAGE。 has_nodegroup_privilege(user, nodegroup, privilege) 描述:检查用户是否有集群节点访问权限。 返回类型:Boolean 表11 参数类型说明 参数名 合法入参类型 描述 取值范围 user name,oid 用户 已存在用户名称或id。 nodegroup text,oid 集群节点 已存在的集群节点。 privilege text 权限 USAGE:对于子集群,对包含在指定模式中的对象有访问权限时,USAGE允许访问指定子集群下的表对象。 CREATE:对于子集群,允许在子集群中创建表对象。 COMPUTE:针对计算子集群,允许用户在具有compute权限的计算子集群上进行弹性计算。 ALTER:允许用户修改指定对象的属性。 DROP:允许用户删除指定的对象。 has_nodegroup_privilege(nodegroup, privilege) 描述:检查用户是否有集群节点访问权限。 返回类型:Boolean has_schema_privilege(user, schema, privilege) 描述:指定用户是否有访问模式的权限。 返回类型:Boolean has_schema_privilege(schema, privilege) 描述:当前用户是否有访问模式的权限。 返回类型:Boolean 备注:has_schema_privilege检查用户是否能以特定方式访问一个模式。其参数类似has_table_privilege。访问权限类型必须是CREATE、USAGE、ALTER、DROP或COMMENT的一些组合。当检查类型里包含CREATE权限且被检查的Schema是用户同名的Schema时,由于同名Schema的特殊约束,必须拥有Schema的OWNER权限,该函数才会返回TRUE。 has_sequence_privilege(user, sequence, privilege) 描述:指定用户是否有访问序列的权限。 返回类型:Boolean 表12 参数类型说明 参数名 合法入参类型 描述 取值范围 user name,oid 用户 已存在用户名称或id。 sequence text,oid 序列 已存在序列名称或id。 privilege text 权限 USAGE:对于序列,USAGE允许使用nextval函数。 SELECT:允许创建序列。 UPDATE:允许执行UPDATE语句。 ALTER:允许用户修改指定对象的属性。 DROP:允许用户删除指定的对象。 COMMENT:允许用户定义或修改指定对象的注释。 has_sequence_privilege(sequence, privilege) 描述:指定当前用户是否有访问序列的权限。 返回类型:Boolean has_server_privilege(user, server, privilege) 描述:指定用户是否有访问外部服务的权限。 返回类型:Boolean has_server_privilege(server, privilege) 描述:当前用户是否有访问外部服务的权限。 返回类型:Boolean 备注:has_server_privilege检查用户是否能以指定方式访问一个外部服务器。其参数类似has_table_privilege。访问权限类型必须是USAGE、ALTER、DROP或COMMENT之一的值。 has_table_privilege(user, table, privilege) 描述:指定用户是否有访问表的权限。 返回类型:Boolean has_table_privilege(table, privilege) 描述:当前用户是否有访问表的权限。 返回类型:Boolean 备注:has_table_privilege检查用户是否以特定方式访问表。用户可以通过名称或OID(pg_authid.oid)来指定,public表明PUBLIC伪角色,或如果缺省该参数,则使用current_user。该表可以通过名称或者OID声明。如果用名称声明,则在必要时可以用模式进行修饰。如果使用文本字符串来声明所希望的权限类型,这个文本字符串必须是SELECT、INSERT、UPDATE、DELETE、TRUNCATE、REFERENCESTRIGGER、ALTER、DROP、COMMENT、INDEX或VACUUM之一的值。可以给权限类型添加WITH GRANT OPTION,用来测试权限是否拥有授权选项。也可以用逗号分隔列出的多个权限类型,如果拥有任何所列出的权限,则结果为true。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 gaussdb=# create table tt(a int); NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'a' as the distribution column by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CREATE TABLE gaussdb=# SELECT has_table_privilege('tt', 'select'); has_table_privilege --------------------- t (1 row) # 查看数据库用户名列表 gaussdb=# \du; List of roles Role name | Attributes | Member of -------------+------------------------------------------------------------------------------------------------------------------+----------- omm | Sysadmin, Create role, Create DB, Replication, Administer audit, Monitoradmin, Operatoradmin, Policyadmin, UseFT | {} simple_user | | {} test | Sysadmin | {} gaussdb=# SELECT has_table_privilege('omm', 'tt', 'select,INSERT WITH GRANT OPTION '); has_table_privilege --------------------- t (1 row) has_tablespace_privilege(user, tablespace, privilege) 描述:指定用户是否有访问表空间的权限。 返回类型:Boolean has_tablespace_privilege(tablespace, privilege) 描述:当前用户是否有访问表空间的权限。 返回类型:Boolean 备注:has_tablespace_privilege检查用户是否能以特定方式访问一个表空间。其参数类似has_table_privilege。访问权限类型必须是CREATE、ALTER、DROP或COMMENT之一的值。 pg_has_role(user, role, privilege) 描述:指定用户是否有角色的权限。 返回类型:Boolean pg_has_role(role, privilege) 描述:当前用户是否有角色的权限。 返回类型:Boolean 备注:pg_has_role检查用户是否能以特定方式访问一个角色。其参数类似has_table_privilege,除了public不能用做用户名。访问权限类型必须是MEMBER或USAGE的一些组合。 MEMBER表示的是角色中的直接或间接成员关系(也就是SET ROLE的权限),而USAGE表示无需通过SET ROLE也直接拥有角色的使用权限。 has_any_privilege(user, privilege) 描述:指定用户是否有某项ANY权限,若同时查询多个权限,只要具有其中一个则返回true。 返回类型:Boolean 表13 参数类型说明 参数名 合法入参类型 描述 取值范围 user name 用户 已存在的用户名。 privilege text ANY权限 可选取值: CREATE ANY TABLE [WITH ADMIN OPTION] ALTER ANY TABLE [WITH ADMIN OPTION] DROP ANY TABLE [WITH ADMIN OPTION] SELECT ANY TABLE [WITH ADMIN OPTION] INSERT ANY TABLE [WITH ADMIN OPTION] UPDATE ANY TABLE [WITH ADMIN OPTION] DELETE ANY TABLE [WITH ADMIN OPTION] CREATE ANY SEQUENCE [WITH ADMIN OPTION] CREATE ANY INDEX [WITH ADMIN OPTION] CREATE ANY FUNCTION [WITH ADMIN OPTION] EXECUTE ANY FUNCTION [WITH ADMIN OPTION] CREATE ANY TYPE [WITH ADMIN OPTION]
  • 下标生成函数 generate_subscripts(array anyarray, dim int) 描述:生成一系列包括给定数组的下标。 返回值类型:setof int generate_subscripts(array anyarray, dim int, reverse boolean) 描述:生成一系列包括给定数组的下标。当reverse为真时,该系列则以相反的顺序返回。 返回值类型:setof int
  • 账本数据库的函数 get_dn_hist_relhash(text, text) 描述:返回指定防篡改用户表的表级数据hash值。该函数仅供分布式节点间调用,所有用户调用均提示权限不足。 参数类型:text 返回值类型:hash16 示例: 1 2 3 4 5 6 7 8 --创建schema gaussdb=# CREATE SCHEMA ledgernsp WITH BLOCKCHAIN; --创建表 gaussdb=# CREATE TABLE ledgernsp.tab(a int, b text); --插入数据 gaussdb=# SELECT get_dn_hist_relhash('ledgernsp', 'tab'); ERROR: Permission denied. CONTEXT: referenced column: get_dn_hist_relhash ledger_hist_check(text, text) 描述:校验指定防篡改用户表的表级数据hash值与其对应历史表hash一致性。 参数类型:text 返回值类型:Boolean 示例: 1 2 3 4 5 gaussdb=# SELECT ledger_hist_check('ledgernsp','tab'); ledger_hist_check ------------------- t (1 row) ledger_hist_repair(text, text) 描述:修复指定防篡改用户表对应的历史表hash值,使之与用户表hash一致,返回hash差值。 参数类型:text 返回值类型:hash16 示例: 1 2 3 4 5 gaussdb=# SELECT ledger_hist_repair('ledgernsp','tab'); ledger_hist_repair -------------------- 0000000000000000 (1 row) ledger_hist_archive(text, text) 描述:归档指定防篡改用户表对应的历史表至审计日志目录中hist_back文件夹下。如果用户历史表名称中带有'/'符号,归档所生成的文件名中将会把'/'替换为'_'。 参数类型:text 返回值类型:Boolean 示例: 1 2 3 4 5 gaussdb=# EXECUTE DIRECT ON (datanode1) 'select pg_catalog.ledger_hist_archive(''ledgernsp'', ''tab'');'; ledger_hist_archive --------------------- t (1 row) ledger_gchain_check(text, text) 描述:校验指定防篡改用户表对应的历史表hash与全局历史表对应的relhash一致性。 参数类型:text 返回值类型:Boolean 示例: 1 2 3 4 5 gaussdb=# SELECT ledger_gchain_check('ledgernsp','tab'); ledger_gchain_check --------------------- t (1 row) ledger_gchain_repair(text, text) 描述:修复指定防篡改用户表在全局历史表中的relhash,使之与其历史表hash一致,返回指定表的hash总和。 参数类型:text 返回值类型:hash16 示例: 1 2 3 4 5 gaussdb=# SELECT ledger_gchain_repair('ledgernsp','tab'); ledger_gchain_repair ---------------------- da30c1260af5be50 (1 row) ledger_gchain_archive(void) 描述:归档全局历史表至审计日志目录中hist_back文件夹下。 参数类型:void 返回值类型:Boolean 示例: 1 2 3 4 5 6 7 8 9 10 11 gaussdb=# SELECT ledger_gchain_archive(); ledger_gchain_archive ----------------------- t (1 row) --删除表 gaussdb=# drop table ledgernsp.tab; DROP TABLE --删除schema gaussdb=# drop schema ledgernsp cascade; DROP SCHEMA 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类型。 参数类型:hash32 返回值类型:cstring 父主题: 函数和操作符
  • 操作符 = 描述:比较hll或hll_hashval的值是否相等。 返回值类型:bool 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 --hll gaussdb=# SELECT (hll_empty() || hll_hash_integer(1)) = (hll_empty() || hll_hash_integer(1)); column ---------- t (1 row) --hll_hashval gaussdb=# SELECT hll_hash_integer(1) = hll_hash_integer(1); ?column? ---------- t (1 row)
  • 废弃函数 由于版本升级,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_empty() 描述:创建一个空的hll。 返回值类型:hll 示例: 1 2 3 4 5 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 9 10 11 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 9 10 11 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 9 10 11 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 9 10 11 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 示例: 1 2 3 4 5 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 示例: 1 2 3 4 5 gaussdb=# SELECT hll_add_rev(hll_hash_integer(1), hll_empty()); hll_add_rev ---------------------------------------------------------------------------- \x484c4c08000002002b0900000000000000f03f3e2921ff133fbaed3e2921ff133fbaed00 (1 row) hll_eq(hll, hll) 描述:比较两个hll是否相等。 返回值类型:bool 示例: 1 2 3 4 5 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 示例: 1 2 3 4 5 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 示例: 1 2 3 4 5 gaussdb=# SELECT hll_cardinality(hll_empty() || hll_hash_integer(1)); hll_cardinality ----------------- 1 (1 row) hll_union(hll, hll) 描述:把两个hll数据结构union成一个。 返回值类型:hll 示例: 1 2 3 4 5 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)
  • 聚合函数 hll_add_agg(hll_hashval) 描述:把哈希后的数据按照分组放到hll中。 返回值类型:hll 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 --准备数据 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; --创建表并指定列为hll gaussdb=# 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)
  • 几何函数 area(object) 描述:计算图形的面积。 返回类型:double precision 示例: 1 2 3 4 5 gaussdb=# SELECT area(box '((0,0),(1,1))') AS RESULT; result -------- 1 (1 row) center(object) 描述:计算图形的中心。 返回类型:point 示例: 1 2 3 4 5 gaussdb=# SELECT center(box '((0,0),(1,2))') AS RESULT; result --------- (0.5,1) (1 row) diameter(circle) 描述:计算圆的直径。 返回类型:double precision 示例: 1 2 3 4 5 gaussdb=# SELECT diameter(circle '((0,0),2.0)') AS RESULT; result -------- 4 (1 row) height(box) 描述:矩形的竖直高度。 返回类型:double precision 示例: 1 2 3 4 5 gaussdb=# SELECT height(box '((0,0),(1,1))') AS RESULT; result -------- 1 (1 row) isclosed(path) 描述:图形是否为闭合路径。 返回类型:Boolean 示例: 1 2 3 4 5 gaussdb=# SELECT isclosed(path '((0,0),(1,1),(2,0))') AS RESULT; result -------- t (1 row) isopen(path) 描述:图形是否为开放路径。 返回类型:Boolean 示例: 1 2 3 4 5 gaussdb=# SELECT isopen(path '[(0,0),(1,1),(2,0)]') AS RESULT; result -------- t (1 row) length(object) 描述:计算图形的长度。 返回类型:double precision 示例: 1 2 3 4 5 gaussdb=# SELECT length(path '((-1,0),(1,0))') AS RESULT; result -------- 4 (1 row) npoints(path) 描述:计算路径的顶点数。 返回类型:int 示例: 1 2 3 4 5 gaussdb=# SELECT npoints(path '[(0,0),(1,1),(2,0)]') AS RESULT; result -------- 3 (1 row) npoints(polygon) 描述:计算多边形的顶点数。 返回类型:int 示例: 1 2 3 4 5 gaussdb=# SELECT npoints(polygon '((1,1),(0,0))') AS RESULT; result -------- 2 (1 row) pclose(path) 描述:把路径转换为闭合路径。 返回类型:path 示例: 1 2 3 4 5 gaussdb=# SELECT pclose(path '[(0,0),(1,1),(2,0)]') AS RESULT; result --------------------- ((0,0),(1,1),(2,0)) (1 row) popen(path) 描述:把路径转换为开放路径。 返回类型:path 示例: 1 2 3 4 5 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 示例: 1 2 3 4 5 gaussdb=# SELECT radius(circle '((0,0),2.0)') AS RESULT; result -------- 2 (1 row) width(box) 描述:计算矩形的水平尺寸。 返回类型:double precision 示例: 1 2 3 4 5 gaussdb=# SELECT width(box '((0,0),(1,1))') AS RESULT; result -------- 1 (1 row)
  • date_part date_part函数是在传统的Ingres函数的基础上制作的(该函数等效于SQL标准函数extract): date_part('field', source) 这里的field参数必须是一个字符串,而不是一个名称。有效的field与extract一样,详细信息请参见EXTRACT。 示例: 1 2 3 4 5 gaussdb=# SELECT date_part('day', TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 16 (1 row) 1 2 3 4 5 gaussdb=# SELECT date_part('hour', INTERVAL '4 hours 3 minutes'); date_part ----------- 4 (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世纪。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(CENTURY FROM TIMESTAMP '2000-12-16 12:21:13'); date_part ----------- 20 (1 row) day 如果source为timestamp,表示月份里的日期(1-31)。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(DAY FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 16 (1 row) 如果source为interval,表示天数。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(DAY FROM INTERVAL '40 days 1 minute'); date_part ----------- 40 (1 row) decade 年份除以10。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(DECADE FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 200 (1 row) dow 每周的星期几,星期天(0)到星期六(6)。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(DOW FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 5 (1 row) doy 一年的第几天(1~365/366)。 1 2 3 4 5 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,表示时间间隔的总秒数。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40.12-08'); date_part -------------- 982384720.12 (1 row) 1 2 3 4 5 gaussdb=# SELECT EXTRACT(EPOCH FROM INTERVAL '5 days 3 hours'); date_part ----------- 442800 (1 row) 将epoch值转换为时间戳的方法。 1 2 3 4 5 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)。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 20 (1 row) isodow 一周的第几天(1-7)。 星期一为1,星期天为7。 除了星期天外,都与dow相同。 1 2 3 4 5 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描述。 1 2 3 4 5 6 7 8 9 10 gaussdb=# SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-01'); date_part ----------- 2005 (1 row) gaussdb=# SELECT EXTRACT(WEEK FROM TIMESTAMP '2006-01-01 00:00:40'); date_part ----------- 52 (1 row) gaussdb=# SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-02'); date_part ----------- 2006 (1 row) gaussdb=# SELECT EXTRACT(WEEK FROM TIMESTAMP '2006-01-02 00:00:40'); date_part ----------- 1 (1 row) microseconds 秒域(包括小数部分)乘以1,000,000。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(MICROSECONDS FROM TIME '17:12:28.5'); date_part ----------- 28500000 (1 row) millennium 千年。 20世纪(19xx年)里面的年份在第二个千年里。第三个千年从2001年1月1日零时开始。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(MILLENNIUM FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 3 (1 row) milliseconds 秒域(包括小数部分)乘以1000。请注意它包括完整的秒。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(MILLISECONDS FROM TIME '17:12:28.5'); date_part ----------- 28500 (1 row) minute 分钟域(0-59)。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(MINUTE FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 38 (1 row) month 如果source为timestamp,表示一年里的月份数(1-12)。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(MONTH FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 2 (1 row) 如果source为interval,表示月的数目,然后对12取模(0-11)。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(MONTH FROM INTERVAL '2 years 13 months'); date_part ----------- 1 (1 row) quarter 该天所在的该年的季度(1-4)。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(QUARTER FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 1 (1 row) second 秒域,包括小数部分(0-59)。 1 2 3 4 5 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周,十二月的后几天可能是下一年第一周。比如,2006-01-01是2005年的第52周,而2006-01-02是2006年的第1周。建议isoyear字段和week一起使用以得到一致的结果。 1 2 3 4 5 6 7 8 9 10 gaussdb=# SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-01'); date_part ----------- 2005 (1 row) gaussdb=# SELECT EXTRACT(WEEK FROM TIMESTAMP '2006-01-01 00:00:40'); date_part ----------- 52 (1 row) gaussdb=# SELECT EXTRACT(ISOYEAR FROM DATE '2006-01-02'); date_part ----------- 2006 (1 row) gaussdb=# SELECT EXTRACT(WEEK FROM TIMESTAMP '2006-01-02 00:00:40'); date_part ----------- 1 (1 row) year 年份域。 1 2 3 4 5 gaussdb=# SELECT EXTRACT(YEAR FROM TIMESTAMP '2001-02-16 20:38:40'); date_part ----------- 2001 (1 row)
  • 时间日期操作符 时间日期操作符如表1所示。 要尽量避免在查询中使用 'now'::date, 'now'::timestamp,'now'::timestamptz字符串常量强转以及text_date('now')的类似表达式来获取数据库当前时间或者将当前时间值作为函数入参场景,在这些场景下,优化器会提前算出常量时间,造成查询结果不正确。 gaussdb=# EXPLAIN SELECT * FROM t1 WHERE b='now'::date; QUERY PLAN ----------------------------------------------------- Seq Scan on t1 (cost=0.00..13.60 rows=1 width=310) Filter: ((b)::text = '2024-11-09 15:07:56'::text) (2 rows) gaussdb=# EXPLAIN SELECT * FROM t1 WHERE b=text_date('now'); QUERY PLAN ----------------------------------------------------- Seq Scan on t1 (cost=0.00..13.60 rows=1 width=310) Filter: ((b)::text = '2024-11-09'::text) (2 rows) 推荐使用now(), currenttimestamp()函数作为获取数据库当前时间的方法。 gaussdb=# EXPLAIN SELECT * FROM t1 WHERE b=now(); QUERY PLAN ----------------------------------------------------- Seq Scan on t1 (cost=0.00..14.80 rows=1 width=310) Filter: ((b)::text = (now())::text) (2 rows) gaussdb=# EXPLAIN SELECT * FROM t1 WHERE b=text_date(now()); QUERY PLAN ---------------------------------------------------------- Seq Scan on t1 (cost=0.00..16.00 rows=1 width=310) Filter: ((b)::text = (text_date((now())::text))::text) (2 rows) 用户在使用时间和日期操作符时,对应的操作数请使用明确的类型前缀修饰,以确保数据库在解析操作数的时候能够与用户预期一致,不会产生用户非预期的结果。 比如下面示例没有明确数据类型就会出现异常错误。 1 2 3 4 5 6 7 gaussdb=# SELECT date '2001-10-01' - '7' AS RESULT; ERROR: GAUSS-10416: invalid input syntax for type timestamp: "7" SQLSTATE: 22007 LINE 1: SELECT date '2001-10-01' - '7' AS RESULT; ^ CONTEXT: referenced column: result
  • TIMESTAMPDIFF TIMESTAMPDIFF(unit , timestamp_expr1, timestamp_expr2) 描述:timestampdiff函数计算两个时间之间(timestamp_expr2-timestamp_expr1)的差值,并以unit形式返回结果。等效于timestamp_diff(text, timestamp, timestamp)。 参数:timestamp_expr1、timestamp_expr2为时间类型表达式、text、datetime、date或time等类型。unit表示的是两个日期差的单位。 返回值类型:bigint 该函数仅在MySQL模式数据库中有效。 timestampdiff在sql_compatibility = 'MYSQL',且参数b_format_version值为5.7、b_format_dev_version值为s1时,调用的函数实际上注册为b_timestampdiff;在MySQL模式数据库中且未开启guc参数时,调用的函数注册为timestamp_diff,可以用“\df b_timestampdiff”等指令查询函数详细入参与返回值。 year 年份。 1 2 3 4 5 gaussdb=# SELECT TIMESTAMPDIFF(YEAR, '2018-01-01', '2020-01-01'); timestamp_diff ---------------- 2 (1 row)
  • 二进制字符串函数 GaussDB 也提供了函数调用所使用的常用语法。 btrim(string bytea,bytes bytea) 描述:从string的开头和结尾删除只包含bytes中字节的最长的字符串。 返回值类型:bytea 示例: 1 2 3 4 5 gaussdb=# SELECT btrim(E'\\000trim\\000'::bytea, E'\\000'::bytea) AS RESULT; result ------------ \x7472696d (1 row) get_bit(string, offset) 描述:从字符串中抽取位。 返回值类型:int 示例: 1 2 3 4 5 gaussdb=# SELECT get_bit(E'Th\\000omas'::bytea, 45) AS RESULT; result -------- 1 (1 row) get_byte(string, offset) 描述:从字符串中抽取字节。 返回值类型:int 示例: 1 2 3 4 5 gaussdb=# SELECT get_byte(E'Th\\000omas'::bytea, 4) AS RESULT; result -------- 109 (1 row) set_bit(string,offset, newvalue) 描述:设置字符串中的位。 返回值类型:bytea 示例: 1 2 3 4 5 gaussdb=# SELECT set_bit(E'Th\\000omas'::bytea, 45, 0) AS RESULT; result ------------------ \x5468006f6d4173 (1 row) set_byte(string,offset, newvalue) 描述:设置字符串中的字节。 返回值类型:bytea 示例: 1 2 3 4 5 gaussdb=# SELECT set_byte(E'Th\\000omas'::bytea, 4, 64) AS RESULT; result ------------------ \x5468006f406173 (1 row) rawcmp(raw, raw) 描述:raw数据类型比较函数。 参数:raw, raw 返回值类型:integer raweq(raw, raw) 描述:raw数据类型比较函数。 参数:raw, raw 返回值类型:boolean rawge(raw, raw) 描述:raw数据类型比较函数。 参数:raw, raw 返回值类型:boolean rawgt(raw, raw) 描述:raw数据类型比较函数。 参数:raw, raw 返回值类型:boolean rawin(cstring) 描述:raw数据类型解析函数。 参数:cstring 返回值类型:bytea rawle(raw, raw) 描述:raw数据类型解析函数。 参数:raw, raw 返回值类型:boolean rawlike(raw, raw) 描述:raw数据类型解析函数。 参数:raw, raw 返回值类型:boolean rawlt(raw, raw) 描述:raw数据类型解析函数。 参数:raw, raw 返回值类型:boolean rawne(raw, raw) 描述:比较raw类型是否一样。 参数:raw, raw 返回值类型:boolean rawnlike(raw, raw) 描述:比较raw类型与模式是否不匹配。 参数:raw, raw 返回值类型:boolean rawout(bytea) 描述:RAW类型的输出接口。 参数:bytea 返回值类型:cstring rawsend(raw) 描述:转换bytea为二进制类型。 参数:raw 返回值类型:bytea rawtohex(text) 描述:raw格式转换为十六进制。 参数:text 返回值类型:text
  • 字符串操作符 SQL定义了一些字符串函数,在这些函数里使用关键字而不是逗号来分隔参数。 octet_length(string) 描述:二进制字符串中的字节数。 返回值类型:int 示例: 1 2 3 4 5 gaussdb=# SELECT octet_length(E'jo\\000se'::bytea) AS RESULT; result -------- 5 (1 row) overlay(string placing string from int [for int]) 描述:替换子串。 返回值类型:bytea 示例: 1 2 3 4 5 gaussdb=# SELECT overlay(E'Th\\000omas'::bytea placing E'\\002\\003'::bytea from 2 for 3) AS RESULT; result ---------------- \x5402036d6173 (1 row) position(substring in string) 描述:特定子字符串的位置。 返回值类型:int 示例: 1 2 3 4 5 gaussdb=# SELECT position(E'\\000om'::bytea in E'Th\\000omas'::bytea) AS RESULT; result -------- 3 (1 row) substring(string [from int] [for int]) 描述:截取子串。 返回值类型:bytea 示例: 1 2 3 4 5 gaussdb=# SELECT substring(E'Th\\000omas'::bytea from 2 for 3) AS RESULT; result ---------- \x68006f (1 row) substr(bytea [from int] [for int]) 描述:截取子串。 返回值类型:bytea 示例: 1 2 3 4 5 gaussdb=# SELECT substr(E'Th\\000omas'::bytea,2, 3) as result; result ---------- \x68006f (1 row) trim([both] bytes from string) 描述:从string的开头和结尾删除只包含bytes中字节的最长字符串。 返回值类型:bytea 示例: 1 2 3 4 5 gaussdb=# SELECT trim(E'\\000'::bytea from E'\\000Tom\\000'::bytea) AS RESULT; result ---------- \x546f6d (1 row)
  • 常量与宏 GaussDB支持的常量和宏请参见表1。 表1 常量和宏 参数 描述 示例 CURRENT_CATALOG 当前数据库 1 2 3 4 5 testdb=# SELECT CURRENT_CATALOG; current_database ------------------ testdb (1 row) CURRENT_ROLE 当前用户 1 2 3 4 5 gaussdb=# SELECT CURRENT_ROLE; current_user -------------- omm (1 row) CURRENT_SCHEMA 当前数据库模式 1 2 3 4 5 gaussdb=# SELECT CURRENT_SCHEMA; current_schema ---------------- public (1 row) CURRENT_USER 当前用户 1 2 3 4 5 gaussdb=# SELECT CURRENT_USER; current_user -------------- omm (1 row) LOCALTIMESTAMP 当前会话时间(无时区) 1 2 3 4 5 gaussdb=# SELECT LOCALTIMESTAMP; timestamp ---------------------------- 2015-10-10 15:37:30.968538 (1 row) NULL 空值 - SESSION_USER 当前系统用户 1 2 3 4 5 gaussdb=# SELECT SESSION_USER; session_user -------------- omm (1 row) SYSDATE 当前系统日期 1 2 3 4 5 gaussdb=# SELECT SYSDATE; sysdate --------------------- 2015-10-10 15:48:53 (1 row) USER 当前用户,此用户为CURRENT_USER的别名。 1 2 3 4 5 gaussdb=# SELECT USER; current_user -------------- omm (1 row) 父主题: SQL参考
  • 数组类型的字符串输入 要把一个数组值写成一个文字常数(常量输入),将元素值用花括号括起并用逗号分隔。因此,一个数组常量的一般格式如下: '{ val1 delim val2 delim ... }' 上述格式中的delim是元素类型的分隔符,记录在类型的pg_type表的typdelim列中。每个val可以是数组元素类型的一个常量,也可以是一个子数组。示例如下: gaussdb=# SELECT '{1, 2, 3}'::int[] AS RESULT; result --------- {1,2,3} (1 row) gaussdb=# SELECT '{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}'::int[] AS RESULT; result --------------------------- {{1,2,3},{4,5,6},{7,8,9}} (1 row) 在任意元素值周围可以使用双引号,并且在元素值包含逗号或花括号等一些特殊字符时必须使用双引号。 示例如下: 该示例表示有一个varchar类型的数组,且一共有7个varchar元素,元素依次为: 包含一个空格的字符串 值为“NULL”的字符串 字符串为NULL 有一个\字符的字符串 有一个{字符的字符串 有一个}字符的字符串有一个,字符的字符串 gaussdb=# SELECT '{" ", "NULL", null, "\\", "{", "}", ","}'::varchar[] AS RESULT; result ------------------------------------ {" ","NULL",NULL,"\\","{","}",","} (1 row) 对于数组字符串常量输入,如果数组元素值是空字符串或者包含花括号、分隔符、双引号、反斜杠、空白或者匹配关键字NULL,则这些元素输入需要使用双引号,在元素值里包含的双引号和反斜杠时需要额外添加一个反斜杠。 关键字NULL不区分大小写。 输入会自动跳过没有使用双引号的空白。 一般不建议使用字符常量的方式构造数组数据,推荐使用ARRAY构造器。
  • 数组类型的字符串输出 一个数组值的输出表现形式由该数组元素类型的输出再加上一些标明该数组结构的修饰组成。这些修饰由围绕在数组值周围的花括号(“{” 和“}”)加上相邻项之间的分隔字符组成。在多维数组里, 每个维都有自己级别的花括号,并且在同级相邻的花括号项之间包含分隔符。 数组类型数据包含特殊字符(下述说明中的字符),字符串输出示例: gaussdb=# SELECT ARRAY['{', '}', 'hello, world', '"', '\', ' ', NULL] AS RESULT; array ---------------------------------------------- {"{","}","hello, world","\"","\\"," ",NULL} (1 row) 对于数组字符串常量输出,如果数组元素值是空字符串或者包含花括号、分隔符、双引号、反斜杠、空白或者元素为NULL,则这些元素输出时会输出双引号中,双引号和反斜杠则会被反斜杠转义额外输出一个反斜杠。与字符串常量输入相对应。
  • 数组构造器 数组构造器是一个能构建数组值的表达式。简单的数组构造器由关键词ARRAY、[、用于数组元素值的表达式列表(用逗号分隔)以及]组成。示例如下: gaussdb=# SELECT ARRAY[1, 2, 3 + 4]; array --------- {1,2,7} (1 row) 默认情况下,数组的元素类型是成员表达式的公共类型,使用和UNION或CASE结构(UNION,CASE和相关构造)相同的规则决定。可以通过显式类型转换将数组构造为想要的数据类型,示例如下: gaussdb=# SELECT ARRAY[1, 2, 3]::varchar[]; array --------- {1,2,3} (1 row) gaussdb=# SELECT ARRAY['a', 'b', 'c']::varchar[]; array --------- {a,b,c} (1 row) 除预置的基础类型外,record类型和表类型也可以定义其数组类型,示例: gaussdb=# CREATE TYPE rec IS (c1 int, c2 int); gaussdb=# SELECT ARRAY[(1, 1), (2, 2)]::rec[]; array ------------------- {"(1,1)","(2,2)"} (1 row) gaussdb=# CREATE TABLE tab (c1 int, c2 int); gaussdb=# SELECT ARRAY[(1, 1), (2, 2)]::tab[]; array ------------------- {"(1,1)","(2,2)"} (1 row) gaussdb=# DROP TYPE rec; gaussdb=# DROP TABLE tab; 因为数组必须得有类型,因此在构造一个空数组时,必须明确的将其构造成需要的类型,示例: gaussdb=# SELECT ARRAY[]::int[]; array ------- {} (1 row) 也可以从子查询的结果中构造一个数组。此时,数组构造器是关键字ARRAY后拼接用圆括号包含的子查询,子查询必须只返回一个单独的字段。生成的一维数组将为子查询里每行结果生成一个元素,元素类型匹配子查询的输出字段。示例: gaussdb=# SELECT ARRAY(SELECT generate_series(1, 6)); array --------------- {1,2,3,4,5,6} (1 row) 多维数组值可以通过嵌套数组构造器的方法来制作。内层构造器中的ARRAY关键字可以省略。比如,下面两个示例是同样的结果: gaussdb=# SELECT ARRAY[ARRAY[1,2], ARRAY[3,4]]; array --------------- {{1,2},{3,4}} (1 row) gaussdb=# SELECT ARRAY[[1,2], [3,4]]; array --------------- {{1,2},{3,4}} (1 row) 同层的内层构造器必须生成同维的子数组。 任何应用于外层ARRAY构造器的类型转换自动的应用到所有的内层构造器。
  • 数组类型的使用 数组类型的使用示例如下: -- 创建有数组类型列的表,并插入一些数据 gaussdb=# CREATE TABLE orders ( name varchar, items varchar[] ); gaussdb=# INSERT INTO orders VALUES('a', ARRAY['苹果', '橘子', '梨']); gaussdb=# INSERT INTO orders VALUES('b', ARRAY['矿泉水', '可乐', '雪碧']); gaussdb=# INSERT INTO orders VALUES('c', ARRAY['鼠标', '键盘', '耳机']); gaussdb=# INSERT INTO orders VALUES('d', '{白菜, 土豆, 茄子}'); -- 查询数据 gaussdb=# SELECT * FROM orders ORDER BY name; name | items ------+-------------------- a | {苹果,橘子,梨} b | {矿泉水,可乐,雪碧} c | {鼠标,键盘,耳机} d | {白菜,土豆,茄子} (4 rows) -- 访问数组元素 gaussdb=# SELECT items[1] FROM orders ORDER BY name; items -------- 苹果 矿泉水 鼠标 白菜 (4 rows) -- 访问元素超过范围或者访问下标为NULL时会返回NULL gaussdb=# SELECT items[4] FROM orders ORDER BY name; items ------- (4 rows) gaussdb=# SELECT items[null] FROM orders ORDER BY name; items ------- (4 rows) -- 访问子数组 gaussdb=# SELECT items[1:2] FROM orders ORDER BY name; items --------------- {苹果,橘子} {矿泉水,可乐} {鼠标,键盘} {白菜,土豆} (4 rows) -- 更新整个数组 gaussdb=# UPDATE orders SET items = ARRAY['香蕉', '西瓜', '草莓'] WHERE name = 'a'; gaussdb=# SELECT items FROM orders WHERE name = 'a'; items ------------------ {香蕉,西瓜,草莓} (1 row) -- 更新数组的元素 gaussdb=# UPDATE orders SET items[1] = '芒果' WHERE name = 'a'; gaussdb=# SELECT items FROM orders WHERE name = 'a'; items ------------------ {芒果,西瓜,草莓} (1 row) -- 更新数组的元素片段 gaussdb=# UPDATE ORDERS SET items[1:2] = ARRAY['电脑', '手机'] WHERE name = 'c'; gaussdb=# SELECT items FROM ORDERS WHERE name = 'c'; items ------------------ {电脑,手机,耳机} (1 row) -- 添加数组元素,所有位于原数组最后一个元素和这个新元素之间的未赋值元素都将设为 NULL gaussdb=# UPDATE orders SET items[4] = '显示器' WHERE name = 'c'; gaussdb=# SELECT items FROM orders WHERE name = 'c'; items ------------------------- {电脑,手机,耳机,显示器} (1 row) gaussdb=# UPDATE orders SET items[6] = '显示器2' WHERE name = 'c'; gaussdb=# SELECT items FROM orders WHERE name = 'c'; items -------------------------------------- {电脑,手机,耳机,显示器,NULL,显示器2} (1 row) gaussdb=# DROP TABLE orders;
  • aclitem类型 aclitem数据类型用于存储对象权限信息。其内部实现是int类型,支持的格式为‘user1=privs/user2’。 aclitem[]数据类型为aclitem组成的数组,支持的格式为‘{user1=privs1/user3,user2=privs2/user3}’。 其中user1、user2和user3为数据库中已存在的用户/角色名,privs为数据库中支持的权限(具体请参见表2)。 示例: --创建相应用户。 gaussdb=# CREATE USER user1 WITH PASSWORD '***********'; gaussdb=# CREATE USER user2 WITH PASSWORD '***********'; gaussdb=# CREATE USER omm WITH PASSWORD '***********'; --新建一张数据表table_acl,有三个字段,类型分别为int、aclitem、aclitem[]。 gaussdb=# CREATE TABLE table_acl (id int,priv aclitem,privs aclitem[]); --向数据表table_acl插入一条内容为(1,'user1=arw/omm','{omm=d/user2,omm=w/omm}')的数据。 gaussdb=# INSERT INTO table_acl VALUES (1,'user1=arw/omm','{omm=d/user2,omm=w/omm}'); --向数据表table_acl再插入一条内容为(2,'user1=aw/omm','{omm=d/user2}')的数据。 gaussdb=# INSERT INTO table_acl VALUES (2,'user1=aw/omm','{omm=d/user2}'); gaussdb=# SELECT * FROM table_acl; id | priv | privs ----+---------------+------------------------- 1 | user1=arw/omm | {omm=d/user2,omm=w/omm} 2 | user1=aw/omm | {omm=d/user2} (2 rows) --删除表和用户。 gaussdb=# DROP USER user1; gaussdb=# DROP USER user2; gaussdb=# DROP USER omm; gaussdb=# DROP TABLE table_acl; 父主题: 数据类型
  • 账本数据库使用的数据类型 账本数据库使用HASH16数据类型来存储行级hash摘要或表级hash摘要,使用HASH32数据类型来存储全局hash摘要或者历史表校验hash。 表1 账本数据库HASH类型 名称 描述 存储空间 范围 HASH16 以无符号64位整数存储。 8字节 0 ~ +18446744073709551615 HASH32 以包含16个无符号整型元素数的组存储。 16字节 16个元素的无符号整型数组能够包含的取值范围。 HASH16数据类型用来在账本数据库中存储行级或表级hash摘要。在获得长度为16个字符的十六进制字符串的hash序列后,系统将调用hash16in函数将该序列转换为一个无符号64位整数存储进HASH16类型变量中。示例如下: 十六进制字符串:e697da2eaa3a775b 对应的无符号64位整数:16615989244166043483 十六进制字符串:ffffffffffffffff 对应的无符号64位整数:18446744073709551615 示例: gaussdb=# CREATE TABLE hash16test(id int, data hash16); gaussdb=# INSERT INTO hash16test VALUES (1, 'e697da2eaa3a775b'); gaussdb=# SELECT * FROM hash16test; id | data ----+---------------------------------- 1 | e697da2eaa3a775b (1 row) gaussdb=# DROP TABLE hash16test; HASH32数据类型用来在账本数据库中存储全局hash摘要或者历史表校验hash。在获得长度为32个字符的十六进制字符串的hash序列后,系统将调用hash32in函数将该序列转换到一个包含16个无符号整型元素的数组中。示例如下: 十六进制字符串:685847ed1fe38e18f6b0e2b18c00edee 对应的HASH32数组:[104,88,71,237,31,227,142,24,246,176,226,177,140,0,237,238] 示例: gaussdb=# CREATE TABLE hash32test(id int, data hash32); gaussdb=# INSERT INTO hash32test VALUES (1, '685847ed1fe38e18f6b0e2b18c00edee'); gaussdb=# SELECT * FROM hash32test; id | data ----+---------------------------------- 1 | 685847ed1fe38e18f6b0e2b18c00edee (1 row) gaussdb=# DROP TABLE hash32test; 父主题: 数据类型
  • 离散范围类型 一种范围的元素类型具有一个定义的“步长”,例如integer或date。在这些类型中,如果两个元素之间没有合法值,它们可以被说成是相邻。这与连续范围相反,连续范围中总是(或者几乎总是)可以在两个给定值之间标识其他元素值。例如,numeric类型之上的一个范围就是连续的,timestamp上的范围也是(尽管timestamp具有有限的精度,并且在理论上可以被当作离散的,但是可以认为它是连续的,因为通常并不关心它的步长)。 另一种考虑离散范围类型的方法是对每一个元素值都有一个清晰的“下一个”或“上一个”值。通过选择原来给定的下一个或上一个元素值来取代它,就可以在一个范围界限的包含和排除表达之间转换。例如,在一个整数范围类型中,[4,8]和(3,9)表示相同的值集合,但是对于numeric上的范围就不是这样。 一个离散范围类型应该具有一个正规化函数,即明确元素类型的指定步长。正规化函数负责把范围类型的相等值转换成具有相同的表达,特别是与包含或者排除界限一致。如果没有指定一个正规化函数,那么具有不同格式的范围将总是会被当作不等,即使它们实际上是表达相同的一组值。 内建的范围类型int4range、int8range和daterange都使用一种正规的形式,该形式包括下界并且排除上界,即[)。但是用户定义的范围类型可以使用其他形式。
共100000条