华为云用户手册

  • GS_IMCU_SLOT_STATUS GS_IMCU_SLOT_STATUS视图显示数据库中IMCV表中IMCU对应的缓存slot信息,该视图同时存在于PG_CATA LOG 和SYS Schema下。 由于HTAP特性不支持分布式,enable_htap在分布式中不可以设置为on,所以查询该系统视图时会显示为空。 表1 GS_IMCU_SLOT_STATUS字段 名称 类型 描述 reloid oid 表id。 cu_id integer IMCU id。 col_id integer IMCU 所属列id。 slot_id integer 缓存区slot id。 block_size integer IMCU内存大小,单位字节。 flag char 是否空闲或占用。 父主题: 其他系统视图
  • OPERATOR_HISTORY_TABLE OPERATOR_HISTORY_TABLE系统视图显示执行作业结束后的算子相关的记录。此数据是从内核中转储到视图中的数据,如表1所示。 表1 OPERATOR_HISTORY_TABLE的字段 名称 类型 描述 queryid bigint 语句执行使用的内部query_id。 pid bigint 后端线程id。 plan_node_id integer 查询对应的执行计划的plan node id。 plan_node_name text 对应于plan_node_id的算子的名称。 start_time timestamp with time zone 该算子处理第一条数据的开始时间。 duration bigint 该算子到结束时候总的执行时间(ms)。 query_dop integer 当前算子执行时的并行度。 estimated_rows bigint 优化器估算的行数信息。 tuple_processed bigint 当前算子返回的元素个数。 min_peak_memory integer 当前算子在所有DN上的最小内存峰值(MB)。 max_peak_memory integer 当前算子在所有DN上的最大内存峰值(MB)。 average_peak_memory integer 当前算子在所有DN上的平均内存峰值(MB)。 memory_skew_percent integer 当前算子在各DN间的内存使用倾斜率。 min_spill_size integer 若发生下盘,所有DN上下盘的最小数据量(MB),默认为0。 max_spill_size integer 若发生下盘,所有DN上下盘的最大数据量(MB),默认为0。 average_spill_size integer 若发生下盘,所有DN上下盘的平均数据量(MB),默认为0。 spill_skew_percent integer 若发生下盘,DN间下盘倾斜率。 min_cpu_time bigint 该算子在所有DN上的最小执行时间(ms)。 max_cpu_time bigint 该算子在所有DN上的最大执行时间(ms)。 total_cpu_time bigint 该算子在所有DN上的总执行时间(ms)。 cpu_skew_percent integer DN间执行时间的倾斜率。 warning text 主要显示如下几类告警信息: Sort/SetOp/HashAgg/HashJoin spill Spill file size large than 256MB Broadcast size large than 100MB Early spill Spill times is greater than 3 Spill on memory adaptive Hash table conflict 父主题: Operator
  • MY_TAB_PARTITIONS MY_TAB_PARTITIONS视图显示当前用户下所有一级分区信息(包括二级分区表)。当前用户下每个分区表的一级分区都会在MY_TAB_PARTITIONS中有一条记录。所有用户都可以访问。该视图同时存在于PG_CATALOG和SYS Schema下。分布式暂不支持二级分区,所以该视图中暂不存储二级分区表的一级分区信息。 表1 MY_TAB_PARTITIONS字段 名称 类型 描述 table_owner character varying(64) 表的所有者。 table_name character varying(64) 表的名称。 partition_name character varying(64) 分区名称。 high_value text 分区的边界值。 对于范围分区和间隔分区,显示各分区的上边界值。 对于列表分区,显示各分区的取值列表。 对于哈希分区,显示各分区的编号。 tablespace_name name 分区表的表空间名称。 schema character varying(64) 名称空间的名称。 composite character varying(3) 表是否为二级分区表。 subpartition_count numeric 暂不支持,值为NULL。 high_value_length integer 分区边界值表达式的长度。 partition_position numeric 分区在表中的位置。 pct_free numeric 块中可用空间的最小百分比。 pct_used numeric 暂不支持,值为NULL。 ini_trans numeric 初始事务数,默认值为4,非USTORE分区表时为NULL。 max_trans numeric 最大事务数,默认值为128,非USTORE分区表时为NULL。 initial_extent numeric 暂不支持,值为NULL。 next_extent numeric 暂不支持,值为NULL。 min_extent numeric 暂不支持,值为NULL。 max_extent numeric 暂不支持,值为NULL。 max_size numeric 暂不支持,值为NULL。 pct_increase numeric 暂不支持,值为NULL。 freelists numeric 暂不支持,值为NULL。 freelist_groups numeric 暂不支持,值为NULL。 logging character varying(7) 是否记录对表的更改。 compression character varying(8) 表分区的实际压缩属性。 compress_for character varying(30) 暂不支持,值为NULL。 num_rows numeric 暂不支持,值为NULL。 blocks numeric 暂不支持,值为NULL。 empty_blocks numeric 暂不支持,值为NULL。 avg_space numeric 暂不支持,值为NULL。 chain_cnt numeric 暂不支持,值为NULL。 avg_row_len numeric 暂不支持,值为NULL。 sample_size numeric 暂不支持,值为NULL。 last_analyzed timestamp with time zone 最近分析此分区的日期。 buffer_pool character varying(7) 用于分区块的缓冲池。 flash_cache character varying(7) 暂不支持,值为NULL。 cell_flash_cache character varying(7) 暂不支持,值为NULL。 global_stats character varying(3) 暂不支持,值为NULL。 user_stats character varying(3) 暂不支持,值为NULL。 is_nested character varying(3) 指示这是否是嵌套表分区。 parent_table_partition character varying(128) 暂不支持,值为NULL。 interval character varying(3) 分区是否在间隔分区表的间隔节中。分布式暂不支持间隔分区,该字段值为NO。 segment_created character varying(4) 表分区是否创建了段。 indexing character varying(4) 暂不支持,值为NULL。 read_only character varying(4) 暂不支持,值为NULL。 inmemory character varying(8) 暂不支持,值为NULL。 inmemory_priority character varying(8) 暂不支持,值为NULL。 inmemory_distribute character varying(15) 暂不支持,值为NULL。 inmemory_compression character varying(17) 暂不支持,值为NULL。 inmemory_duplicate character varying(13) 暂不支持,值为NULL。 cellmemory character varying(24) 暂不支持,值为NULL。 inmemory_service character varying(12) 暂不支持,值为NULL。 inmemory_service_name character varying(100) 暂不支持,值为NULL。 memoptimize_read character varying(8) 暂不支持,值为NULL。 memoptimize_write character varying(8) 暂不支持,值为NULL。 父主题: 分区表
  • DBE_SQL_UTIL.show_sql_patch show_sql_patch是用于显示给定patch_name对应的SQL PATCH的接口函数,返回运行结果,如表1所示。 限制:仅初始用户、sysadmin、opradmin和monadmin用户有权限调用。 表1 DBE_SQL_UTIL.show_sql_patch入参和返回值列表 参数 类型 描述 patch_name IN name PATCH名称。 unique_sql_id OUT bigint 查询全局唯一id。 enabled OUT bool PATCH是否生效。 abort OUT bool 是否是AbortHint。 hint_str OUT text Hint文本。 父主题: DBE_SQL_UTIL Schema
  • 语法格式 1 2 3 4 predpush_same_level([@queryblock] src, dest) predpush_same_level([@queryblock] src1 src2 ..., dest) [no] nestloop_index([@queryblock] dest[, index_list]) -- 索引方式 [no] nestloop_index([@queryblock] dest[,(src1 src2 ...)]) -- 表名方式 predpush_same_level参数仅在rewrite_rule中的predpushforce选项打开时生效。 nestloop_index对rewrite_rule不做要求。
  • PG_FOREIGN_SERVER PG_FOREIGN_SERVER系统表存储外部服务器定义。一个外部服务器描述了一个外部数据源,例如一个远程服务器。外部服务器通过外部数据封装器访问。 表1 PG_FOREIGN_SERVER字段 名称 类型 引用 描述 oid oid - 行标识符(隐含字段,必须明确选择)。 srvname name - 外部服务器名。 srvowner oid PG_AUTHID.oid 外部服务器的所有者。 srvfdw oid PG_FOREIGN_DATA_WRAPPER.oid 外部服务器的外部数据封装器的OID。 srvtype text - 服务器的类型(可选)。 srvversion text - 服务器的版本(可选)。 srvacl aclitem[] - 访问权限。 srvoptions text[] - 外部服务器指定选项,使用“keyword=value”格式的字符串。 父主题: 其他系统表
  • GS_STAT_PROGRESS_VACUUM(pid integer) 描述:根据vacuum线程pid查看vacuum的执行进度,支持autovacuum和手动vacuum。 参数:如GS_STAT_PROGRESS_VACUUM入参和返回值列表所示。 表1 GS_STAT_PROGRESS_VACUUM入参和返回值列表 参数 类型 描述 pid IN bigint VACUUM线程的pid。 dataname OUT text 正在清理的数据库名称。 relid OUT oid 正在清理表的OID。 relname OUT text 正在清理的表名称。 phase OUT text 当前VACUUM所处的阶段。 detail OUT text 清理进度详情,包含总页面数、已扫描页面数、已清理页面数、已清理索引数。 返回值类型:record 示例: gaussdb=# select * from GS_STAT_PROGRESS_VACUUM(139988726445824); pid | dataname | relid | relname | phase | detail -----------------+----------+-------+---------+---------------+--------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------- 139988726445824 | postgres | 98304 | t1 | scanning heap | vacuum command "vacuum freeze t1;" starts at 2025-02-07 13:48:51.189748-05, vacuumed 5/12 partitio ns, current part "a_lt_6"; heap: scanned 348/883 blocks, skipped 0 blocks; info: found 0 dead tuples, already run 0s, delay 0s. (1 row)
  • GS_ROLES GS_ROLES视图显示数据库角色的相关信息。初始化用户和具有sysadmin属性或createrole属性的用户可以查看全部角色的信息,其他用户只能查看自己的信息。 表1 GS_ROLES字段 名称 类型 引用 描述 rolname name - 角色名称。 rolsuper boolean - 该角色是否是拥有最高权限的初始系统管理员。 t(true):是。 f(false):否。 rolinherit boolean - 该角色是否继承角色的权限。 t(true):是。 f(false):否。 rolcreaterole boolean - 该角色是否可以创建其他的角色。 t(true):是。 f(false):否。 rolcreatedb boolean - 该角色是否可以创建数据库。 t(true):是。 f(false):否。 rolcatupdate boolean - 该角色是否可以直接更新系统表。只有usesysid=10的初始系统管理员拥有此权限。其他用户无法获得此权限。 t(true):是。 f(false):否。 rolcanlogin boolean - 该角色是否可以登录数据库。 t(true):是。 f(false):否。 rolreplication boolean - 该角色是否可以复制。 t(true):是。 f(false):否。 rolauditadmin boolean - 该角色是否为审计管理员。 t(true):是。 f(false):否。 rolsystemadmin boolean - 该角色是否为系统管理员。 t(true):是。 f(false):否。 rolconnlimit integer - 对于可以登录的角色,此字段限制了该角色允许发起的最大并发连接数。 -1表示无限制。 rolpassword text - 密文存储后的用户密码,始终为********。 rolvalidbegin timestamp with time zone - 账户的有效开始时间。如果没有设置有效开始时间,则为NULL。 rolvaliduntil timestamp with time zone - 账户的有效结束时间。如果没有设置有效结束时间,则为NULL。 rolrespool name - 用户所能够使用的resource pool。 rolparentid oid PG_AUTHID.rolparentid 用户所在组用户的OID。 roltabspace text - 用户永久表存储空间限额,单位KB。 rolconfig text[] PG_DB_ROLE_SETTING.setconfig 运行时配置项的默认值。 oid oid PG_AUTHID.oid 角色的id。 roluseft boolean PG_AUTHID.roluseft 角色是否可以操作外表。 t(true):是。 f(false):否。 rolkind "char" - 角色类型。 n:普通用户,即非永久用户。 p:永久用户。 roltempspace text - 用户临时表存储空间的限额,单位KB。 rolspillspace text - 用户算子落盘空间的限额,单位KB。 rolmonitoradmin boolean - 该角色是否为监控管理员。 t(true):是。 f(false):否。 roloperatoradmin boolean - 该角色是否为运维管理员。 t(true):是。 f(false):否。 rolpolicyadmin boolean - 该角色是否为安全策略管理员。 t(true):是。 f(false):否。 父主题: 用户和权限管理
  • GS_ENCRYPTED_COLUMNS GS_ENCRYPTED_COLUMNS系统表记录密态等值特性中表的加密列相关信息,每条记录对应一条加密列信息。 表1 GS_ENCRYPTED_COLUMNS字段 名称 类型 描述 rel_id oid 表的OID。 column_name name 加密列的名称。 column_key_id oid 外键,列加密密钥的OID。 encryption_type tinyint 加密类型。取值为2(DETERMINISTIC)或者1(RANDOMIZED)。 data_type_original_oid oid 加密列的原始数据类型id。该值参考系统表PG_TYPE的oid字段。 data_type_original_mod integer 加密列的原始数据类型修饰符。该值参考原始数据类型对应的系统表PG_ATTRIBUTE中的atttypmod字段。 create_date timestamp without time zone 创建加密列的时间。 父主题: 密态等值查询
  • ADM_TAB_STATIS TICS ADM_TAB_STATISTI CS 显示数据库中所有表的优化程序统计信息。该视图同时存在于PG_CATALOG和SYS Schema下。默认只有系统管理员权限才可以访问,普通用户需要授权才可以访问。 表1 ADM_TAB_STATISTICS字段 名称 类型 描述 owner character varying(128) 对象的所有者。 table_name character varying(128) 表名。 partition_name character varying(128) 暂不支持,值为NULL。 partition_position numeric 暂不支持,值为NULL。 subpartition_name character varying(128) 暂不支持,值为NULL。 subpartition_position numeric 暂不支持,值为NULL。 object_type character varying(12) 对象类型: TABLE PARTITION SUBPARTITION num_rows numeric 对象中的行数。 blocks numeric 暂不支持,值为NULL。 empty_blocks numeric 暂不支持,值为NULL。 avg_space numeric 暂不支持,值为NULL。 chain_cnt numeric 暂不支持,值为NULL。 avg_row_len integer 平均行长,包括行开销。 avg_space_freelist_blocks numeric 暂不支持,值为NULL。 num_freelist_blocks numeric 暂不支持,值为NULL。 avg_cached_blocks numeric 暂不支持,值为NULL。 avg_cache_hit_ratio numeric 暂不支持,值为NULL。 im_imcu_count numeric 暂不支持,值为NULL。 im_block_count numeric 暂不支持,值为NULL。 im_stat_update_time timestamp(6) without time zone 暂不支持,值为NULL。 scan_rate numeric 暂不支持,值为NULL。 sample_size numeric 分析表格时使用的样本量。 last_analyzed timestamp with time zone 最近分析表的日期。数据库重启后,数据会丢失。 global_stats character varying(3) 暂不支持,值为NULL。 user_stats character varying(3) 暂不支持,值为NULL。 stattype_locked character varying(5) 暂不支持,值为NULL。 stale_stats character varying(7) 暂不支持,值为NULL。 notes character varying(25) 暂不支持,值为NULL。 scope character varying(7) 暂不支持,默认值SHARED。 父主题: 其他系统视图
  • PGReplicationStream的继承关系 PGReplicationStream是逻辑复制的接口,实现类是V3PGReplicationStream,该类位于com.huawei.gaussdb.jdbc.core.v3.replication Package中,该类的声明如下: public class V3PGReplicationStream implements PGReplicationStream
  • 常用方法 表1 PGReplicationStream常用方法 方法名 返回值类型 描述 throws close() void 结束逻辑复制,并释放资源。 SQLException forceUpdateStatus() void 强制将上次接收、刷新和应用的 LSN 状态发送到后端。 SQLException getLastAppliedLSN() LogSequenceNumber 获取上次主机日志回放的LSN。 - getLastFlushedLSN() LogSequenceNumber 获取上次主机刷新的LSN,即当前逻辑解码推进的LSN。 - getLastReceiveLSN() LogSequenceNumber 获取上次接收的LSN(针对LSN序复制槽)或CSN(针对CSN序复制槽)。 - isClosed() boolean 复制流是否关闭。 - read() ByteBuffer 从后端读取下一条WAL记录。如果读取不到,该方法阻塞I/O读。 SQLException readPending() ByteBuffer 从后端读取下一条WAL记录。如果读取不到,该方法不阻塞I/O读。 SQLException setAppliedLSN(LogSequenceNumber applied) void 设置应用的LSN。 - setFlushedLSN(LogSequenceNumber flushed) void 设置刷新的LSN(针对LSN序复制槽)或CSN(针对CSN序复制槽),在下次更新时发送至后端,用于推进服务端LSN(针对LSN序复制槽)或CSN(针对CSN序复制槽)。 -
  • 参数说明 INDEX 重新建立指定的索引。 TABLE 重新建立指定表的所有索引,如果表有从属的“TOAST”表,则这个表也会重建索引。如果表上有索引已经被alter unusable失效,则这个索引无法被重新创建。当指定CONCURRENTLY选项时,暂不支持重建从属“TOAST”表上的索引。 DATABASE 重建当前数据库里的所有索引。当指定CONCURRENTLY选项时,暂不支持重建数据库中表的从属“TOAST”表上的索引。 SYSTEM 在当前数据库上重建所有系统表上的索引。不会处理在用户表上的索引。 option 当前仅支持CROSSBUCKET一种option,且值只能为ON或OFF,用来控制hash bucket表的索引是否在REINDEX过程中转换为跨bucket索引(cross-bucket-index,CBI)或bucket本地索引(local-bucket-index,LBI)索引。此项转换仅支持分布式hash bucket表的索引,不支持GSI索引,当前版本仅标记了扩容流程的Session可以使用在线索引类型转换。 CONCURRENTLY 以不阻塞DML的方式重建索引(加ShareUpdateExclusiveLock锁)。重建索引时,一般会阻塞其他语句对该索引所依赖表的访问。指定此关键字,可以实现重建过程中不阻塞DML。不支持在线重建系统表上的索引。不支持REINDEX INTERNAL TABLE CONCURRENTLY和REINDEX SYSTEM CONCURRENTLY,不支持REINDEX INVALID INDEX CONCURRENTLY。当执行REINDEX DATABASE CONCURRENTLY时,在线重建当前数据库中用户表上的所有索引(不会处理系统表上的索引)。REINDEX CONCURRENTLY不可以在事务内执行。在线重建索引只支持B-tree索引和UB-tree索引,只支持普通索引、GLOBAL索引、LOCAL索引,不支持PCR ubtree索引,不支持二级分区。GSI支持通过REINDEX INDEX CONCURRENTLY在线重建,但不支持在线重建表达式GSI、部分GSI。GSI在线重建期间,应尽量避免与其他DDL并发执行,可能会出现死锁、报错等,可以重新连接客户端进行重试。在线并行重建索引只支持Astore及Ustore的普通索引、GLOBAL索引、LOCAL索引、Ustore的GSI,其他继承当前版本在线重建索引规格约束。如果在线重建索引失败,对于用户手动取消、唯一索引键值重复、资源不足、启动线程失败、锁超时等场景,为避免占用资源,系统会自动清理新索引,在系统无法自动清理失败新索引的情况下(比如数据库宕机、FATAL、PANIC),需要尽快手动清除(使用DROP INDEX语句)非法新索引及(使用DROP TABLE语句)临时表,以防占用更多资源。一般来说,非法的新索引的后缀名为_ccnew,对于GSI(全局二级索引),非法的新索引前缀为ccgsi_tmp_index_。分布式中只有data node节点会自动清理失败索引,coordinator node节点的失败索引需要手动清理。严重错误场景会导致分布式部分节点中找不到失败索引的元信息,DROP INDEX语句无法删除这些索引,需要用DROP INDEX IF EXISTS删除。REINDEX INDEX CONCURRENTLY对表加4级会话锁,且其前几个阶段与CREATE INDEX CONCURRENTLY相似,因此也可能产生卡住或死锁的问题,具体场景与CREATE INDEX CONCURRENTLY相似(比如两个会话同时对同一个索引或表进行REINDEX CONCURRENTLY操作,会引发死锁问题),详见CONCURRENTLY。 重建索引时指定此关键字,Astore需要执行先后两次对全表的扫描来完成build,第一次扫描时创建新索引,不阻塞读写操作,第二次扫描时合并更新第一次扫描到目前为止发生的变更;Ustore需完成一次全表扫描,在扫描过程中并发DML产生的数据会被插入到以“index_oid_cctmp”命名的临时表中,扫描结束后合并临时表到以“_ccnew{n}”为后缀名(对于全局二级索引,以“ccgsi_tmp_index_”为前缀名)的新索引中并删除临时表,交换新旧索引,旧索引标记为死亡,启用新索引,重建索引完成。 name 需要重建索引的索引、表、数据库的名称。表和索引可以有模式修饰。 REINDEX DATABASE和SYSTEM只能重建当前数据库的索引,所以name必须和当前数据库名称相同。 FORCE 废弃选项,仅为保持前向兼容,故继续保留。 partition_name 需要重建索引的索引的名称或者表的名称。 取值范围: 如果前面是REINDEX INDEX,则这里应该指定索引的名称; 如果前面是REINDEX TABLE,则这里应该指定表的名称; REINDEX DATABASE和SYSTEM这种形式的重建索引不能在事务块中执行。 REINDEX、REINDEX CONCURRENTLY不支持单独操作toast表或toast索引。
  • 示例 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 38 39 40 --创建表tbl_test,并插入数据。 gaussdb=# CREATE TABLE tbl_test(c1 int,c2 varchar); gaussdb=# INSERT INTO tbl_test VALUES (1, 'AAAAAAA'),(5, 'AAAAAAB'),(10, 'AAAAAAC'); --创建索引,并查看索引大小 gaussdb=# CREATE INDEX idx_test_c1 ON tbl_test(c1); gaussdb=# SELECT pg_size_pretty(pg_total_relation_size('idx_test_c1')) AS size; size -------- 176 kB (1 row) --插入一万条数据,然后删除数据,发现索引变大。 gaussdb=# INSERT INTO tbl_test VALUES (generate_series(1,10000),'test'); gaussdb=# DELETE FROM tbl_test WHERE c2 = 'test'; gaussdb=# SELECT pg_size_pretty(pg_total_relation_size('idx_test_c1')) AS size; size -------- 504 kB (1 row) --重建一个单独索引之后,查看索引信息索引大小变回初始大小。 gaussdb=# REINDEX INDEX idx_test_c1; gaussdb=# SELECT pg_size_pretty(pg_total_relation_size('idx_test_c1')) AS size; size -------- 176 kB (1 row) --在线重建一个单独索引。 gaussdb=# REINDEX INDEX CONCURRENTLY idx_test_c1; --重建表tbl_test上的所有索引。 gaussdb=# REINDEX TABLE tbl_test; --在线重建表tbl_test上的所有索引。 gaussdb=# REINDEX TABLE CONCURRENTLY tbl_test; --删除tbl_test表。 gaussdb=# DROP TABLE tbl_test;
  • 语法格式 重建普通索引。 1 REINDEX { INDEX | [INTERNAL] TABLE | DATABASE | SYSTEM } [ CONCURRENTLY ] name [ FORCE ]; 重建索引并进行类型转换。 1 REINDEX [ ( option [, ...] ) ] { INDEX } [ CONCURRENTLY ] name [ FORCE ]; 重建索引分区。 1 2 REINDEX { INDEX | [INTERNAL] TABLE } name PARTITION partition_name [ FORCE ];
  • 注意事项 REINDEX DATABASE和SYSTEM这种形式的重建索引不能在事务块中执行。 对于全局二级索引,当前仅支持REINDEX INDEX和REINDEX TABLE。 若索引带有lpi_parallel_method选项,取值为PARTITION且表的parallel_workers选项大于0时,不支持对该索引并行重建;无该选项或选项取值为AUTO时,并行重建时会默认走页面级并行重建索引。详见LPI_PARALLEL_METHOD。 REINDEX CONCURRENTLY在线重建索引导致表上索引顺序改变时,可能会导致查询计划改变。
  • 扩展函数 下表列举了 GaussDB 中支持的扩展函数,不作为商用特性交付,仅供参考。 分类 函数名称 描述 触发器函数 pg_get_triggerdef(trigger_oid) 为触发器获取CREATE [ CONSTRAINT ] TRIGGER命令 pg_get_triggerdef(trigger_oid, pretty_bool) 为触发器获取CREATE [ CONSTRAINT ] TRIGGER命令 父主题: 附录
  • 示例 数据准备。 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 gaussdb=# CREATE DATABASE db1 ENCODING='UTF-8' LC_COLLATE='en_US.UTF-8' LC_CTYPE ='en_US.UTF-8' DBCOMPATIBILITY = 'ORA'; CREATE DATABASE gaussdb=# \c db1 Non-SSL connection (SSL connection is recommended when requiring high-security) You are now connected to database "db1" as user "omm". db1=# CREATE TABLE test_copy(id int, name text); NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'id' as the distribution column by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CREATE TABLE db1=# INSERT INTO test_copy VALUES(1, 'aaa'); INSERT 0 1 db1=# INSERT INTO test_copy VALUES(2, e'bb\nb'); INSERT 0 1 db1=# INSERT INTO test_copy VALUES(3, e'cc\tc'); INSERT 0 1 db1=# INSERT INTO test_copy(name) VALUES('ddd'); INSERT 0 1 db1=# INSERT INTO test_copy VALUES(5, e'ee\\e'); INSERT 0 1 db1=# INSERT INTO test_copy VALUES(6, ','); INSERT 0 1 db1=# INSERT INTO test_copy VALUES(7, '"'); INSERT 0 1 db1=# SELECT * FROM test_copy; id | name ----+----------- 1 | aaa 2 | bb + | b 3 | cc c | ddd 5 | ee\e 6 | , 7 | " (7 rows) 整表数据导出。 1 2 3 4 5 6 7 db1=# COPY test_copy TO '/home/xy/test.csv' DELIMITER ',' QUOTE '"' ESCAPE '"' ENCODING 'UTF-8' CSV; COPY 7 导出的CSV文件内容如下所示: 1 2 3 4 5 6 7 8 1,aaa 2,"bb b" 3,cc c ,ddd 5,ee\e 6,"," 7,"""" 数据导入。 db1=# TRUNCATE test_copy; TRUNCATE TABLE db1=# COPY test_copy FROM '/home/xy/test.csv' DELIMITER ',' QUOTE '"' ESCAPE '"' ENCODING 'UTF-8' CSV; COPY 7 自定义数据集导出:导出test_copy中id不为空所有行的name列。 1 2 3 4 5 6 7 8 db1=# COPY (SELECT name FROM test_copy WHERE id IS NOT NULL) TO '/home/xy/test.csv' DELIMITER ',' QUOTE '"' ESCAPE '"' ENCODING 'UTF-8' CSV; COPY 6 导出的CSV文件内容如下所示: 1 2 3 4 5 6 7 aaa "bb b" cc c ee\e "," """"
  • SUMMARY_STAT_USER_FUNCTIONS 显示整个集群中各节点,用户自定义函数的统计信息的汇总求和结果(在CN节点使用,按函数名对每个节点中用户自定义函数的状态信息汇总求和),如表1所示。 表1 SUMMARY_STAT_USER_FUNCTIONS字段 名称 类型 描述 schemaname name Schema的名称。 funcname name 用户自定义函数的名称。 calls numeric 函数被调用的次数。 total_time double precision 调用此函数花费的总时间,包含调用其它函数的时间(单位:毫秒)。 self_time double precision 调用此函数本身花费的时间,不包含调用其它函数的时间(单位:毫秒)。 父主题: Object
  • PG_EXT_STATS PG_EXT_STATS视图可用来访问存储在PG_STATISTIC_EXT表里面的扩展统计信息。扩展统计信息目前包括多列统计信息。具体字段信息如表1所示。 表1 PG_EXT_STATS字段 名称 类型 引用 描述 schemaname name PG_NAMESPACE.nspname 表的模式名。 tablename name PG_CLASS.relname 表名。 attname int2vector PG_STATISTIC_EXT.stakey 统计信息扩展的多列信息。 inherited boolean - 暂不支持继承表,该字段为false。 null_frac real - 记录中字段组合为空的百分比。 avg_width integer - 字段组合记录以字节记的平均宽度。 n_distinct real - 如果大于零,表示字段组合中独立数值的估计数目。 如果小于零,表示独立数值的数目除以行数后乘-1得到的负数。比如,-1表示一个字段组合中独立数值的个数和行数相同。 用负数形式是因为ANALYZE认为独立数值的数目是随着表增长而增长; 正数的形式用于在字段看上去好像有固定的可能值数目的情况下。 如果等于零,表示独立数值的数目未知。 n_dndistinct real - 标识dn1上字段组合中非NULL的独立数值的数目。 如果大于零,表示独立数值的实际数目。 如果小于零,表示独立数值的数目除以行数后乘-1得到的负数。比如,一个字段组合的数值平均出现概率为两次,则可以表示为n_dndistinct=-0.5。 如果等于零,表示独立数值的数目未知。 most_common_vals anyarray - 一个字段组合里最常用数值的列表。如果该字段组合不存在最常用数值,则为NULL。本列保存的多列常用数值均不为NULL。 most_common_freqs real[] - 一个记录字段组合里最常用数值的出现频率的列表,频率由每个数值出现的次数除以行数得到。如果most_common_vals取值为NULL,则该字段取值也为NULL。 most_common_vals_null anyarray - 一个字段组合里最常用数值的列表。如果该字段组合不存在最常用数值,则为NULL。本列保存的多列常用数值中至少有一个值为NULL。 most_common_freqs_null real[] - 一个记录字段组合里最常用数值的出现频率的列表,频率由每个数值出现的次数除以行数得到。如果most_common_vals_null取值为NULL,则该字段取值也为NULL。 histogram_bounds anyarray - 直方图的边界值列表。 partitionname name PG_PARTITION.relname 分区表的一级分区名。对于非分区表,该字段为空。 subpartitionname name PG_PARTITION.relname 分区表的二级分区名。对于分布式,该字段为空。 父主题: 其他系统视图
  • 示例 CREATE PACKAGE示例 --创建数据库。 gaussdb=# CREATE DATABASE test DBCOMPATIBILITY 'ORA'; gaussdb=# \c test --创建测试表tbl_test。 test=# CREATE TABLE tbl_test(uid varchar(6) PRIMARY KEY, area_id varchar(5), level int); --创建包头。 test=# CREATE OR REPLACE PACKAGE pkg_test AS --公有存储过程可以被外部调用。 PROCEDURE proc_ist_tbl_test(v_uid in varchar, v_area_id varchar, v_level int); PROCEDURE proc_del_tbl_test(v_uid in varchar); PROCEDURE proc_upd_tbl_test(v_uid in varchar, v_area_id varchar, v_level int); END pkg_test; / --创建包体。 test=# CREATE OR REPLACE PACKAGE BODY pkg_test AS PROCEDURE proc_ist_tbl_test(v_uid in varchar, v_area_id varchar, v_level int) AS BEGIN INSERT INTO tbl_test VALUES (v_uid, v_area_id, v_level); END; PROCEDURE proc_del_tbl_test(v_uid in varchar) AS BEGIN DELETE FROM tbl_test WHERE uid = v_uid; END; PROCEDURE proc_upd_tbl_test(v_uid in varchar, v_area_id varchar, v_level int) AS BEGIN UPDATE tbl_test SET area_id = v_area_id, level = v_level WHERE uid = v_uid; END; var4 int := 10; --实例化开始。 BEGIN var4 := 10; dbe_output.print_line(var4); END pkg_test; / 调用PACKAGE示例 --使用CALL调用PACKAGE的存储过程。 test=# CALL pkg_test.proc_ist_tbl_test('0A00B1','01001',24); test=# SELECT * FROM tbl_test; uid | area_id | level --------+---------+--------- 0A00B1 | 01001 | 24 (1 row) --使用SELECT调用PACKAGE的存储过程。 test=# SELECT pkg_test.proc_upd_tbl_test('0A00B1','01001','26'); test=# SELECT * FROM tbl_test; uid | area_id | level --------+---------+------- 0A00B1 | 01001 | 26 (1 row) --匿名块调用PACKAGE的存储过程。 test=# BEGIN pkg_test.proc_del_tbl_test('0A00B1'); END; / test=# SELECT * FROM tbl_test; uid | area_id | level -----+---------+------- (0 rows) --删除。 test=# DROP TABLE tbl_test; test=# DROP PACKAGE pkg_test; --切换至默认数据库并删除test数据库(请根据实际情况修改数据库名)。 test=# \c postgres gaussdb=# DROP DATABASE test;
  • 语法格式 CREATE PACKAGE SPECIFICATION语法格式。 CREATE [ OR REPLACE ] PACKAGE [ schema ] package_name [ invoker_rights_clause ] { IS | AS } item_list_1 END [ package_name ]; invoker_rights_clause可以被声明为AUTHID DEFINER或者AUTHID CURRENT_USER,分别为定义者权限和调用者权限。 item_list_1可以为声明的变量或者存储过程以及函数。 END后的package_name可省略(gs_dump生成的sql文件,PACKAGE定义会自动补上END后名称)。 PACKAGE SPECIFICATION(包头)声明了包内的公有变量、函数、异常等,可以被外部函数或者存储过程调用。在PACKAGE SPECIFICATION中只能声明存储过程、函数,不能定义存储过程或者函数。 CREATE PACKAGE BODY语法格式。 CREATE [ OR REPLACE ] PACKAGE BODY [ schema ] package_name { IS | AS } declare_section [ initialize_section ] END [ package_name ]; END后的package_name可省略(gs_dump生成的sql文件,PACKAGE定义会自动补上END后名称)。 PACKAGE BODY(包体内)定义了包的私有变量、函数等。如果变量或者函数没有在PACKAGE SPECIFICATION中声明过,那么这个变量或者函数则为私有变量或者私有函数。 PACKAGE BODY也可以声明实例化部分,用来初始化package,详见示例。
  • 注意事项 在分布式下,PACKAGE仅支持在ORA兼容性数据库中使用。 在package specification中声明过的函数或者存储过程,必须在package body中找到定义。 创建存储过程时,仅对CREATE的存储过程或PACKAGE本身加写锁,仅对执行过程中编译、执行会对函数和函数依赖的PACKAGE均加读锁。 在实例化中,无法调用带有commit/rollback的存储过程。 不能在Trigger中调用package函数。 不能在外部SQL中直接使用package当中的变量。 不允许在package外部调用package的私有变量和存储过程。 不支持存储过程不支持的用法,例如,在function中不允许调用commit/rollback,则package的function中同样无法调用commit/rollback。 不支持schema与package同名。 只支持ORA风格的存储过程和函数定义。 不支持package内有同名变量,包括包内同名参数。 package的全局变量为session级,不同session之间package的变量不共享。 package中调用自治事务的函数,不允许使用package中的cursor变量,以及不允许递归的使用package中cursor变量的函数。 package中不支持声明ref cursor变量。 package默认为SECURITY INVOKER权限,如果想将默认行为改为SECURITY DEFINER权限,需要设置GUC参数behavior_compat_options='plsql_security_definer'。 被授予CREATE ANY PACKAGE权限的用户,可以在public模式和用户模式下创建PACKAGE。 如果需要创建带有特殊字符的package名,特殊字符中不能含有空格,并且最好设置GUC参数behavior_compat_options="skip_insert_gs_source",否则可能引起报错。 创建package函数时,其参数默认值支持含有package内变量,不支持跨package变量。 package中函数复杂调用,如:func(x).a,函数调用返回复合类型,支持跨schema调用,不支持通过database.schema.package.func(x).b的方式调用。 在创建package内的存储过程时,如果存储过程名称为schema.func或package.func形式,只会获取func的名称,schema声明或package声明无效,如果需要默认禁止这种行为,可以设置GUC参数behavior_compat_options='forbid_package_function_with_prefix'。 不支持view%rowtype作为函数参数。 不支持存储过程/函数中insert values使用复合类型record。 分布式不支持SAVE EXCEPTIONS(调用的存过中使用)。 表达式不支持commit/rollback。 无参function不支持省略括号。 自定义类型变量不支持下推。 在创建PACKAGE内的存储过程时,如果存储过程的入参包含伪类型(如:anyelement),不支持调用时传入变长类型的参数。 package内创建的游标或者函数带参数游标,可以跨package进行类型引用(%RowType)和打开使用,有以下限制: 暂不支持通过database.schema.package.cursor的方式调用游标。 分布式不支持将游标定义为函数参数。 当引用游标时,不支持cursor%RowType。 在PACKAGE SPECIFICATION或PACKAGE BODY SPECIFICATION中声明自治事务PRAGMA AUTONOMOUS_TRANSACTION语法,可成功创建PACKAGE,但自治事务不生效。 仅初始用户可以对初始用户的PACKAGE进行REPLACE操作。
  • 字符类型表达式的字符集和字符序 每一个字符类型的表达式含有字符集和字符序属性。 在MYSQL模式(即sql_compatibility = 'MYSQL')的数据库下,如果设置参数b_format_version='5.7'和b_format_dev_version='s2'时,字符串常量的默认字符集与字符序由系统参数character_set_connection和collation_connection决定。否则,其默认字符集与数据库字符集server_encoding相同,其默认字符序为default。 字符集语法: GaussDB暂不支持以下语法指定字符串常量的字符集。 1 [_charset_name]'string' 字符序语法: 其他字符串类型的表达式也可以指定字符序。 1 EXPRESSION [COLLATE collation_name] 参数说明: COLLATE collation_name 指定字符序的名称,用于设置这个字符串的字符序属性。 表达式的数据类型只能是支持字符序的数据类型。 指定的字符序必须是表达式的字符集允许的字符序。 示例: 1 2 --使用collate语句指定字符序 gaussdb=# SELECT 'a' COLLATE utf8mb4_general_ci = 'A'; 父主题: 字符集与字符序
  • 示例 下面列举了基本的匿名块程序: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 --空语句块 gaussdb=# BEGIN NULL; END; / --将信息打印到控制台: gaussdb=# BEGIN dbe_output.print_line('hello world!'); END; / hello world! ANONYMOUS BLOCK EXECUTE --将变量内容打印到控制台: gaussdb=# DECLARE my_var VARCHAR2(30); BEGIN my_var :='world'; dbe_output.print_line('hello'||my_var); END; / helloworld ANONYMOUS BLOCK EXECUTE
  • GLOBAL_STATIO_ALL_INDEXES GLOBAL_STATIO_ALL_INDEXES视图包含各节点的数据库中的每个索引行,显示特定索引的I/O的统计,如表1所示。 表1 GLOBAL_STATIO_ALL_INDEXES字段 名称 类型 描述 node_name name 节点名称。 relid oid 索引的表的OID。 indexrelid oid 该索引的OID。 schemaname name 该索引的模式名。 relname name 该索引的表名。 indexrelname name 索引名称。 idx_blks_read numeric 从索引中读取的磁盘块数。 idx_blks_hit numeric 索引命中缓存数。 last_updated timestamp with time zone 视图中该索引监控数据最后一次更新的时间。 父主题: Cache/IO
  • 表访问方式 本节为方便算子展示和说明,关闭算子下推到DN上执行的功能。 gaussdb=# SET enable_fast_query_shipping = off; Seq Scan Index Scan Index Only Scan Bitmap Tid Scan Cte Scan Function Scan Sample Scan SubQuery Scan Values Scan WorkTable Scan 父主题: 算子详解
  • 示例 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 --创建存储过程proc_add。 gaussdb=# CREATE OR REPLACE PROCEDURE proc_add ( param1 in INTEGER, param2 out INTEGER, param3 in INTEGER ) AS BEGIN param2:= param1 + param3; END; / gaussdb=# DECLARE input1 INTEGER:=1; input2 INTEGER:=2; statement VARCHAR2(200); param2 INTEGER; BEGIN --声明调用语句 statement := 'call proc_add(:col_1, :col_2, :col_3)'; --执行语句 EXECUTE IMMEDIATE statement USING IN input1, OUT param2, IN input2; dbe_output.print_line('result is: '||to_char(param2)); END; / result is: 3 ANONYMOUS BLOCK EXECUTE --删除存储过程 gaussdb=# DROP PROCEDURE proc_add;
  • 连接查询 连接查询也可称为跨表查询,需要关联多个表进行查询。 --建表并插入数据。 gaussdb=# CREATE TABLE emp( id int, --员工编号 name varchar, --员工姓名 deptno int --所属部门编号 ); gaussdb=# CREATE TABLE dept( deptno int, --部门编号 depname varchar --部门名 ); gaussdb=# INSERT INTO emp VALUES (1, 'Joe', 10), (2, 'Scott', 20), (3, 'Ben', 999); --Ben还没有确认是哪一个部门所以部门编号是999 gaussdb=# INSERT INTO dept VALUES (10, 'hr'), (20, 'it'), (30, 'sal'); --sal部门没有员工 内连接(INNER JOIN) gaussdb=# SELECT t1.id,t1.name,t2.depname FROM emp t1 JOIN dept t2 ON t1.deptno = t2.deptno; id | name | depname ----+-------+--------- 1 | Joe | hr 2 | Scott | it (2 rows) 左连接(LEFT JOIN) gaussdb=# SELECT t1.id,t1.name,t2.depname FROM emp t1 LEFT JOIN dept t2 ON t1.deptno = t2.deptno; id | name | depname ----+-------+--------- 1 | Joe | hr 2 | Scott | it 3 | Ben | (3 rows) 右连接(RIGHT JOIN) gaussdb=# SELECT t1.id,t1.name,t2.depname FROM emp t1 RIGHT JOIN dept t2 ON t1.deptno = t2.deptno; id | name | depname ----+-------+--------- 1 | Joe | hr 2 | Scott | it | | sal (3 rows) 全连接(FULL JOIN) gaussdb=# SELECT t1.id,t1.name,t2.depname FROM emp t1 FULL JOIN dept t2 ON t1.deptno = t2.deptno; id | name | depname ----+-------+--------- 1 | Joe | hr 2 | Scott | it | | sal 3 | Ben | (4 rows) --删除。 gaussdb=# DROP TABLE emp,dept; 父主题: SELECT
  • STAT_XACT_USER_FUNCTIONS 显示当前节点本事务内函数执行的统计信息,如表1所示。 表1 STAT_XACT_USER_FUNCTIONS字段 名称 类型 描述 funcid oid 函数标识。 schemaname name 函数所在Schema名。 funcname name 函数名称。 calls bigint 函数被调用的次数。 total_time double precision 此函数及其调用的所有其他函数所花费的总时间。 self_time double precision 在此函数本身中花费的时间(不包括它调用的其他函数)。 父主题: Object
共100000条
提示

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