华为云用户手册

  • 参数说明 IF EXISTS 如果指定的节点不存在,则发出一个notice而不是抛出一个错误。 nodename 要删除的节点名。 取值范围:已存在的节点nodename。 cnnodename CN名称。如果定义了该参数,则除当前连接CN外,还将在该节点上执行。否则,如果是删除DN,将在所有CN上执行;如果是删除CN,将在除待删除CN外所有CN上执行。 取值范围:已存在的CN的nodename。
  • PG_SHDESCRIPTION PG_SHDESCRIPTION系统表为共享数据库对象存储可选的注释。可以使用COMMENT命令操作注释的内容,使用\d命令查看注释内容。 PG_DESCRIPTION提供了类似的功能,它记录了单个数据库中对象的注释。 PG_SHDESCRIPTION是在集群的所有数据库之间共享的,即每个集群只有一个,而不是每个数据库一个。 表1 PG_SHDESCRIPTION字段 名称 类型 引用 描述 objoid oid 任意OID属性 所描述的对象的OID。 classoid oid PG_CLASS.oid 该对象出现的系统表的OID。 description text - 该对象的描述信息。 父主题: 系统表
  • DB_TRIGGERS DB_TRIGGERS视图显示当前用户能访问到的触发器的信息。该视图同时存在于PG_CATA LOG 和SYS Schema下。 表1 DB_TRIGGERS字段 名称 类型 描述 trigger_name character varying(64) 触发器名称。 table_owner character varying(64) 角色名称。 table_name character varying(64) 关系表名称。 status character varying(64) O:触发器在“origin”和“local”模式下触发。 D:触发器被禁用。 R:触发器在“replica”模式下触发。 A:触发器始终触发。 父主题: 系统视图
  • 操作步骤 以具有REPLICATION权限的用户登录 GaussDB 集群任一主机。 使用如下命令通过DN端口连接数据库。 gsql -U user1 -d gaussdb -p 40000 -r 其中,user1为用户名,gaussdb为需要连接的数据库名称,40000为数据库DN端口号,用户可根据实际情况替换。复制槽是建立在DN上的,因此需要通过DN端口连接数据库。 创建名称为slot1的逻辑复制槽。 1 2 3 4 5 openGauss=# SELECT * FROM pg_create_logical_replication_slot('slot1', 'mppdb_decoding'); slotname | xlog_position ----------+--------------- slot1 | 0/601C150 (1 row) 在数据库中创建表t,并向表t中插入数据。 1 2 openGauss=# CREATE TABLE t(a int PRIMARY KEY, b int); openGauss=# INSERT INTO t VALUES(3,3); 读取复制槽slot1解码结果,解码条数为4096。 1 2 3 4 5 6 7 8 9 10 openGauss=# SELECT * FROM pg_logical_slot_peek_changes('slot1', NULL, 4096); location | xid | data -----------+-------+------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------- 0/601C188 | 1010023 | BEGIN 1010023 0/601ED60 | 1010023 | COMMIT 1010023 CS N 1010022 0/601ED60 | 1010024 | BEGIN 1010024 0/601ED60 | 1010024 | {"table_name":"public.t","op_type":"INSERT","columns_name":["a","b"],"columns_type":["integer","integer"],"columns_val":["3","3"],"old_keys_name":[],"old_keys_type":[],"old_keys_val":[]} 0/601EED8 | 1010024 | COMMIT 1010024 CSN 1010023 (5 rows) 删除逻辑复制槽slot1。 1 2 3 4 5 openGauss=# SELECT * FROM pg_drop_replication_slot('slot1'); pg_drop_replication_slot -------------------------- (1 row)
  • 常用方法 表1 LogicalCreateSlotBuilder常用方法 返回值 方法 描述 throws T withSlotName(String slotName) 指定复制槽名。 - ChainedLogicalCreateSlotBuilder withOutputPlugin(String outputPlugin) 插件名称,当前支持mppdb_decoding。 - void make() 在数据库中创建具有指定参数的插槽。 SQLException ChainedLogicalCreateSlotBuilder self() - -
  • 背景信息 在ANALYZE | ANALYSE和VACUUM语句执行过程中,系统维护一个内部的记数器,跟踪所执行的各种I/O操作的近似开销。如果积累的开销达到了vacuum_cost_limit声明的限制,则执行这个操作的进程将睡眠vacuum_cost_delay指定的时间。然后它会重置记数器然后继续执行。 这个特性是缺省关闭的。要想打开它,把vacuum_cost_delay变量设置为一个非零值。
  • vacuum_cost_delay 参数说明:指定开销超过vacuum_cost_limit的值时,进程睡眠的时间。 要注意在许多系统上,睡眠的有效分辨率是10毫秒。因此把vacuum_cost_delay设置为一个不是10的整数倍的数值与将它设置为下一个10的整数倍作用相同。 此参数一般设置较小,常见的设置是10或20毫秒。调整此特性资源占用率时,建议调整其他参数,而不是此参数。 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:整型,0~100,正数值表示打开基于开销的清理延迟特性;0表示关闭基于开销的清理延迟特性。 默认值:
  • SUMMARY_FILE_IOSTAT 通过集群内对数据文件汇聚I/O的统计,反映数据的I/O性能,用以发现I/O操作异常等性能问题。 表1 SUMMARY_FILE_IOSTAT字段 名称 类型 描述 filenum oid 文件标识。 dbid oid 数据库标识。 spcid oid 表空间标识。 phyrds numeric 读物理文件的数目。 phywrts numeric 写物理文件的数目。 phyblkrd numeric 读物理文件块的数目。 phyblkwrt numeric 写物理文件块的数目。 readtim numeric 读文件的总时长(单位:微秒)。 writetim numeric 写文件的总时长(单位:微秒)。 avgiotim bigint 读写文件的平均时长(单位:微秒)。 lstiotim bigint 最后一次读文件时长(单位:微秒)。 miniotim bigint 读写文件的最小时长(单位:微秒)。 maxiowtm bigint 读写文件的最大时长(单位:微秒)。 父主题: File
  • 并行解码 以下配置选项仅限流式解码设置。 decode-style: 指定解码格式。 取值范围:char型的字符'j'、't'或'b',分别代表json格式,text格式及二进制格式。默认值为'b'即二进制格式解码。 对于json格式和text格式解码,开启批量发送选项时的解码结果中,每条解码语句的前4字节组成的uint32代表该条语句总字节数(不包含该uint32类型占用的4字节,0代表本批次解码结束),8字节uint64代表相应lsn(begin对应first_lsn,commit对应end_lsn,其他场景对应该条语句的lsn)。 二进制格式编码规则如下所示: 前4字节代表接下来到语句级别分隔符字母P(不含)或者该批次结束符F(不含)的解码结果的总字节数,该值如果为0代表本批次解码结束。 接下来8字节uint64代表相应lsn(begin对应first_lsn,commit对应end_lsn,其他场景对应该条语句的lsn)。 接下来1字节的字母有5种B/C/I/U/D,分别代表begin/commit/insert/update/delete。 第3.接下来1字节的字母有5种B/C/I/U/D,...步字母为B时。 接下来的8字节uint64代表CSN。 接下来的8字节uint64代表first_lsn。 【该部分为可选项】接下来的1字节字母如果为T,则代表后面4字节uint32表示该事务commit时间戳长度,再后面等同于该长度的字符为时间戳字符串。 【该部分为可选项】接下来的1字节字母如果为N,则代表后面4字节uint32表示该事务用户名的长度,再后面等同于该长度的字符为事务的用户名字。 因为之后仍可能有解码语句,接下来会有1字节字母P或F作为语句间的分隔符,P代表本批次仍有解码的语句,F代表本批次完成。 第3.接下来1字节的字母有5种B/C/I/U/D,...步字母为C时: 【该部分为可选项】接下来1字节字母如果为X,则代表后面的8字节uint64表示xid。 【该部分为可选项】接下来的1字节字母如果为T,则代表后面4字节uint32表示时间戳长度,再后面等同于该长度的字符为时间戳字符串。 因为批量发送日志时,一个COMMIT日志解码之后可能仍有其他事务的解码结果,接下来的1字节字母如果为P则表示该批次仍需解码,如果为F则表示该批次解码结束。 第3.接下来1字节的字母有5种B/C/I/U/D,...步字母为I/U/D时: 接下来的2字节uint16代表schema名的长度。 按照上述长度读取schema名。 接下来的2字节uint16代表table名的长度。 按照上述长度读取table名。 【该部分为可选项】接下来1字符字母如果为N代表为新元组,如果为O代表为旧元组,这里先发送新元组。 接下来的2字节uint16代表该元组需要解码的列数,记为attrnum。 以下流程重复attrnum次。 接下来2字节uint16代表列名的长度。 按照上述长度读取列名。 接下来4字节uint32代表当前列类型的Oid。 接下来4字节uint32代表当前列的值(以字符串格式存储)的长度,如果为0xFFFFFFFF则表示NULL,如果为0则表示长度为0的字符串。 按照上述长度读取列值。 因为之后仍可能有解码语句,接下来的1字节字母如果为P则表示该批次仍需解码,如果为F则表示该批次解码结束。 sending-batch: 指定是否批量发送。 取值范围:0或1的int型,默认值为0。 0:设为0时,表示逐条发送解码结果。 1:设为1时,表示解码结果累积到达1MB则批量发送解码结果。 开启批量发送的场景中,当解码格式为'j'或't'时,在原来的每条解码语句之前会附加一个uint32类型,表示本条解码结果长度(长度不包含当前的uint32类型),以及一个uint64类型,表示当前解码结果对应的lsn。 parallel-queue-size: 指定并行逻辑解码线程间进行交互的队列长度。 取值范围:2~1024的int型,且必须为2的整数幂,默认值为128。 队列长度和解码过程的内存使用量正相关。
  • 通用选项(串行解码和并行解码均可配置,但可能无效,请参考相关选项详细说明) include-xids: 解码出的data列是否包含xid信息。 取值范围:0或1,默认值为1。 0:设为0时,解码出的data列不包含xid信息。 1:设为1时,解码出的data列包含xid信息。 skip-empty-xacts: 解码时是否忽略空事务信息。 取值范围:0或1,默认值为0。 0:设为0时,解码时不忽略空事务信息。 1:设为1时,解码时会忽略空事务信息。 include-timestamp: 解码信息是否包含commit时间戳。 取值范围:0或1,默认值为0。 0:设为0时,解码信息不包含commit时间戳。 1:设为1时,解码信息包含commit时间戳。 only-local: 是否仅解码本地日志。 取值范围:0或1,默认值为1。 0:设为0时,解码非本地日志和本地日志。 1:设为1时,仅解码本地日志。 white-table-list: 白名单参数,包含需要进行解码的schema和表名。 取值范围:包含白名单中表名的字符串,不同的表以','为分隔符进行隔离;使用'*'来模糊匹配所有情况;schema名和表名间以'.'分隔,不允许存在任意空白符。例如: select * from pg_logical_slot_peek_changes('slot1', NULL, 4096, 'white-table-list', 'public.t1,public.t2,*.t3,my_schema.*'); max-txn-in-memory: 内存管控参数,单位为MB,单个事务占用内存大于该值即进行落盘。 取值范围:0~100的整型,默认值为0,即不开启此种管控。 max-reorderbuffer-in-memory 内存管控参数,单位为GB,拼接-发送线程中正在拼接的事务总内存(包含缓存)大于该值则对当前解码事务进行落盘。 取值范围:0~100的整型,默认值为0,即不开启此种管控。 include-user: 事务的BEGIN逻辑日志是否输出事务的用户名。事务的用户名特指授权用户——执行事务对应会话的登录用户,它在事务的整个执行过程中不会发生变化。 取值范围:0或1,默认值为0。 0:设为0时,事物的BEGIN逻辑日志不输出事务的用户名。 1:设为1时,事物的BEGIN逻辑日志输出事务的用户名。 exclude-userids: 黑名单用户的OID参数。 取值范围:字符串类型,指定黑名单用户的OID,多个OID通过','分隔,不校验用户OID是否存在。 exclude-users: 黑名单用户的名称列表。 取值范围:字符串类型,指定黑名单用户名,通过','分隔,不校验用户名是否存在。 dynamic-resolution: 是否动态解析黑名单用户名。 取值范围:0或1,默认值为1。 0:设为0时,当解码观测到黑名单exclude-users中用户不存在时将会报错并退出逻辑解码。 1:设为1时,当解码观测到黑名单exclude-users中用户不存在时继续解码。 standby-connection: 仅流式解码设置,是否仅限制备机解码。 取值范围:bool型,默认值为false。 true:设为true时,仅允许连接备机解码,连接主机解码时会报错退出。 false:设为false时,不做限制,允许连接主机或备机解码。 sender-timeout: 仅流式解码设置,内核与客户端的心跳超时阈值。当该时间段内没有收到客户端任何消息,逻辑解码将主动停止,并断开和客户端的连接。单位为毫秒(ms)。 取值范围:0~2147483647的int型,默认值取决于GUC参数logical_sender_timeout的配置值。 parallel-decode-num: 仅流式解码设置有效,并行解码的Decoder线程数量;系统函数调用场景下此选项无效,仅校验取值范围。 取值范围:取1表示按照原有的串行逻辑进行解码,取其余值即为开启并行解码,默认值为1。 当parallel-decode-num不配置(即为默认值1)或显式配置为1时,下述“并行解码”中的选项不可配置。
  • 串行解码 force-binary: 是否以二进制格式输出解码结果,针对不同场景呈现不同行为。 针对系统函数pg_logical_slot_get_binary_changes和pg_logical_slot_peek_binary_changes: 取值范围:bool型,默认值为false。此值无实际意义,均以二进制格式输出解码结果。 针对系统函数pg_logical_slot_get_changes、pg_logical_slot_peek_changes和pg_logical_get_area_changes: 取值范围:仅取false值的bool型。以文本格式输出解码结果。 针对流式解码: 取值范围:bool型,默认值为false。此值无实际意义,均以文本格式输出解码结果。
  • 参数说明 table_name 分区表名。 取值范围:已存在的分区表名。 partition_name 分区名。 取值范围:已存在的分区名。 tablespacename 指定分区要移动到哪个表空间。 取值范围:已存在的表空间名。 partition_value 分区键值。 通过PARTITION FOR ( partition_value [, ...] )子句指定的这一组值,可以唯一确定一个分区。 取值范围:需要进行重命名的分区的分区键的取值范围。 UNUSABLE LOCAL INDEXES 设置该分区上的所有索引不可用。 REBUILD UNUSABLE LOCAL INDEXES 重建该分区上的所有索引。 { ENABLE | DISABLE } ROW MOVEMET 行迁移开关。 如果进行UPDATE操作时,更新了元组在分区键上的值,造成了该元组所在分区发生变化,就会根据该开关给出报错信息,或者进行元组在分区间的转移。 取值范围: ENABLE:打开行迁移开关。 DISABLE:关闭行迁移开关。 默认是关闭状态。 ordinary_table_name 进行迁移的普通表的名称。 取值范围:已存在的普通表名。 { WITH | WITHOUT } VALIDATION 在进行数据迁移时,是否检查普通表中的数据满足指定分区的分区键范围。 取值范围: WITH:对于普通表中的数据要检查是否满足分区的分区键范围,如果有数据不满足,则报错。 WITHOUT:对于普通表中的数据不检查是否满足分区的分区键范围。 默认是WITH状态。 由于检查比较耗时,特别是当数据量很大的情况下更甚。所以在保证当前普通表中的数据满足分区的分区键范围时,可以加上WITHOUT来指明不进行检查。 VERBOSE 在VALIDATION是WITH状态时,如果检查出普通表有不满足要交换分区的分区键范围的数据,那么把这些数据插入到正确的分区,如果路由不到任何分区,再报错。 只有在VALIDATION是WITH状态时,才可以指定VERBOSE。 partition_new_name 分区的新名称。 取值范围:字符串,要符合标识符命名规范。 UPDATE GLOBAL INDEX 如果使用该参数,则会更新分区表上的所有全局索引,以确保使用全局索引可以查询出正确的数据。 如果不使用该参数,则分区表上的所有全局索引将会失效。
  • 语法格式 修改表分区主语法。 1 2 ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name )} action [, ... ]; 其中action统指如下分区维护子语法。当存在多个分区维护子句时,保证了分区的连续性,无论这些子句的排序如何,GaussDB总会先执行DROP PARTITION再执行ADD PARTITION操作,最后顺序执行其它分区维护操作。 1 2 3 4 5 6 7 8 move_clause | exchange_clause | row_clause | merge_clause | modify_clause | split_clause | add_clause | drop_clause move_clause子语法用于移动分区到新的表空间。 1 MOVE PARTITION { partion_name | FOR ( partition_value [, ...] ) } TABLESPACE tablespacename exchange_clause子语法用于把普通表的数据迁移到指定的分区。 1 2 3 EXCHANGE PARTITION { ( partition_name ) | FOR ( partition_value [, ...] ) } WITH TABLE {[ ONLY ] ordinary_table_name | ordinary_table_name * | ONLY ( ordinary_table_name )} [ { WITH | WITHOUT } VALIDATION ] [ VERBOSE ] [ UPDATE GLOBAL INDEX ] 进行交换的普通表和分区必须满足如下条件: 普通表和分区的列数目相同,对应列的信息严格一致,包括:列名、列的数据类型、列约束、列的Collation信息、列的存储参数等。 普通表和分区的分布列信息严格一致。 普通表和分区的索引个数相同,且对应索引的信息严格一致。 普通表和分区的表约束个数相同,且对应表约束的信息严格一致。 普通表不可以是临时表。 在内置安全策略开关开启的情况下,普通表不可以包含绑定了动态数据脱敏策略的列。 完成交换后,普通表和分区的数据被置换,同时普通表和分区的表空间信息被置换。此时,普通表和分区的统计信息变得不可靠,需要对普通表和分区重新执行analyze。如果在普通表/分区表上进行了drop column操作,被删除的列依然物理存在,所以需要保证普通表和分区的被删除列也严格对齐才能交换成功。 row_clause子语法用于设置分区表的行迁移开关。 1 { ENABLE | DISABLE } ROW MOVEMENT merge_clause子语法用于把多个分区合并成一个分区。 1 2 MERGE PARTITIONS { partition_name } [, ...] INTO PARTITION partition_name [ TABLESPACE tablespacename ] [ UPDATE GLOBAL INDEX ] modify_clause子语法用于设置分区索引是否可用。 1 MODIFY PARTITION partition_name { UNUSABLE LOCAL INDEXES | REBUILD UNUSABLE LOCAL INDEXES } split_clause子语法用于把一个分区切割成多个分区。 1 SPLIT PARTITION { partition_name | FOR ( partition_value [, ...] ) } { split_point_clause | no_split_point_clause } [ UPDATE GLOBAL INDEX ] 指定切割点split_point_clause的语法为: 1 AT ( partition_value ) INTO ( PARTITION partition_name [ TABLESPACE tablespacename ] , PARTITION partition_name [ TABLESPACE tablespacename ] ) 切割点的大小要位于正在被切割的分区的分区键范围内,指定切割点的方式只能把一个分区切割成两个新分区。 不指定切割点no_split_point_clause的语法为: 1 INTO { ( partition_less_than_item [, ...] ) | ( partition_start_end_item [, ...] ) } 不指定切割点的方式,partition_less_than_item指定的第一个新分区的分区键要大于正在被切割的分区的前一个分区(如果存在的话)的分区键,partition_less_than_item指定的最后一个分区的分区键要等于正在被切割的分区的分区键大小。 不指定切割点的方式,partition_start_end_item指定的第一个新分区的起始点(如果存在的话)必须等于正在被切割的分区的前一个分区(如果存在的话)的分区键,partition_start_end_item指定的最后一个分区的终止点(如果存在的话)必须等于正在被切割的分区的分区键。 partition_less_than_item支持的分区键个数最多为4,而partition_start_end_item仅支持1个分区键,其支持的数据类型参见•PARTITION BY RANGE(partition_key)。 在同一语句中partition_less_than_item和partition_start_end_item两者不可同时使用;不同split语句之间没有限制。 分区项partition_less_than_item的语法为: 1 2 PARTITION partition_name VALUES LESS THAN ( { partition_value | MAXVALUE } [, ...] ) [ TABLESPACE tablespacename ] 分区项partition_start_end_item的语法为,其约束参见START END语法描述。 1 2 3 4 5 6 PARTITION partition_name { {START(partition_value) END (partition_value) EVERY (interval_value)} | {START(partition_value) END ({partition_value | MAXVALUE})} | {START(partition_value)} | {END({partition_value | MAXVALUE})} } [TABLESPACE tablespace_name] add_clause子语法用于为指定的分区表添加一个或多个分区。 1 2 3 4 5 ADD PARTITION ( partition_col1_name = partition_col1_value [, partition_col2_name = partition_col2_value ] [, ...] ) [ LOCATION 'location1' ] [ PARTITION (partition_colA_name = partition_colA_value [, partition_colB_name = partition_colB_value ] [, ...] ) ] [ LOCATION 'location2' ] ADD {partition_less_than_item | partition_start_end_item} drop_clause子语法用于删除分区表中的指定分区。 1 DROP PARTITION { partition_name | FOR ( partition_value [, ...] ) } [ UPDATE GLOBAL INDEX ] 修改表分区名称的语法。 1 2 ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name )} RENAME PARTITION { partion_name | FOR ( partition_value [, ...] ) } TO partition_new_name;
  • 注意事项 只有分区表的所有者或者被授予了分区表ALTER权限的用户有权限执行ALTER TABLE PARTITION命令,系统管理员默认拥有此权限。 添加分区的表空间不能是PG_GLOBAL。 添加分区的名称不能与该分区表已有分区的名称相同。 添加分区的分区键值要和分区表的分区键的类型一致,且要大于分区表中最后一个范围分区的上边界。 如果目标分区表中已有分区数达到了最大值(1048575),则不能继续添加分区。 当分区表只有一个分区时,不能删除该分区。 选择分区使用PARTITION FOR(),括号里指定值个数应该与定义分区时使用的列个数相同,并且一一对应。 Value分区表不支持相应的Alter Partition操作。 若设置参数enable_gpi_auto_update为on,即使不声明UPDATE GLOBAL INDEX子句,也会自动更新Global索引。
  • STATIO_SYS_SEQUEN CES STATIO_SYS_SEQUENCES显示命名空间中所有系统序列的I/O状态信息。 表1 STATIO_SYS_SEQUENCES字段 名称 类型 描述 relid oid 序列OID。 schemaname name 序列中模式名。 relname name 序列名。 blks_read bigint 从序列中读取的磁盘块数。 blks_hit bigint 序列中缓存命中数。 父主题: Cache/IO
  • 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 --建表 openGauss=# CREATE SCHEMA hr; openGauss=# SET CURRENT_SCHEMA = hr; --创建存储过程dynamic_proc openGauss=# CREATE OR REPLACE PROCEDURE dynamic_proc AS staff_id NUMBER(6) := 200; first_name VARCHAR2(20); salary NUMBER(8,2); BEGIN --执行匿名块 EXECUTE IMMEDIATE 'begin select first_name, salary into :first_name, :salary from hr.staffs where staff_id= :dno; end;' USING OUT first_name, OUT salary, IN staff_id; dbe_output.print_line(first_name|| ' ' || salary); END; / --调用存储过程 openGauss=# CALL dynamic_proc(); --删除存储过程 openGauss=# DROP PROCEDURE dynamic_proc; -- 清除当前数据库模式 openGauss=# SET CURRENT_SCHEMA = public; openGauss=# DROP SCHEMA hr CASCADE;
  • 语法 语法请参见图1。 图1 call_anonymous_block::= using_clause子句的语法参见图2。 图2 using_clause::= 对以上语法格式的解释如下: 匿名块程序实施部分,以BEGIN语句开始,以END语句停顿,以一个分号结束。 USING [IN|OUT|IN OUT] bind_argument,用于指定存放传递给存储过程参数值的变量。bind_argument前的修饰符与对应参数的修饰符一致。 匿名块中间的输入输出参数使用占位符来指明,要求占位符个数与参数个数相同,并且占位符所对应参数的顺序和USING中参数的顺序一致。 目前GaussDB在动态语句调用匿名块时,EXCEPTION语句中暂不支持使用占位符进行输入输出参数的传递。 不支持调用带有占位符的重载函数。 不支持同一条语句同时使用匿名块内声明的变量和绑定参数。 仅支持匿名块中调用SQL语句绑定参数,其余绑定参数场景皆不支持。例如:匿名块中调用存储过程,匿名块中使用表达式以及cursor等、匿名块中嵌套调用动态语句。
  • javax.sql.ConnectionPoolDataSource javax.sql.ConnectionPoolDataSource是数据源连接池接口。 表1 对javax.sql.ConnectionPoolDataSource的支持情况 方法名 返回值类型 支持JDBC 4 getPooledConnection() PooledConnection Yes getPooledConnection(String user,String password) PooledConnection Yes 父主题: JDBC接口参考
  • PV_SESSION_MEMORY_CONTEXT PV_SESSION_MEMORY_CONTEXT视图显示所有会话的内存使用情况,以MemoryContext节点来统计。该视图仅在开启线程池(enable_thread_pool = on)时生效。 其中内存上下文“TempSmallContextGroup”,记录当前线程中所有内存上下文字段“totalsize”小于8192字节的信息汇总,并且内存上下文统计计数记录到“usedsize”字段中。所以在视图中,“TempSmallContextGroup”内存上下文中的“totalsize”和“freesize”是该线程中所有内存上下文“totalsize”小于8192字节的汇总总和,usedsize字段表示统计的内存上下文个数。 表1 PV_SESSION_MEMORY_CONTEXT字段 名称 类型 描述 sessid text 会话启动时间+会话标识(字符串信息为timestamp.sessionid)。 threadid bigint 会话绑定的线程标识,如果未绑定线程,该值为-1。 contextname text 内存上下文名称。 level smallint 当前上下文在整体内存上下文中的层级。 parent text 父内存上下文名称。 totalsize bigint 当前内存上下文的内存总数,单位Byte。 freesize bigint 当前内存上下文中已释放的内存总数,单位Byte。 usedsize bigint 当前内存上下文中已使用的内存总数,单位Byte;“TempSmallContextGroup”内存上下文中该字段含义为统计计数。 父主题: 系统视图
  • SUMMARY_STAT_ALL_TABLES 显示集群内汇聚数据库中每个表(包括TOAST表)的一行的统计信息。 表1 SUMMARY_STAT_ALL_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
  • PG_ATTRIBUTE PG_ATTRIBUTE系统表存储关于表字段的信息。 表1 PG_ATTRIBUTE字段 名称 类型 描述 attrelid oid 此字段所属表。 attname name 字段名。 atttypid oid 字段类型。 attstattarget integer 控制ANALYZE为这个字段积累的统计细节的级别。 零值表示不收集统计信息。 负数表示使用系统缺省的统计对象。 正数值的确切信息是和数据类型相关的。 对于标量数据类型,A TTS TATTARGET既是要收集的"最常用数值"的目标数目,也是要创建的柱状图的目标数量。 attlen smallint 是本字段类型的PG_TYPE中typlen的拷贝。 attnum smallint 字段编号。 attndims integer 如果该字段是数组,则是维数,否则是0 。 attcacheoff integer 在磁盘上的时候总是-1 ,但是如果加载入内存中的行描述器中,它可能会被更新以缓冲在行中字段的偏移量。 atttypmod integer 记录创建新表时支持的类型特定的数据(比如一个varchar字段的最大长度)。它传递给类型相关的输入和长度转换函数当做第三个参数。其值对那些不需要ATTTYPMOD的类型通常为-1。 attbyval boolean 这个字段类型的PG_TYPE中typbyval的拷贝。 attstorage "char" 这个字段类型的PG_TYPE中typstorage的拷贝。 attalign "char" 这个字段类型的PG_TYPE中typalign的拷贝。 attnotnull boolean 这代表一个非空约束。可以改变这个字段以打开或者关闭这个约束。 atthasdef boolean 这个字段有一个缺省值,此时它对应PG_ATTRDEF表里实际定义此值的记录。 attisdropped boolean 这个字段已经被删除了,不再有效。一个已经删除的字段物理上仍然存在表中,但会被分析器忽略,因此不能再通过SQL访问。 attislocal boolean 这个字段是局部定义在关系中的。请注意一个字段可以同时是局部定义和继承的。 attinhcount integer 这个字段所拥有的直接父表的个数。如果一个字段的父表个数非零,则它就不能被删除或重命名。 attcollation oid 对此列定义的校对列。 attacl aclitem[] 列级访问权限控制。 attoptions text[] 字段属性。目前支持以下两种属性: n_distinct,表示该字段的distinct值数量(不包含子表)。 n_distinct_inherited,表示该字段的distinct值数量(包含子表)。 attfdwoptions text[] 外表字段属性。当前支持的dist_fdw、file_fdw、log_fdw未使用外表字段属性。 attinitdefval bytea 存储了此列默认的值表达式。行存表的ADD COLUMN需要使用此字段。 attkvtype tinyint 对某一列指定key value类型。类型包括: 0. ATT_KV_UNDEFINED : 默认 1. ATT_KV_TAG : 维度 2. ATT_KV_FIELD : 指标 3. ATT_KV_TIMETAG :时间列 4. ATT_KV_HIDETAG: 隐藏分布列 父主题: 系统表
  • enable_save_datachanged_timestamp 参数说明:确定是否收集insert/update/delete, exchange/truncate/drop partition操作对表数据改动的时间。 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:布尔型 on表示允许收集相关操作对表数据改动的时间。 off表示禁止收集相关操作对表数据改动的时间。 默认值:on
  • track_procedure_sql 参数说明:该参数控制pg_stat_activity系统表中的query列是否同时打印该存储过程中正在执行的SQL语句。 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:布尔型 on表示调用存储过程时,pg_stat_activity的query列会同时打印存储过程正在执行的语句。 off表示调用存储过程时,pg_stat_activity的query列只打印存储过程调用语句。 默认值:on
  • track_io_timing 参数说明:控制收集数据库I/O调用时序的统计数据。I/O时序统计数据可以在pg_stat_database中查询。 该参数属于SUSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:布尔型 on表示开启收集功能,开启时,收集器会在重复地去查询当前时间的操作系统,这可能会引起某些平台的重大开销,故默认值设置为off。 off表示关闭收集功能。 默认值:off
  • track_activities 参数说明:控制收集每个会话中当前正在执行命令的统计数据。对于存储过程,打开该参数后,可以通过pg_stat_activity视图看到存储过程内正在执行的perform语句、调用存储过程语句、存储过程内的SQL语句、OPEN CURSOR语句。 该参数属于SUSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:布尔型 on表示开启收集功能。 off表示关闭收集功能。 默认值:on
  • 对象访问编程规范 【规则】用户在操作对象时,应该拥有该对象的操作权限。 权限说明请参考用户及权限章节,并遵循权限设计规范。 【规则】访问对象(表,函数等)时建议带上SCHEMA名称,即使用schemaname.tablename进行访问。 如果不追加SCHEMA名称前缀,会根据当前search_path中表空间列表,依次搜索所有表空间直到找到匹配的表,这会带来不必要的性能开销。 父主题: 数据库编程规范
  • PG_SHDEPEND PG_SHDEPEND系统表记录数据库对象和共享对象(比如角色)之间的依赖性关系。这些信息允许GaussDB保证在企图删除这些对象之前,这些对象是没有被引用的。 PG_DEPEND的作用类似,只是它是用于在一个数据库内部的对象的依赖性关系的。 PG_SHDEPEND是在集群的所有数据库之间共享的,即每个集群只有一个,而不是每个数据库一个。 表1 PG_SHDEPEND字段 名称 类型 引用 描述 dbid oid PG_DATABASE.oid 依赖对象所在的数据库的OID ,如果是共享对象,则为零。 classid oid PG_CLASS.oid 依赖对象所在的系统表的OID。 objid oid 任意OID属性 指定的依赖对象的OID。 objsubid integer - 对于一个表字段,这是字段号(objid和classid参考表本身)。对于所有其他对象类型,这个字段为零。 refclassid oid PG_CLASS.oid 被引用对象所在的系统表的OID(必须是一个共享表)。 refobjid oid 任意OID属性 指定的被引用对象的OID。 deptype "char" - 一段代码,定义了这个依赖性关系的特定语义。参阅下文。 在任何情况下,一条PG_SHDEPEND记录就表明这个被引用的对象不能在未删除依赖对象的前提下删除。不过,deptype同时还标出了几种不同的子风格: SHARED_DEPENDENCY_OWNER (o) 被引用的对象(必须是一个角色)是依赖对象的所有者。 SHARED_DEPENDENCY_ACL (a) 被引用的对象(必须是一个角色)在依赖对象的ACL(访问控制列表,也就是权限列表)里提到。SHARED_DEPENDENCY_ACL不会在对象的所有者上添加,因为所有者会有一个SHARED_DEPENDENCY_OWNER记录。 SHARED_DEPENDENCY_PIN (p) 这类记录标识系统自身依赖于该被依赖对象,因此这样的对象不能被删除。这种类型的记录只是由initdb创建。这样的依赖对象的字段都是零。 SHARED_DEPENDENCY_ DBPRIV(d) 被引用的对象(必须是一个角色)具有依赖对象所对应的ANY权限(指定的依赖对象的OID对应的是系统表GS_DB_PRIVILEGE中一行)。 父主题: 系统表
  • 时间段输入 reltime的输入方式可以采用任何合法的时间段文本格式,包括数字形式(含负数和小数)及时间形式,其中时间形式的输入支持SQL标准格式、ISO-8601格式、POSTGRES格式等。另外,文本输入需要加单引号。 时间段输入的详细信息请参考表6。 表6 时间段输入 输入示例 输出结果 描述 60 2 mons 采用数字表示时间段,默认单位是day,可以是小数或负数。特别的,负数时间段,在语义上,可以理解为“早于多久”。 31.25 1 mons 1 days 06:00:00 -365 -12 mons -5 days 1 years 1 mons 8 days 12:00:00 1 years 1 mons 8 days 12:00:00 采用POSTGRES格式表示时间段,可以正负混用,不区分大小写,输出结果为将输入时间段计算并转换得到的简化POSTGRES格式时间段。 -13 months -10 hours -1 years -25 days -04:00:00 -2 YEARS +5 MONTHS 10 DAYS -1 years -6 mons -25 days -06:00:00 P-1.1Y10M -3 mons -5 days -06:00:00 采用ISO-8601格式表示时间段,可以正负混用,不区分大小写,输出结果为将输入时间段计算并转换得到的简化POSTGRES格式时间段。 -12H -12:00:00 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 --创建表。 openGauss=# CREATE TABLE reltime_type_tab(col1 character(30), col2 reltime); --插入数据。 openGauss=# INSERT INTO reltime_type_tab VALUES ('90', '90'); openGauss=# INSERT INTO reltime_type_tab VALUES ('-366', '-366'); openGauss=# INSERT INTO reltime_type_tab VALUES ('1975.25', '1975.25'); openGauss=# INSERT INTO reltime_type_tab VALUES ('-2 YEARS +5 MONTHS 10 DAYS', '-2 YEARS +5 MONTHS 10 DAYS'); openGauss=# INSERT INTO reltime_type_tab VALUES ('30 DAYS 12:00:00', '30 DAYS 12:00:00'); openGauss=# INSERT INTO reltime_type_tab VALUES ('P-1.1Y10M', 'P-1.1Y10M'); --查看数据。 openGauss=# SELECT * FROM reltime_type_tab; col1 | col2 --------------------------------+------------------------------------- 90 | 3 mons -366 | -1 years -18:00:00 1975.25 | 5 years 4 mons 29 days -2 YEARS +5 MONTHS 10 DAYS | -1 years -6 mons -25 days -06:00:00 30 DAYS 12:00:00 | 1 mon 12:00:00 P-1.1Y10M | -3 mons -5 days -06:00:00 (6 rows) --删除表。 openGauss=# DROP TABLE reltime_type_tab;
  • 日期输入 日期和时间的输入几乎可以是任何合理的格式,包括ISO-8601格式、SQL-兼容格式、传统POSTGRES格式或者其它的格式。系统支持按照日、月、年的顺序自定义日期输入。如果把DateStyle参数设置为MDY就按照“月-日-年”解析,设置为DMY就按照“日-月-年”解析,设置为YMD就按照“年-月-日”解析。 日期的文本输入需要加单引号包围,语法如下: type [ ( p ) ] 'value' 可选的精度声明中的p是一个整数,表示在秒域中小数部分的位数。表2显示了date类型的输入格式。 表2 日期输入方式 例子 描述 1999-01-08 ISO 8601格式(建议格式),任何方式下都是1999年1月8日。 January 8, 1999 在任何datestyle输入模式下都无歧义。 1/8/1999 有歧义,在MDY模式下是一月八日,在DMY模式下是八月一日。 1/18/1999 MDY模式下是一月十八日,其它模式下被拒绝。 01/02/03 MDY模式下的2003年1月2日。 DMY模式下的2003年2月1日。 YMD模式下的2001年2月3日。 1999-Jan-08 任何模式下都是1月8日。 Jan-08-1999 任何模式下都是1月8日。 08-Jan-1999 任何模式下都是1月8日。 99-Jan-08 YMD模式下是1月8日,否则错误。 08-Jan-99 一月八日,除了在YMD模式下是错误的之外。 Jan-08-99 一月八日,除了在YMD模式下是错误的之外。 19990108 ISO 8601格式;任何模式下都是1999年1月8日。 990108 ISO 8601格式;任何模式下都是1999年1月8日。 1999.008 年和年里的第几天。 J2451187 儒略日。 January 8, 99 BC 公元前99年。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 --创建表。 openGauss=# CREATE TABLE date_type_tab(coll date); --插入数据。 openGauss=# INSERT INTO date_type_tab VALUES (date '12-10-2010'); --查看数据。 openGauss=# SELECT * FROM date_type_tab; coll --------------------- 2010-12-10 00:00:00 (1 row) --查看日期格式。 openGauss=# SHOW datestyle; DateStyle ----------- ISO, MDY (1 row) --设置日期格式。 openGauss=# SET datestyle='YMD'; SET --插入数据。 openGauss=# INSERT INTO date_type_tab VALUES(date '2010-12-11'); --查看数据。 openGauss=# SELECT * FROM date_type_tab; coll --------------------- 2010-12-10 00:00:00 2010-12-11 00:00:00 (2 rows) --删除表。 openGauss=# DROP TABLE date_type_tab;
  • GLOBAL_CLEAR_BAD_BLOCK_INFO GLOBAL_CLEAR_BAD_BLOCK_INFO视图,在CN上执行,用于清理所有实例中已修复的损坏页面的信息,在DN上执行结果为空。默认只有初始用户、具有sysadmin属性的用户、在运维模式下具有运维管理员属性的用户、以及监控用户可以查看,其余用户需要赋权后才可以使用。 表1 GLOBAL_BAD_BLOCK_INFO字段 名称 类型 描述 node_name text 当前清理修复页面信息结果对应的节点信息。 result boolean 当前实例清理修复页面执行的结果。 父主题: 系统视图
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全