华为云用户手册

  • STAT_ALL_INDEXES 将包含本节点数据库中的每个索引行,显示访问特定索引的统计。 表1 STAT_ALL_INDEXES字段 名称 类型 描述 relid oid 这个索引的表的OID。 indexrelid oid 索引的OID。 schemaname name 索引中模式名。 relname name 索引的表名。 indexrelname name 索引名。 idx_scan bigint 索引上开始的索引扫描数。 idx_tup_read bigint 通过索引上扫描返回的索引项数。 idx_tup_fetch bigint 通过使用索引的简单索引扫描抓取的活表行数。 父主题: Object
  • GLOBAL_STAT_SYS_INDEXES 得到各节点pg_catalog、information_schema以及pg_toast模式中所有系统表的索引状态信息。 表1 GLOBAL_STAT_SYS_INDEXES字段 名称 类型 描述 node_name name 节点名称。 relid oid 这个索引的表的OID。 indexrelid oid 索引的OID。 schemaname name 索引中模式名。 relname name 索引的表名。 indexrelname name 索引名。 idx_scan bigint 索引上开始的索引扫描数。 idx_tup_read bigint 通过索引上扫描返回的索引项数。 idx_tup_fetch bigint 通过使用索引的简单索引扫描抓取的活表行数。 父主题: Object
  • GLOBAL_STAT_SYS_TABLES 得到各节点pg_catalog、information_schema以及pg_toast模式下所有系统表的统计信息。 表1 GLOBAL_STAT_SYS_TABLES字段 名称 类型 描述 node_name name 节点名称。 relid oid 表的OID。 schemaname name 此表的模式名。 relname name 表名。 seq_scan bigint 此表发起的顺序扫描数。 seq_tup_read bigint 顺序扫描抓取的活跃行数。 idx_scan bigint 此表发起的索引扫描数。 idx_tup_fetch bigint 索引扫描抓取的活跃行数。 n_tup_ins bigint 插入行数。 n_tup_upd bigint 更新行数。 n_tup_del bigint 删除行数。 n_tup_hot_upd bigint HOT更新行数(比如没有更新所需的单独索引)。 n_live_tup bigint 估计活跃行数。 n_dead_tup bigint 估计死行数。 last_vacuum timestamp with time zone 最后一次此表是手动清理的(不计算VACUUM FULL)时间。 last_autovacuum timestamp with time zone 上次被autovacuum守护进程清理的时间。 last_analyze timestamp with time zone 上次手动分析这个表的时间。 last_autoanalyze timestamp with time zone 上次被autovacuum守护进程分析的时间。 vacuum_count bigint 这个表被手动清理的次数(不计算VACUUM FULL)。 autovacuum_count bigint 这个表被autovacuum清理的次数。 analyze_count bigint 这个表被手动分析的次数。 autoanalyze_count bigint 这个表被autovacuum守护进程分析的次数。 父主题: Object
  • STAT_ALL_TABLES 本节点内数据库中每个表(包括TOAST表)的一行的统计信息。 表1 STAT_ALL_TABLES字段 名称 类型 描述 relid oid 表的OID。 schemaname name 该表的模式名。 relname name 表名。 seq_scan bigint 该表发起的顺序扫描数。 seq_tup_read bigint 顺序扫描抓取的活跃行数。 idx_scan bigint 该表发起的索引扫描数。 idx_tup_fetch bigint 索引扫描抓取的活跃行数。 n_tup_ins bigint 插入行数。 n_tup_upd bigint 更新行数。 n_tup_del bigint 删除行数。 n_tup_hot_upd bigint HOT更新行数(比如没有更新所需的单独索引)。 n_live_tup bigint 估计活跃行数。 n_dead_tup bigint 估计死行数。 last_vacuum timestamp with time zone 最后一次该表是手动清理的(不计算VACUUM FULL)的时间。 last_autovacuum timestamp with time zone 上次被autovacuum守护进程清理的时间。 last_analyze timestamp with time zone 上次手动分析该表的时间。 last_autoanalyze timestamp with time zone 上次被autovacuum守护进程分析时间。 vacuum_count bigint 该表被手动清理的次数(不计算VACUUM FULL)。 autovacuum_count bigint 该表被autovacuum清理的次数。 analyze_count bigint 该表被手动分析的次数。 autoanalyze_count bigint 该表被autovacuum守护进程分析的次数。 父主题: Object
  • PG_THREAD_WAIT_STATUS 通过PG_THREAD_WAIT_STATUS视图可以检测当前实例中工作线程(backend thread)以及辅助线程(auxiliary thread)的阻塞等待情况。 表1 PG_THREAD_WAIT_STATUS字段 名称 类型 描述 node_name text 当前节点的名称。 db_name text 数据库名称。 thread_name text 线程名称。 query_id bigint 查询ID,对应debug_query_id。 tid bigint 当前线程的线程号。 sessionid bigint 当前会话ID。 lwtid integer 当前线程的轻量级线程号。 psessionid bigint 父会话ID。 tlevel integer streaming线程的层级。 smpid integer 并行线程的ID。 wait_status text 当前线程的等待状态。等待状态的详细信息请参见表2。 wait_event text 如果wait_status是acquire lock、acquire lwlock、wait io三种类型,此列描述具体的锁、轻量级锁、IO的信息。否则是空。 locktag text 当前线程正在等待锁的信息。 lockmode text 当前线程正等待获取的锁模式。包含表级锁、行级锁、页级锁下的各模式。 block_sessionid bigint 阻塞当前线程获取锁的会话标识。 global_sessionid text 全局会话ID。 wait_status列的等待状态有以下状态。 表2 等待状态列表 wait_status值 含义 none 没在等任意事件。 acquire lock 等待加锁,要么加锁成功,要么加锁等待超时。 acquire lwlock 等待获取轻量级锁。 wait io 等待IO完成。 wait cmd 等待完成读取网络通信包。 wait pooler get conn 等待pooler完成获取连接。 wait pooler abort conn 等待pooler完成终止连接。 wait pooler clean conn 等待pooler完成清理连接。 pooler create conn: [nodename], total N 等待pooler建立连接,当前正在与nodename指定节点建立连接,且仍有N个连接等待建立。 get conn 获取到其他节点的连接。 set cmd: [nodename] 在连接上执行SET/RESET/TRANSACTION BLOCK LEVEL PARA SET/SESSION LEVEL PARA SET,当前正在nodename指定节点上执行。 cancel query 取消某连接上正在执行的SQL语句。 stop query 停止某连接上正在执行的查询。 wait node: [nodename](plevel), total N, [phase] 等待接收与某节点的连接上的数据,当前正在等待nodename节点plevel线程的数据,且仍有N个连接的数据待返回。如果状态包含phase信息,则可能的阶段状态有: begin:表示处于事务开始阶段。 commit:表示处于事务提交阶段。 rollback:表示处于事务回滚阶段。 wait transaction sync: xid 等待xid指定事务同步。 wait wal sync 等待特定LSN的wal log完成到备机的同步。 wait data sync 等待完成数据页到备机的同步。 wait data sync queue 等待把行存的数据页或列存的CU放入同步队列。 flush data: [nodename](plevel), [phase] 等待向网络中nodename指定节点的plevel对应线程发送数据。如果状态包含phase信息,则可能的阶段状态为wait quota,即当前通信流正在等待quota值。 stream get conn: [nodename], total N 初始化stream flow时,等待与nodename节点的consumer对象建立连接,且当前有N个待建连对象。 wait producer ready: [nodename](plevel), total N 初始化stream flow时,等待每个producer都准备好,当前正在等待nodename节点plevel对应线程的producer对象准备好,且仍有N个producer对象处于等待状态。 synchronize quit stream plan结束时,等待stream线程组内的线程统一退出。 wait stream nodegroup destroy stream plan结束时,等待销毁stream node group。 wait active statement 等待作业执行,正在资源负载管控中。 analyze: [relname], [phase] 当前正在对表relname执行analyze。如果状态包含phase信息,则为autovacuum,表示是数据库自动开启AutoVacuum线程执行的analyze分析操作。 vacuum: [relname], [phase] 当前正在对表relname执行vacuum。如果状态包含phase信息,则为autovacuum,表示是数据库自动开启AutoVacuum线程执行的vacuum清理操作。 vacuum full: [relname] 当前正在对表relname执行vacuum full清理。 create index 当前正在创建索引。 HashJoin - [ build hash | write file ] 当前是HashJoin算子,主要关注耗时的执行阶段。 build hash:表示当前HashJoin算子正在建立哈希表。 write file:表示当前HashJoin算子正在将数据写入磁盘。 HashAgg - [ build hash | write file ] 当前是HashAgg算子,主要关注耗时的执行阶段。 build hash:表示当前HashAgg算子正在建立哈希表。 write file:表示当前HashAgg算子正在将数据写入磁盘。 HashSetop - [build hash | write file ] 当前是HashSetop算子,主要关注耗时的执行阶段。 build hash:表示当前HashSetop算子正在建立哈希表。 write file:表示当前HashSetop算子正在将数据写入磁盘。 Sort | Sort - [fetch tuple | write file] 当前是Sort算子做排序,fetch tuple表示Sort算子正在获取tuple,write file表示Sort算子正在将数据写入磁盘。 Material | Material - write file 当前是Material算子,write file表示Material算子正在将数据写入磁盘。 NestLoop 当前是NestLoop算子。 wait memory 等待内存获取。 wait sync consumer next step Stream算子等待消费者执行。 wait sync producer next step Stream算子等待生产者执行。 standby read recovery conflict 备机只读与日志回放产生冲突。 standby get snapshot 备机只读获取快照。 wait reserve td 等待申请td。 vacuum gpi vacuum或者autovacuum流程中global partition index清理 当wait_status为acquire lwlock、acquire lock或者wait io时,表示有等待事件。正在等待获取wait_event列对应类型的轻量级锁、事务锁,或者正在进行IO。 其中,wait_status值为acquire lwlock(轻量级锁)时对应的wait_event等待事件类型与描述信息如下。(wait_event为extension时,表示此时的轻量级锁是动态分配的锁,未被监控。) 表3 轻量级锁等待事件列表 wait_event类型 类型描述 ShmemIndexLock 用于保护共享内存中的主索引哈希表。 OidGenLock 用于避免不同线程产生相同的OID。 XidGenLock 用于避免两个事务获得相同的xid。 ProcArrayLock 用于避免并发访问或修改ProcArray共享数组。 SInvalReadLock 用于避免与清理失效消息并发执行。 SInvalWriteLock 用于避免与其它写失效消息、清理失效消息并发执行。 WALInsertLock 用于避免与其它WAL插入操作并发执行。 WALWriteLock 用于避免并发WAL写盘。 ControlFileLock 用于避免pg_control文件的读写并发、写写并发。 CheckpointLock 用于避免多个checkpoint并发执行。 CLogControlLock 用于避免并发访问或者修改Clog控制数据结构。 SubtransControlLock 用于避免并发访问或者修改子事务控制数据结构。 MultiXactGenLock 用于串行分配唯一MultiXact id。 MultiXactOffsetControlLock 用于避免对pg_multixact/offset的写写并发和读写并发。 MultiXactMemberControlLock 用于避免对pg_multixact/members的写写并发和读写并发。 RelCacheInitLock 用于失效消息场景对init文件进行操作时加锁。 CheckpointerCommLock 用于向checkpointer发起文件刷盘请求场景,需要串行的向请求队列插入请求结构。 TwoPhaseStateLock 用于避免并发访问或者修改两阶段信息共享数组。 TablespaceCreateLock 用于确定tablespace是否已经存在。 BtreeVacuumLock 用于防止vacuum清理B-tree中还在使用的页面。 AutovacuumLock 用于串行化访问autovacuum worker数组。 AutovacuumScheduleLock 用于串行化分配需要vacuum的table。 AutoanalyzeLock 用于获取和释放允许执行Autoanalyze的任务资源。 SyncScanLock 用于确定heap扫描时某个relfilenode的起始位置。 NodeTableLock 用于保护存放数据库节点信息的共享结构。 PoolerLock 用于保证两个线程不会同时从连接池里取到相同的连接。 RelationMappingLock 用于等待更新系统表到存储位置之间映射的文件。 AsyncCtlLock 用于避免并发访问或者修改共享通知状态。 AsyncQueueLock 用于避免并发访问或者修改共享通知信息队列。 SerializableXactHashLock 用于避免对于可串行事务共享结构的写写并发和读写并发。 SerializableFinishedListLock 用于避免对于已完成可串行事务共享链表的写写并发和读写并发。 SerializablePredicateLockListLock 用于保护对于可串行事务持有的锁链表。 OldSerXidLock 用于保护记录冲突可串行事务的结构。 FileStatLock 用于保护存储统计文件信息的数据结构。 SyncRepLock 用于在主备复制时保护xlog同步信息。 DataSyncRepLock 用于在主备复制时保护数据页同步信息。 CStoreColspaceCacheLock 用于保护列存表的CU空间分配。 CStoreCUCacheSweepLock 用于列存CU Cache循环淘汰。 MetaCacheSweepLock 用于元数据循环淘汰。 ExtensionConnectorLibLock 用于初始化ODBC连接场景,在加载与卸载特定动态库时进行加锁。 SearchServerLibLock 用于GPU加速场景初始化加载特定动态库时,对读文件操作进行加锁。 LsnXlogChkFileLock 用于串行更新特定结构中记录的主备机的xlog flush位置点。 ReplicationSlotAllocationLock 用于主备复制时保护主机端的流复制槽的分配。 ReplicationSlotControlLock 用于主备复制时避免并发更新流复制槽状态。 ResourcePoolHashLock 用于避免并发访问或者修改资源池哈希表。 WorkloadStatHashLock 用于避免并发访问或者修改包含数据库主节点的SQL请求构成的哈希表。 WorkloadIoStatHashLock 用于避免并发访问或者修改用于统计当前数据库节点的IO信息的哈希表。 WorkloadCGroupHashLock 用于避免并发访问或者修改Cgroup信息构成的哈希表。 OBSGetPathLock 用于避免对obs路径的写写并发和读写并发。 WorkloadUserInfoLock 用于避免并发访问或修改负载管理(当前特性是实验室特性,使用时请联系华为工程师提供技术支持)的用户信息哈希表。 WorkloadRecordLock 用于避免并发访问或修改在内存自适应管理时对数据库主节点收到请求构成的哈希表。 WorkloadIOUtilLock 用于保护记录iostat,CPU等负载信息的结构。 WorkloadNodeGroupLock 用于避免并发访问或者修改内存中的nodegroup信息构成的哈希表。 JobShmemLock 用于定时任务功能中保护定时读取的全局变量。 OBSRuntimeLock 用于获取环境变量,如GASSHOME。 LLVMDumpIRLock 用于导出动态生成函数所对应的汇编语言。当前特性是实验室特性,使用时请联系华为工程师提供技术支持。 LLVMParseIRLock 用于在查询开始处从IR文件中编译并解析已写好的IR函数。当前特性是实验室特性,使用时请联系华为工程师提供技术支持。 CriticalCacheBuildLock 用于从共享或者本地缓存初始化文件中加载cache的场景。 WaitCountHashLock 用于保护用户语句计数功能场景中的共享结构。 BufMappingLock 用于保护对共享缓冲映射表的操作。 LockMgrLock 用于保护常规锁结构信息。 PredicateLockMgrLock 用于保护可串行事务锁结构信息。 OperatorRealTLock 用于避免并发访问或者修改记录算子级实时数据的全局结构。 OperatorHistLock 用于避免并发访问或者修改记录算子级历史数据的全局结构。 SessionRealTLock 用于避免并发访问或者修改记录query级实时数据的全局结构。 SessionHistLock 用于避免并发访问或者修改记录query级历史数据的全局结构。 CacheSlotMappingLock 用于保护CU Cache全局信息。 BarrierLock 用于保证当前只有一个线程在创建Barrier。 dummyServerInfoCacheLock 用于保护缓存加速数据库连接信息的全局哈希表。 RPNumberLock 用于加速GaussDB的数据库节点对正在执行计划的任务线程的计数。 CBMParseXlogLock Cbm解析xlog时的保护锁 RelfilenodeReuseLock 避免错误地取消已重用的列属性文件的链接。 RcvWriteLock 防止并发调用WalDataRcvWrite。 PercentileLock 用于保护全局PercentileBuffer CSNBufMappingLock 保护csn页面 UniqueSQLMappingLock 用于保护uniquesql hash table DelayDDLLock 防止并发ddl。 CLOG Ctl 用于避免并发访问或者修改Clog控制数据结构 Async Ctl 保护Async buffer MultiXactOffset Ctl 保护MultiXact offet的slru buffer MultiXactMember Ctl 保护MultiXact member的slrubuffer OldSerXid SLRU Ctl 保护old xids的slru buffer ReplicationSlotLock 用于保护ReplicationSlot PGPROCLock 用于保护pgproc MetaCacheLock 用于保护MetaCache DataCacheLock 用于保护datacache InstrUserLock 用于保护InstrUserHTAB。 BadBlockStatHashLock 用于保护global_bad_block_stat hash表。 BufFreelistLock 用于保证共享缓冲区空闲列表操作的原子性。 CUSlotListLock 用于控制列存缓冲区槽位的并发操作。 AddinShmemInitLock 保护共享内存对象的初始化。 AlterPortLock 保护协调节点更改注册端口号的操作。 FdwPartitionCaheLock HDFS分区表缓冲区的管理锁。 DfsConnectorCacheLock DFSConnector缓冲区的管理锁。 DfsSpaceCacheLock HDFS表空间管理缓冲区的管理锁。 FullBuildXlogCopyStartPtrLock 用于保护全量Build中Xlog拷贝的操作。 DfsUserLoginLock 用于HDFS用户登录以及认证。 LogicalReplicationSlotPersistentDataLock 用于保护逻辑复制过程中复制槽位的数据。 WorkloadSessionInfoLock 保护负载管理(当前特性是实验室特性,使用时请联系华为工程师提供技术支持)session info内存hash表访问。 InstrWorkloadLock 保护负载管理(当前特性是实验室特性,使用时请联系华为工程师提供技术支持)统计信息的内存hash表访问。 PgfdwLock 用于管理实例向Foreign server建立连接。 InstanceTimeLock 用于获取实例中会话的时间信息。 XlogRemoveSegLock 保护Xlog段文件的回收操作。 DnUsedSpaceHashLock 用于更新会话对应的空间使用信息。 CsnMinLock 用于计算CSNmin。 GPCCommitLock 用于保护全局Plan Cache hash表的添加操作。当前特性是实验室特性,使用时请联系华为工程师提供技术支持。 GPCClearLock 用于保护全局Plan Cache hash表的清除操作。当前特性是实验室特性,使用时请联系华为工程师提供技术支持。 GPCTimelineLock 用于保护全局Plan Cache hash表检查Timeline的操作。当前特性是实验室特性,使用时请联系华为工程师提供技术支持。 TsTagsCacheLock 用于时序tag缓存管理。 InstanceRealTLock 用于保护共享实例统计信息hash表的更新操作。 CLogBufMappingLock 用于提交日志缓存管理。 GPCMappingLock 用于全局Plan Cache缓存管理。当前特性是实验室特性,使用时请联系华为工程师提供技术支持。 GPCPrepareMappingLock 用于全局Plan Cache缓存管理。当前特性是实验室特性,使用时请联系华为工程师提供技术支持。 BufferIOLock 保护共享缓冲区页面的IO操作。 BufferContentLock 保护共享缓冲区页面内容的读取、修改。 CSNLOG Ctl 用于CSN日志管理。 DoubleWriteLock 用于双写的管理操作。 RowPageReplicationLock 用于管理行存储的数据页复制。 MatviewSeqnoLock 用于物化视图缓存管理。 GPRCMappingLock 用于管理自治事务全局缓存hash表的访问和修改操作。 extension 其他轻量锁。 StartBlockMappingLock globalstat从pgstat获取startblockarray等信息 PldebugLock 用于存储过程调试并发维护操作 wait active statement 等待作业执行,正在资源负载管控中。 wait memory 等待内存获取。 IOStatLock 用于资源管理IO统计信息哈希表并发维护操作。 gtt_shared_ctl 用户维护全局临时表共享哈希表并发读写 当wait_status值为wait io时对应的wait_event等待事件类型与描述信息如下。 表4 IO等待事件列表 wait_event类型 类型描述 BufFileRead 从临时文件中读取数据到指定buffer。 BufFileWrite 向临时文件中写入指定buffer中的内容。 ControlFileRead 读取pg_control文件。主要在数据库启动、执行checkpoint和主备校验过程中发生。 ControlFileSync 将pg_control文件持久化到磁盘。数据库初始化时发生。 ControlFileSyncUpdate 将pg_control文件持久化到磁盘。主要在数据库启动、执行checkpoint和主备校验过程中发生。 ControlFileWrite 写入pg_control文件。数据库初始化时发生。 ControlFileWriteUpdate 更新pg_control文件。主要在数据库启动、执行checkpoint和主备校验过程中发生。 CopyFileRead copy文件时读取文件内容。 CopyFileWrite copy文件时写入文件内容。 DataFileExtend 扩展文件时向文件写入内容。 DataFileFlush 将表数据文件持久化到磁盘 DataFileImmediateSync 将表数据文件立即持久化到磁盘。 DataFilePrefetch 异步读取表数据文件。 DataFileRead 同步读取表数据文件。 DataFileSync 将表数据文件的修改持久化到磁盘。 DataFileTruncate 表数据文件truncate。 DataFileWrite 向表数据文件写入内容。 LockFileAddToDataDirRead 读取“postmaster.pid”文件。 LockFileAddToDataDirSync 将“postmaster.pid”内容持久化到磁盘。 LockFileAddToDataDirWrite 将pid信息写到“postmaster.pid”文件。 LockFileCreateRead 读取LockFile文件“%s.lock”。 LockFileCreateSync 将LockFile文件“%s.lock”内容持久化到磁盘。 LockFileCreateWRITE 将pid信息写到LockFile文件“%s.lock”。 RelationMapRead 读取系统表到存储位置之间的映射文件 RelationMapSync 将系统表到存储位置之间的映射文件持久化到磁盘。 RelationMapWrite 写入系统表到存储位置之间的映射文件。 ReplicationSlotRead 读取流复制槽文件。重新启动时发生。 ReplicationSlotRestoreSync 将流复制槽文件持久化到磁盘。重新启动时发生。 ReplicationSlotSync checkpoint时将流复制槽临时文件持久化到磁盘。 ReplicationSlotWrite checkpoint时写流复制槽临时文件。 SLRUFlushSync 将pg_clog、pg_subtrans和pg_multixact文件持久化到磁盘。主要在执行checkpoint和数据库停机时发生。 SLRURead 读取pg_clog、pg_subtrans和pg_multixact文件。 SLRUSync 将脏页写入文件pg_clog、pg_subtrans和pg_multixact并持久化到磁盘。主要在执行checkpoint和数据库停机时发生。 SLRUWrite 写入pg_clog、pg_subtrans和pg_multixact文件。 TimelineHistoryRead 读取timeline history文件。在数据库启动时发生。 TimelineHistorySync 将timeline history文件持久化到磁盘。在数据库启动时发生。 TimelineHistoryWrite 写入timeline history文件。在数据库启动时发生。 TwophaseFileRead 读取pg_twophase文件。在两阶段事务提交、两阶段事务恢复时发生。 TwophaseFileSync 将pg_twophase文件持久化到磁盘。在两阶段事务提交、两阶段事务恢复时发生。 TwophaseFileWrite 写入pg_twophase文件。在两阶段事务提交、两阶段事务恢复时发生。 WALBootstrapSync 将初始化的WAL文件持久化到磁盘。在数据库初始化发生。 WALBootstrapWrite 写入初始化的WAL文件。在数据库初始化发生。 WALCopyRead 读取已存在的WAL文件并进行复制时产生的读操作。在执行归档恢复完后发生。 WALCopySync 将复制的WAL文件持久化到磁盘。在执行归档恢复完后发生。 WALCopyWrite 读取已存在WAL文件并进行复制时产生的写操作。在执行归档恢复完后发生。 WALInitSync 将新初始化的WAL文件持久化磁盘。在日志回收或写日志时发生。 WALInitWrite 将新创建的WAL文件初始化为0。在日志回收或写日志时发生。 WALRead 从xlog日志读取数据。两阶段文件redo相关的操作产生。 WALSyncMethodAssign 将当前打开的所有WAL文件持久化到磁盘。 WALWrite 写入WAL文件。 WALBufferAccess WAL Buffer访问(出于性能考虑,内核代码里只统计访问次数,未统计其访问耗时)。 WALBufferFull WAL Buffer满时,写wal文件相关的处理。 DoubleWriteFileRead 双写 文件读取。 DoubleWriteFileSync 双写 文件强制刷盘。 DoubleWriteFileWrite 双写 文件写入。 PredoProcessPending 并行日志回放中当前记录回放等待其它记录回放完成。 PredoApply 并行日志回放中等待当前工作线程等待其他线程回放至本线程LSN。 DisableConnectFileRead HA锁分片逻辑文件读取。 DisableConnectFileSync HA锁分片逻辑文件强制刷盘。 DisableConnectFileWrite HA锁分片逻辑文件写入。 当wait_status值为acquire lock(事务锁)时对应的wait_event等待事件类型与描述信息如下。 表5 事务锁等待事件列表 wait_event类型 类型描述 relation 对表加锁。 extend 对表扩展空间时加锁。 partition 对分区表加锁。 partition_seq 对分区表的分区加锁。 page 对表页面加锁。 tuple 对页面上的tuple加锁。 transactionid 对事务ID加锁。 virtualxid 对虚拟事务ID加锁。 object 加对象锁。 cstore_freespace 对列存空闲空间加锁。 userlock 加用户锁。 advisory 加advisory锁。 父主题: 系统视图
  • SUMMARY_STAT_SYS_INDEXES 数据库内汇聚pg_catalog、information_schema以及pg_toast模式中所有系统表的索引状态信息。 表1 SUMMARY_STAT_SYS_INDEXES字段 名称 类型 描述 schemaname name 索引中模式名。 relname name 索引的表名。 indexrelname name 索引名。 idx_scan numeric 索引上开始的索引扫描数。 idx_tup_read numeric 通过索引上扫描返回的索引项数。 idx_tup_fetch numeric 通过使用索引的简单索引扫描抓取的活表行数。 父主题: Object
  • STAT_SYS_INDEXES 显示pg_catalog、information_schema以及pg_toast模式中所有系统表的索引状态信息。 表1 STAT_SYS_INDEXES字段 名称 类型 描述 relid oid 此索引的表的OID。 indexrelid oid 索引的OID。 schemaname name 索引的模式名。 relname name 索引的表名。 indexrelname name 索引名。 idx_scan bigint 索引上开始的索引扫描数。 idx_tup_read bigint 通过索引上扫描返回的索引项数。 idx_tup_fetch bigint 通过使用索引的简单索引扫描抓取的活表行数。 父主题: Object
  • SUMMARY_STAT_SYS_TABLES 数据库内汇聚pg_catalog、information_schema以及pg_toast模式下所有系统表的统计信息。 表1 SUMMARY_STAT_SYS_TABLES字段 名称 类型 描述 schemaname name 此表的模式名。 relname name 表名。 seq_scan numeric 此表发起的顺序扫描数。 seq_tup_read numeric 顺序扫描抓取的活跃行数。 idx_scan numeric 此表发起的索引扫描数。 idx_tup_fetch numeric 索引扫描抓取的活跃行数。 n_tup_ins numeric 插入行数。 n_tup_upd numeric 更新行数。 n_tup_del numeric 删除行数。 n_tup_hot_upd numeric HOT更新行数(比如没有更新所需的单独索引)。 n_live_tup numeric 估计活跃行数。 n_dead_tup numeric 估计死行数。 last_vacuum timestamp with time zone 最后一次此表是手动清理的(不计算VACUUM FULL)时间。 last_autovacuum timestamp with time zone 上次被autovacuum守护进程清理的时间。 last_analyze timestamp with time zone 上次手动分析这个表的时间。 last_autoanalyze timestamp with time zone 上次被autovacuum守护进程分析的时间。 vacuum_count numeric 这个表被手动清理的次数(不计算VACUUM FULL)。 autovacuum_count numeric 这个表被autovacuum清理的次数。 analyze_count numeric 这个表被手动分析的次数。 autoanalyze_count numeric 这个表被autovacuum守护进程分析的次数。 父主题: Object
  • STAT_SYS_TABLES 显示单节点内pg_catalog、information_schema以及pg_toast模式下所有系统表的统计信息。 表1 STAT_SYS_TABLES字段 名称 类型 描述 relid oid 表的OID。 schemaname name 该表的模式名。 relname name 表名。 seq_scan bigint 该表发起的顺序扫描数。 seq_tup_read bigint 顺序扫描抓取的活跃行数。 idx_scan bigint 该表发起的索引扫描数。 idx_tup_fetch bigint 索引扫描抓取的活跃行数。 n_tup_ins bigint 插入行数。 n_tup_upd bigint 更新行数。 n_tup_del bigint 删除行数。 n_tup_hot_upd bigint HOT更新行数(比如没有更新所需的单独索引)。 n_live_tup bigint 估计活跃行数。 n_dead_tup bigint 估计死行数。 last_vacuum timestamp with time zone 最后一次该表是手动清理的(不计算VACUUM FULL)时间。 last_autovacuum timestamp with time zone 上次被autovacuum守护进程清理的时间。 last_analyze timestamp with time zone 上次手动分析该表的时间。 last_autoanalyze timestamp with time zone 上次被autovacuum守护进程分析的时间。 vacuum_count bigint 这个表被手动清理的次数(不计算VACUUM FULL)。 autovacuum_count bigint 该表被autovacuum清理的次数。 analyze_count bigint 该表被手动分析的次数。 autoanalyze_count bigint 该表被autovacuum守护进程分析的次数。 父主题: Object
  • GLOBAL_STAT_USER_INDEXES 得到各节点数据库中用户自定义普通表的索引状态信息。 表1 GLOBAL_STAT_USER_INDEXES字段 名称 类型 描述 node_name name 节点名称。 relid oid 这个索引的表的OID。 indexrelid oid 索引的OID。 schemaname name 索引中模式名。 relname name 索引的表名。 indexrelname name 索引名。 idx_scan bigint 索引上开始的索引扫描数。 idx_tup_read bigint 通过索引上扫描返回的索引项数。 idx_tup_fetch bigint 通过使用索引的简单索引扫描抓取的活表行数。 父主题: Object
  • SUMMARY_STAT_USER_INDEXES 数据库内汇聚所有数据库中用户自定义普通表的索引状态信息。 表1 SUMMARY_STAT_USER_INDEXES字段 名称 类型 描述 schemaname name 索引中模式名。 relname name 索引的表名。 indexrelname name 索引名。 idx_scan numeric 索引上开始的索引扫描数。 idx_tup_read numeric 通过索引上扫描返回的索引项数。 idx_tup_fetch numeric 通过使用索引的简单索引扫描抓取的活表行数。 父主题: Object
  • 示例 1 2 3 4 5 6 7 8 91011121314 --创建jack用户。CREATE USER jack PASSWORD 'Bigdata123@';--删除用户jack在数据库template1上的所有连接。CLEAN CONNECTION TO ALL FOR DATABASE template1 TO USER jack;--删除用户jack的所有连接。CLEAN CONNECTION TO ALL TO USER jack;--删除在数据库gaussdb上的所有连接。CLEAN CONNECTION TO ALL FORCE FOR DATABASE gaussdb;--删除用户jack。DROP USER jack;
  • 参数说明 CHECK 仅在节点列表为TO ALL时可以指定。如果指定该参数,会在清理连接之前检查数据库是否被其他会话连接访问。此参数主要用于DROP DATABASE之前的连接访问检查,如果发现有其他会话连接,则将报错并停止删除数据库。 FORCE 仅在节点列表为TO ALL时可以指定,如果指定该参数,所有和指定dbname和username相关的线程都会收到SIGTERM信号,然后被强制关闭。 COORDINATOR ( nodename [, ... ] ) | NODE ( nodename [, ... ] ) | ALL 仅支持TO ALL,必须指定该参数,节点上的指定连接会被全部删除。 dbname 删除指定数据库上的连接。如果不指定,则删除所有数据库的连接。 取值范围:已存在数据库名。 username 删除指定用户上的连接。如果不指定,则删除所有用户的连接。 取值范围:已存在的用户。
  • 示例 --创建字段spcname为pg_default组成的视图。openGauss=# CREATE VIEW myView AS SELECT * FROM pg_tablespace WHERE spcname = 'pg_default';--查看视图。openGauss=# SELECT * FROM myView ;--删除视图myView。openGauss=# DROP VIEW myView;
  • 语法格式 CREATE [ OR REPLACE ] [ TEMP | TEMPORARY ] VIEW view_name [ ( column_name [, ...] ) ] [ WITH ( {view_option_name [= view_option_value]} [, ... ] ) ] AS query; 创建视图时使用WITH(security_barrier)可以创建一个相对安全的视图,避免攻击者利用低成本函数的RAISE语句打印出隐藏的基表数据。 当视图创建后,不允许使用REPLACE修改本视图当中的列名,也不允许删除列。
  • 参数说明 OR REPLACE 如果视图已存在,则重新定义。 TEMP | TEMPORARY 创建临时视图。 view_name 要创建的视图名称。可以用模式修饰。 取值范围:字符串,符合标识符命名规范。 column_name 可选的名称列表,用作视图的字段名。如果没有给出,字段名取自查询中的字段名。 取值范围:字符串,符合标识符命名规范。 view_option_name [= view_option_value] 该子句为视图指定一个可选的参数。 目前view_option_name支持的参数仅有security_barrier,当VIEW试图提供行级安全时,应使用该参数。 取值范围:Boolean类型,TRUE、FALSE query 为视图提供行和列的SELECT或VALUES语句。 若query包含指定分区表分区的子句,创建视图会将所指定分区的OID硬编码到系统表中。如果使用导致指定分区的OID发生变更的分区DDL语法,如DROP/SPLIT/MERGE该分区,则会导致视图不可用。需要重新创建视图。
  • SUMMARY_STAT_USER_TABLES 数据库内汇聚所有命名空间中用户自定义普通表的状态信息。 表1 SUMMARY_STAT_USER_TABLES 名称 类型 描述 schemaname name 此表的模式名。 relname name 表名。 seq_scan numeric 此表发起的顺序扫描数。 seq_tup_read numeric 顺序扫描抓取的活跃行数。 idx_scan numeric 此表发起的索引扫描数。 idx_tup_fetch numeric 索引扫描抓取的活跃行数。 n_tup_ins numeric 插入行数。 n_tup_upd numeric 更新行数。 n_tup_del numeric 删除行数。 n_tup_hot_upd numeric HOT更新行数(即没有更新所需的单独索引)。 n_live_tup numeric 估计活跃行数。 n_dead_tup numeric 估计死行数。 last_vacuum timestamp with time zone 最后一次此表是手动清理的(不计算VACUUM FULL)时间。 last_autovacuum timestamp with time zone 上次被autovacuum守护进程清理的时间。 last_analyze timestamp with time zone 上次手动分析这个表的时间。 last_autoanalyze timestamp with time zone 上次被autovacuum守护进程分析的时间。 vacuum_count numeric 这个表被手动清理的次数(不计算VACUUM FULL)。 autovacuum_count numeric 这个表被autovacuum清理的次数。 analyze_count numeric 这个表被手动分析的次数。 autoanalyze_count numeric 这个表被autovacuum守护进程分析的次数。 父主题: Object
  • 注意事项 当在OPTIONS中出现password选项时,需要保证GaussDB每个节点的$GAUSSHOME/bin目录下存在usermapping.key.cipher和usermapping.key.rand文件,如果不存在这两个文件,请使用gs\_guc工具生成并使用gs\_ssh工具发布到GaussDB每个节点的$GAUSSHOME/bin目录下。 OPTIONS中的敏感字段(如passowrd)在使用多层引号时,语义和不带引号的场景是不同的,因此不会被识别为敏感字段进行脱敏。
  • 参数说明 user_name 要映射到外部服务器的一个现有用户的名称。 CURRENT_USER和USER匹配当前用户的名称。 当PUBLIC被指定时,一个公共映射会被创建,当没有特定用户的映射可用时将会使用它。 server_name 将为其创建用户映射的现有服务器的名称。 OPTIONS ( { option_name ' value ' } [, ...] ) 这个子句指定用户映射的选项。这些选项通常定义该映射实际的用户名和口令。选项名必须唯一。允许的选项名和值与该服务器的外部数据包装器有关。 用户的口令会加密后保存到系统表PG_USER_MAPPING中,加密时需要使用usermapping.key.cipher和usermapping.key.rand作为加密密码文件和加密因子。首次使用前需要通过如下命令创建这两个文件,并将这两个文件放入各节点目录$GAUSSHOME/bin,且确保具有读权限。gs_ssh工具可以协助您快速将文件放入各节点对应目录下。 gs_ssh -c "gs_guc generate -o usermapping -S default -D $GAUSSHOME/bin" 其中-S参数指定default时会随机生成密码,用户也可为-S参数指定密码,此密码用于保证生成密码文件的安全性和唯一性,用户无需保存或记忆。其他参数详见工具参考中gs_guc工具说明。
  • 语法格式 创建表。 CREATE [ [ GLOBAL | LOCAL ] [ TEMPORARY | TEMP ] | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name ({ column_name data_type [ compress_mode ] [ COLLATE collation ] [ column_constraint [ ... ] ] | table_constraint | LIKE source_table [ like_option [...] ] } [, ... ]) [ WITH ( {storage_parameter = value} [, ... ] ) ] [ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ] [ COMPRESS | NOCOMPRESS ] [ TABLESPACE tablespace_name ]; 其中列约束column_constraint为: [ CONSTRAINT constraint_name ]{ NOT NULL | NULL | CHECK ( expression ) | DEFAULT default_expr | GENERATED ALWAYS AS ( generation_expr ) STORED | UNIQUE index_parameters | ENCRYPTED WITH ( COLUMN_ENCRYPTION_KEY = column_encryption_key, ENCRYPTION_TYPE = encryption_type_value ) | PRIMARY KEY index_parameters | REFERENCES reftable [ ( refcolumn ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE action ] [ ON UPDATE action ] }[ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ] 其中列的压缩可选项compress_mode为: { DELTA | PREFIX | DICTIONARY | NUMSTR | NOCOMPRESS } 其中表约束table_constraint为: [ CONSTRAINT constraint_name ]{ CHECK ( expression ) | UNIQUE ( column_name [, ... ] ) index_parameters | PRIMARY KEY ( column_name [, ... ] ) index_parameters | FOREIGN KEY ( column_name [, ... ] ) REFERENCES reftable [ (refcolumn [, ... ] ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE action ] [ ON UPDATE action ] | PARTIAL CLUSTER KEY ( column_name [, ... ] ) }[ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ] 其中like选项like_option为: { INCLUDING | EXCLUDING } { DEFAULTS | GENERATED | CONSTRAINTS | INDEXES | STORAGE | COMMENTS | PARTITION | RELOPTIONS | ALL } 其中索引参数index_parameters为: [ WITH ( {storage_parameter = value} [, ... ] ) ][ USING INDEX TABLESPACE tablespace_name ]
  • 注意事项 列存表支持的数据类型请参考列存表支持的数据类型。 列存表不支持数组。 列存表不支持生成列。 列存表不支持创建全局临时表。 创建列存表的数量建议不超过1000个。 如果在建表过程中数据库系统发生故障,系统恢复后可能无法自动清除之前已创建的、大小为0的磁盘文件。此种情况出现概率小,不影响数据库系统的正常运行。 列存表的表级约束只支持PARTIAL CLUSTER KEY、UNIQUE、PRIAMRY KEY,不支持外键等表级约束。 列存表的字段约束只支持NULL、NOT NULL和DEFAULT常量值、UNIQUE和PRIMARY KEY。 列存表支持delta表,受参数enable_delta_store控制是否开启,受参数deltarow_threshold控制进入delta表的阀值。 使用JDBC时,支持通过PrepareStatement对DEFAULT值进行参数化设置。 被授予CREATE ANY TABLE权限的用户,可以在public模式和用户模式下创建表。如果想要创建包含serial类型列的表,还需要授予CREATE ANY SEQUENCE创建序列的权限。
  • 优化建议 UNLOGGED UNLOGGED表和表上的索引因为数据写入时不通过WAL日志机制,写入速度远高于普通表。因此,可以用于缓冲存储复杂查询的中间结果集,增强复杂查询的性能。 UNLOGGED表无主备机制,在系统故障或异常断点等情况下,会有数据丢失风险,因此,不可用来存储基础数据。 TEMPORARY | TEMP 临时表只在当前会话可见,会话结束后会自动删除。 LIKE 新表自动从这个表中继承所有字段名及其数据类型和非空约束,新表与源表之间在创建动作完毕之后是完全无关的。 LIKE INCLUDING DEFAULTS 源表上的字段缺省表达式只有在指定INCLUDING DEFAULTS时,才会复制到新表中。缺省是不包含缺省表达式的,即新表中的所有字段的缺省值都是NULL。 LIKE INCLUDING CONSTRAINTS 源表上的CHECK约束仅在指定INCLUDING CONSTRAINTS时,会复制到新表中,而其他类型的约束永远不会复制到新表中。非空约束总是复制到新表中。此规则同时适用于表约束和列约束。 LIKE INCLUDING INDEXES 如果指定了INCLUDING INDEXES,则源表上的索引也将在新表上创建,默认不建立索引。 LIKE INCLUDING STORAGE 如果指定了INCLUDING STORAGE,则复制列的STORAGE设置会复制到新表中,默认情况下不包含STORAGE设置。 LIKE INCLUDING COMMENTS 如果指定了INCLUDING COMMENTS,则源表列、约束和索引的注释会复制到新表中。默认情况下,不复制源表的注释。 LIKE INCLUDING PARTITION 如果指定了INCLUDING PARTITION,则源表的分区定义会复制到新表中,同时新表将不能再使用PARTITION BY子句。默认情况下,不拷贝源表的分区定义。 列表/哈希分区表暂不支持LIKE INCLUDING PARTITION。 LIKE INCLUDING RELOPTIONS 如果指定了INCLUDING RELOPTIONS,则源表的存储参数(即源表的WITH子句)会复制到新表中。默认情况下,不复制源表的存储参数。 LIKE INCLUDING ALL INCLUDING ALL包含了INCLUDING DEFAULTS、INCLUDING CONSTRAINTS、INCLUDING INDEXES、INCLUDING STORAGE、INCLUDING COMMENTS、INCLUDING PARTITION、INCLUDING RELOPTIONS的内容。 ORIENTATION ROW 创建行存表,行存储适合于OLTP业务,此类型的表上交互事务比较多,一次交互会涉及表中的多个列,用行存查询效率较高。 ORIENTATION COLUMN 创建列存表,列存储适合于数据仓库业务,此类型的表上会做大量的汇聚计算,且涉及的列操作较少。
  • 语法格式 CREATE USER user_name [ [ WITH ] option [ ... ] ] [ ENCRYPTED | UNENCRYPTED ] { PASSWORD | IDENTIFIED BY } { 'password' [EXPIRED] | DISABLE }; 其中option子句用于设置权限及属性等信息。 {SYSADMIN | NOSYSADMIN} | {MONADMIN | NOMONADMIN} | {OPRADMIN | NOOPRADMIN} | {POLADMIN | NOPOLADMIN} | {AUDITADMIN | NOAUDITADMIN} | {CREATEDB | NOCREATEDB} | {USEFT | NOUSEFT} | {CREATEROLE | NOCREATEROLE} | {INHERIT | NOINHERIT} | {LOGIN | NOLOGIN} | {REPLICATION | NOREPLICATION} | {INDEPENDENT | NOINDEPENDENT} | {VCADMIN | NOVCADMIN} | {PERSISTENCE | NOPERSISTENCE} | CONNECTION LIMIT connlimit | VALID BEGIN 'timestamp' | VALID UNTIL 'timestamp' | RESOURCE POOL 'respool' | USER GROUP 'groupuser' | PERM SPACE 'spacelimit' | TEMP SPACE 'tmpspacelimit' | SPILL SPACE 'spillspacelimit' | NODE GROUP logic_cluster_name | IN ROLE role_name [, ...] | IN GROUP role_name [, ...] | ROLE role_name [, ...] | ADMIN role_name [, ...] | USER role_name [, ...] | SYSID uid | DEFAULT TABLESPACE tablespace_name | PROFILE DEFAULT | PROFILE profile_name | PGUSER
  • 示例 --创建用户jim,登录密码为xxxxxxxxx。openGauss=# CREATE USER jim PASSWORD 'xxxxxxxxx';--下面语句与上面的等价。openGauss=# CREATE USER kim IDENTIFIED BY 'xxxxxxxxx';--如果创建有“创建数据库”权限的用户,则需要加CREATEDB关键字。openGauss=# CREATE USER dim CREATEDB PASSWORD 'xxxxxxxxx';--将用户jim的登录密码由xxxxxxxxx修改为Abcd@123。openGauss=# ALTER USER jim IDENTIFIED BY 'Abcd@123' REPLACE 'xxxxxxxxx';--为用户jim追加CREATEROLE权限。openGauss=# ALTER USER jim CREATEROLE;--将enable_seqscan的值设置为on, 设置成功后,在下一会话中生效。openGauss=# ALTER USER jim SET enable_seqscan TO on;--重置jim的enable_seqscan参数。openGauss=# ALTER USER jim RESET enable_seqscan;--锁定jim帐户。openGauss=# ALTER USER jim ACCOUNT LOCK;--删除用户。openGauss=# DROP USER kim CASCADE;openGauss=# DROP USER jim CASCADE;openGauss=# DROP USER dim CASCADE;
  • 语法格式 CREATE [ CONSTRAINT ] TRIGGER trigger_name { BEFORE | AFTER | INSTEAD OF } { event [ OR ... ] } ON table_name [ FROM referenced_table_name ] { NOT DEFERRABLE | [ DEFERRABLE ] { INITIALLY IMMEDIATE | INITIALLY DEFERRED } } [ FOR [ EACH ] { ROW | STATEMENT } ] [ WHEN ( condition ) ] EXECUTE PROCEDURE function_name ( arguments ); 其中event包含以下几种: INSERT UPDATE [ OF column_name [, ... ] ] DELETE TRUNCATE
  • 参数说明 CONSTRAINT 可选项,指定此参数将创建约束触发器,即触发器作为约束来使用。除了可以使用SET CONSTRAINTS调整触发器触发的时间之外,这与常规触发器相同。 约束触发器必须是AFTER ROW触发器。 trigger_name 触发器名称,该名称不能限定模式,因为触发器自动继承其所在表的模式,且同一个表的触发器不能重名。 对于约束触发器,使用SET CONSTRAINTS修改触发器行为时也使用此名称。 取值范围:符合标识符命名规范的字符串,且最大长度不超过63个字符。 BEFORE 触发器函数是在触发事件发生前执行。 AFTER 触发器函数是在触发事件发生后执行,约束触发器只能指定为AFTER。 INSTEAD OF 触发器函数直接替代触发事件。 event 启动触发器的事件,取值范围包括:INSERT、UPDATE、DELETE或TRUNCATE,也可以通过OR同时指定多个触发事件。 对于UPDATE事件类型,可以使用下面语法指定列: UPDATE OF column_name1 [, column_name2 ... ] 表示当这些列作为UPDATE语句的目标列时,才会启动触发器,但是INSTEAD OF UPDATE类型不支持指定列信息。如果UPDATE OF指定的列包含生成列,当生成列依赖的列是UPDATE语句的目标列时,也会启动触发器。 table_name 需要创建触发器的表名称。 取值范围:数据库中已经存在的表名称。 referenced_table_name 约束引用的另一个表的名称。 只能为约束触发器指定,常见于外键约束。 取值范围:数据库中已经存在的表名称。 DEFERRABLE | NOT DEFERRABLE 约束触发器的启动时机,仅作用于约束触发器。这两个关键字设置该约束是否可推迟。 详细介绍请参见CREATE TABLE。 INITIALLY IMMEDIATE | INITIALLY DEFERRED 如果约束是可推迟的,则这个子句声明检查约束的缺省时间,仅作用于约束触发器。 详细介绍请参见CREATE TABLE。 FOR EACH ROW | FOR EACH STATEMENT 触发器的触发频率。 FOR EACH ROW是指该触发器是受触发事件影响的每一行触发一次。 FOR EACH STATEMENT是指该触发器是每个SQL语句只触发一次。 未指定时默认值为FOR EACH STATEMENT。约束触发器只能指定为FOR EACH ROW。 condition 决定是否实际执行触发器函数的条件表达式。当指定WHEN时,只有在条件返回true时才会调用该函数。 在FOR EACH ROW触发器中,WHEN条件可以通过分别写入OLD.column_name或NEW.column_name来引用旧行或新行值的列。 当然,INSERT触发器不能引用OLD和DELETE触发器不能引用NEW。 INSTEAD OF触发器不支持WHEN条件。 WHEN表达式不能包含子查询。 对于约束触发器,WHEN条件的评估不会延迟,而是在执行更新操作后立即发生。 如果条件返回值不为true,则触发器不会排队等待延迟执行。 function_name 用户定义的函数,必须声明为不带参数并返回类型为触发器,在触发器触发时执行。 arguments 执行触发器时要提供给函数的可选的以逗号分隔的参数列表。参数是文字字符串常量,简单的名称和数字常量也可以写在这里,但它们都将被转换为字符串。 请检查触发器函数的实现语言的描述,以了解如何在函数内访问这些参数。 关于触发器种类: INSTEAD OF的触发器必须标记为FOR EACH ROW,并且只能在视图上定义。 BEFORE和AFTER触发器作用在视图上时,只能标记为FOR EACH STATEMENT。 TRUNCATE类型触发器仅限FOR EACH STATEMENT。 表1 表和视图上支持的触发器种类: 触发时机 触发事件 行级 语句级 BEFORE INSERT/UPDATE/DELETE 表 表和视图 TRUNCATE 不支持 表 AFTER INSERT/UPDATE/DELETE 表 表和视图 TRUNCATE 不支持 表 INSTEAD OF INSERT/UPDATE/DELETE 视图 不支持 TRUNCATE 不支持 不支持 表2 PLPGSQL类型触发器函数特殊变量: 变量名 变量含义 NEW INSERT及UPDATE操作涉及tuple信息中的新值,对DELETE为空。 OLD UPDATE及DELETE操作涉及tuple信息中的旧值,对INSERT为空。 TG_NAME 触发器名称。 TG_WHEN 触发器触发时机(BEFORE/AFTER/INSTEAD OF)。 TG_LEVEL 触发频率(ROW/STATEMENT)。 TG_OP 触发操作(INSERT/UPDATE/DELETE/TRUNCATE)。 TG_RELID 触发器所在表OID。 TG_RELNAME 触发器所在表名(已废弃,现用TG_TABLE_NAME替代)。 TG_TABLE_NAME 触发器所在表名。 TG_TABLE_SCHEMA 触发器所在表的SCHEMA信息。 TG_NARGS 触发器函数参数个数。 TG_ARGV[] 触发器函数参数列表。
  • 示例 --创建源表及触发表openGauss=# CREATE TABLE test_trigger_src_tbl(id1 INT, id2 INT, id3 INT);openGauss=# CREATE TABLE test_trigger_des_tbl(id1 INT, id2 INT, id3 INT);--创建触发器函数openGauss=# CREATE OR REPLACE FUNCTION tri_insert_func() RETURNS TRIGGER AS $$ DECLARE BEGIN INSERT INTO test_trigger_des_tbl VALUES(NEW.id1, NEW.id2, NEW.id3); RETURN NEW; END $$ LANGUAGE PLPGSQL;openGauss=# CREATE OR REPLACE FUNCTION tri_update_func() RETURNS TRIGGER AS $$ DECLARE BEGIN UPDATE test_trigger_des_tbl SET id3 = NEW.id3 WHERE id1=OLD.id1; RETURN OLD; END $$ LANGUAGE PLPGSQL;openGauss=# CREATE OR REPLACE FUNCTION TRI_DELETE_FUNC() RETURNS TRIGGER AS $$ DECLARE BEGIN DELETE FROM test_trigger_des_tbl WHERE id1=OLD.id1; RETURN OLD; END $$ LANGUAGE PLPGSQL;--创建INSERT触发器openGauss=# CREATE TRIGGER insert_trigger BEFORE INSERT ON test_trigger_src_tbl FOR EACH ROW EXECUTE PROCEDURE tri_insert_func();--创建UPDATE触发器openGauss=# CREATE TRIGGER update_trigger AFTER UPDATE ON test_trigger_src_tbl FOR EACH ROW EXECUTE PROCEDURE tri_update_func();--创建DELETE触发器openGauss=# CREATE TRIGGER delete_trigger BEFORE DELETE ON test_trigger_src_tbl FOR EACH ROW EXECUTE PROCEDURE tri_delete_func();--执行INSERT触发事件并检查触发结果openGauss=# INSERT INTO test_trigger_src_tbl VALUES(100,200,300);openGauss=# SELECT * FROM test_trigger_src_tbl;openGauss=# SELECT * FROM test_trigger_des_tbl; //查看触发操作是否生效。--执行UPDATE触发事件并检查触发结果openGauss=# UPDATE test_trigger_src_tbl SET id3=400 WHERE id1=100;openGauss=# SELECT * FROM test_trigger_src_tbl;openGauss=# SELECT * FROM test_trigger_des_tbl; //查看触发操作是否生效--执行DELETE触发事件并检查触发结果openGauss=# DELETE FROM test_trigger_src_tbl WHERE id1=100;openGauss=# SELECT * FROM test_trigger_src_tbl;openGauss=# SELECT * FROM test_trigger_des_tbl; //查看触发操作是否生效--修改触发器openGauss=# ALTER TRIGGER delete_trigger ON test_trigger_src_tbl RENAME TO delete_trigger_renamed;--禁用insert_trigger触发器openGauss=# ALTER TABLE test_trigger_src_tbl DISABLE TRIGGER insert_trigger; --禁用当前表上所有触发器openGauss=# ALTER TABLE test_trigger_src_tbl DISABLE TRIGGER ALL; --删除触发器openGauss=# DROP TRIGGER insert_trigger ON test_trigger_src_tbl;openGauss=# DROP TRIGGER update_trigger ON test_trigger_src_tbl;openGauss=# DROP TRIGGER delete_trigger_renamed ON test_trigger_src_tbl;
  • 示例 --创建一种复合类型,建表并插入数据以及查询。openGauss=# CREATE TYPE compfoo AS (f1 int, f2 text);openGauss=# CREATE TABLE t1_compfoo(a int, b compfoo);openGauss=# CREATE TABLE t2_compfoo(a int, b compfoo);openGauss=# INSERT INTO t1_compfoo values(1,(1,'demo'));openGauss=# INSERT INTO t2_compfoo select * from t1_compfoo;openGauss=# SELECT (b).f1 FROM t1_compfoo;openGauss=# SELECT * FROM t1_compfoo t1 join t2_compfoo t2 on (t1.b).f1=(t1.b).f1;--重命名数据类型。openGauss=# ALTER TYPE compfoo RENAME TO compfoo1;--要改变一个用户定义类型compfoo1的所有者为usr1。openGauss=# CREATE USER usr1 PASSWORD 'xxxxxxxxx';openGauss=# ALTER TYPE compfoo1 OWNER TO usr1;--把用户定义类型compfoo1的模式改变为usr1。openGauss=# ALTER TYPE compfoo1 SET SCHEMA usr1;--给一个数据类型增加一个新的属性。openGauss=# ALTER TYPE usr1.compfoo1 ADD ATTRIBUTE f3 int;--删除compfoo1类型。openGauss=# DROP TYPE usr1.compfoo1 cascade;--删除相关表和用户。openGauss=# DROP TABLE t1_compfoo;openGauss=# DROP TABLE t2_compfoo;openGauss=# DROP SCHEMA usr1;openGauss=# DROP USER usr1;--创建一个枚举类型。openGauss=# CREATE TYPE bugstatus AS ENUM ('create', 'modify', 'closed');--添加一个标签值。openGauss=# ALTER TYPE bugstatus ADD VALUE IF NOT EXISTS 'regress' BEFORE 'closed';--重命名一个标签值。openGauss=# ALTER TYPE bugstatus RENAME VALUE 'create' TO 'new';--创建一个集合类型openGauss=# CREATE TYPE compfoo_table AS TABLE OF compfoo;
  • 功能描述 在当前数据库中定义一种新的数据类型。定义数据类型的用户将成为该数据类型的拥有者。类型只适用于行存表 有五种形式的CREATE TYPE,分别为:复合类型、基本类型、shell类型、枚举类型和集合类型。 复合类型 复合类型由一个属性名和数据类型的列表指定。如果属性的数据类型是可排序的,也可以指定该属性的排序规则。复合类型本质上和表的行类型相同,但是如果只想定义一种类型,使用CREATE TYPE避免了创建一个实际的表。单独的复合类型也是很有用的,例如可以作为函数的参数或者返回类型。 为了能够创建复合类型,必须拥有在其所有属性类型上的USAGE特权。 基本类型 用户可以自定义一种新的基本类型(标量类型)。通常来说这些函数必须是底层语言所编写。 shell类型 shell类型是一种用于后面要定义的类型的占位符,通过发出一个不带除类型名之外其他参数的CREATE TYPE命令可以创建这种类型。在创建基本类型时,需要shell类型作为一种向前引用。 枚举类型 由若干个标签构成的列表,每一个标签值都是一个非空字符串,且字符串长度必须不超过63个字节。 集合类型 类似数组,但是没有长度限制,主要在存储过程中使用。 被授予CREATE ANY TYPE权限的用户,可以在public模式和用户模式下创建类型。
  • 语法格式 CREATE TYPE name AS ( [ attribute_name data_type [ COLLATE collation ] [, ... ] ] )CREATE TYPE name ( INPUT = input_function, OUTPUT = output_function [ , RECEIVE = receive_function ] [ , SEND = send_function ] [ , TYPMOD_IN =type_modifier_input_function ] [ , TYPMOD_OUT =type_modifier_output_function ] [ , ANALYZE = analyze_function ] [ , INTERNALLENGTH = { internallength |VARIABLE } ] [ , PASSEDBYVALUE ] [ , ALIGNMENT = alignment ] [ , STORAGE = storage ] [ , LIKE = like_type ] [ , CATEGORY = category ] [ , PREFERRED = preferred ] [ , DEFAULT = default ] [ , ELEMENT = element ] [ , DELIMITER = delimiter ] [ , COLLATABLE = collatable ])CREATE TYPE nameCREATE TYPE name AS ENUM ( [ 'label' [, ... ] ] )CREATE TYPE name AS TABLE OF data_type
共100000条