华为云用户手册

  • 注意事项 LOCK TABLE只能在一个事务块的内部有用,因为锁在事务结束时就会被释放。出现在任意事务块外面的LOCK TABLE都会报错。 如果没有声明锁模式,缺省为最严格的模式ACCESS EXCLUSIVE。 LOCK TABLE ... IN ACCESS SHARE MODE需要在目标表上有SELECT权限。所有其他形式的LOCK需要UPDATE和/或DELETE权限。 没有UNLOCK TABLE命令,锁总是在事务结束时释放。 LOCK TABLE只处理表级的锁,因此那些带“ROW”字样的锁模式都是有歧义的。这些模式名称通常可理解为用户试图在一个被锁定的表中获取行级的锁。同样,ROW EXCLUSIVE模式也是一个可共享的表级锁。注意,只要是涉及到LOCK TABLE ,所有锁模式都有相同的语意,区别仅在于规则中锁与锁之间是否冲突,规则请参见表1。 如果没有打开xc_maintenance_mode参数,那么对系统表申请ACCESS EXCLUSIVE级别锁将报错。
  • 调优手段之统计信息 GaussDB优化器是典型的基于代价的优化 (Cost-Based Optimization,简称CBO)。在这种优化器模型下,数据库根据表的元组数、字段宽度、NULL记录比率、distinct值、MCV值、HB值等表的特征值,以及一定的代价计算模型,计算出每一个执行步骤的不同执行方式的输出元组数和执行代价(cost),进而选出整体执行代价最小/首元组返回代价最小的执行方式进行执行。这些特征值就是统计信息。从上面描述可以看出统计信息是查询优化的核心输入,准确的统计信息将帮助优化器选择最合适的查询规划,一般来说我们通过analyze语法收集整个表或者表的若干个字段的统计信息,周期性地运行ANALYZE,或者在对表的大部分内容做了更改之后马上运行它是个好习惯。
  • 调优手段之GUC参数 查询优化的主要目的是为查询语句选择高效的执行方式。 如下SQL语句: 1 2 select count(1) from customer inner join store_sales on (ss_customer_sk = c_customer_sk); 在执行customer inner join store_sales的时候,GaussDB支持Nested Loop、Merge Join和Hash Join三种不同的Join方式。优化器会根据表customer和表store_sales的统计信息估算结果集的大小以及每种Join方式的执行代价,然后对比选出执行代价最小的执行计划。 正如前面所说,执行代价计算都是基于一定的模型和统计信息进行估算,当因为某些原因代价估算不能反映真实的cost的时候,我们就需要通过GUC参数设置的方式让执行计划倾向更优规划。例如:random_page_cost参数表示优化器计算一次非顺序抓取磁盘页面的开销,该参数默认值为4。当机器磁盘随机读取的速度较快时,比如SSD设备,可以将该参数的值适当调小,更改后,索引扫描的代价降低,生成计划时更倾向于选择索引扫描的方式。
  • PGXC_CLASS PGXC_CLASS系统表存储每张表的复制或分布信息。PGXC_CLASS系统表在集中式场景下只能查询表定义。 表1 PGXC_CLASS字段 名称 类型 描述 pcrelid oid 表的OID。 pclocatortype "char" 定位器类型。 H:hash G:Range L:List M:Modulo N:Round Robin R:Replication pchashalgorithm smallint 使用哈希算法分布元组。 pchashbuckets smallint 哈希容器的值。 pgroup name 节点群的名称。 redistributed "char" 表已经完成重分布。 redis_order integer 重分布的顺序。该值等于0的表在本轮重分布过程中不进行重分布。 pcattnum int2vector 用作分布键的列标号。 nodeoids oidvector_extend 表分布的节点OID列表。 options text 系统内部保留字段,存储扩展状态信息。 父主题: 系统表
  • ADM_PART_COL_STATISTICS ADM_PART_COL_STATISTICS视图显示数据库中所有表分区的列统计信息和直方图信息。默认只有系统管理员权限才可以访问,普通用户需要授权才可以访问。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 ADM_PART_COL_STATISTICS字段 名称 类型 描述 owner character varying(128) 分区表的所有者。 table_name character varying(128) 表名。 partition_name character varying(128) 表分区名称。 column_name character varying(4000) 列名。 num_distinct numeric 暂不支持,值为NULL。 low_value raw 暂不支持,值为NULL。 high_value raw 暂不支持,值为NULL。 density numeric 暂不支持,值为NULL。 num_nulls numeric 暂不支持,值为NULL。 num_buckets numeric 暂不支持,值为NULL。 sample_size numeric 暂不支持,值为NULL。 last_analyzed date 暂不支持,值为NULL。 global_stats character varying(3) 暂不支持,值为NULL。 user_stats character varying(3) 暂不支持,值为NULL。 notes character varying(63) 暂不支持,值为NULL。 avg_col_len numeric 暂不支持,值为NULL。 histogram character varying(15) 暂不支持,值为NULL。 schema character varying(64) 列所属的名称空间的名称。 父主题: 系统视图
  • ADM_TAB_STATISTICS ADM_TAB_STATISTICS显示数据库中所有表的优化程序统计信息。该视图同时存在于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 numeric 平均行长,包括行开销。 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(9) 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。 父主题: 系统视图
  • 命名SQL描述符区域 一个命名SQL描述符区域由一个头部以及一个或多个条目描述符区域构成。头部包含与整个描述区域相关的信息,而条目描述符区域则描述结果行中的某一列。 在使用SQL描述符区域之前,需要分配一个SQL描述符区域: EXEC SQL ALLOCATE DESCRIPTOR identifier; 当不再需要这个描述符区域时,应及时释放: EXEC SQL DEALLOCATE DESCRIPTOR identifier; 要使用一个描述符区域,需要使用INTO子句声明: EXEC SQL FETCH NEXT FROM mycursor INTO SQL DESCRIPTOR mydesc; 如果结果集为空,该描述符区域仍会包含查询的元数据。 对于还没有执行的预备查询,可以使用DESCRIBE得到其结果集的元数据: EXEC SQL BEGIN DECLARE SECTION; char *sql_stmt = "SELECT * FROM table1"; EXEC SQL END DECLARE SECTION; EXEC SQL PREPARE stmt1 FROM :sql_stmt; EXEC SQL DESCRIBE stmt1 INTO SQL DESCRIPTOR mydesc; 在DESCRIBE和FETCH语句中,INTO和USING关键词的使用相似:它们产生结果集以及一个描述符区域的元数据。 从头部检索一个描述符区域的值并且将其存储到一个宿主变量中: EXEC SQL GET DESCRIPTOR name :hostvar = field; 当前只定义了一个头部描述符区域COUNT,它存放描述符区域的条目(即结果集中包含多少列),宿主变量为一个整数类型,需从条目描述符区域中得到一个具体值: EXEC SQL GET DESCRIPTOR name VALUE num :hostvar = field; num可以是一个字符整数或者一个包含整数的宿主变量。可能的类型如下: CARDINALITY(整数):结果集中的行数 DATA:实际的数据项(这个范围的实际数据类型取决于查询) DATETIME_INTERVAL_CODE(整数):当TYPE是9时,DATETIME_INTERVAL_CODE将具有以下值之一:1表示DATE,2表示TIME,3表示TIMESTAMP,4表示TIME WITH TIME ZONE,5表示TIMESTAMP WITH TIME ZONE。 INDICATOR(整数):指示符(表示一个空值或者一个值截断) LENGTH(整数):以字符计的数据长度 NAME(string):列名 OCTET_LENGTH(整数):以字节计的数据字符表达的长度 PRECISION(整数):精度(用于类型numeric) RETURNED_LENGTH(整数):以字符计的数据长度 RETURNED_OCTET_LENGTH(整数):以字节计的数据字符表达的长度 SCALE(整数):比例(用于类型numeric) TYPE(整数):列的数据类型的数字编码 要检索字段数值并且把它存储到一个宿主变量里,使用如下命令: EXEC SQL GET DESCRIPTOR mydesc VALUE num :hostvar = field num可以是一个字符整数或者一个包含整数的宿主变量。可能的字段有: DATA 实际数据项(这个字段的数据类型依赖于这个查询) NAME(string) 字段名称 手动建立一个描述符区域为一个查询或游标提供输入参数,使用如下命令: EXEC SQL SET DESCRIPTOR name VALUE numfield = :hostvar; 在一个FETCH语句中检索多行记录且用数组类型的宿主变量来存储数据,示例如下: EXEC SQL BEGIN DECLARE SECTION; int id[5]; EXEC SQL END DECLARE SECTION; EXEC SQL FETCH 5 FROM mycursor INTO SQL DESCRIPTOR mydesc; EXEC SQL GET DESCRIPTOR mydesc VALUE 1 :id = DATA; 父主题: SQL描述符区域
  • GS_DATABASE_LINK GS_DATABASE_LINK系统表是用于存储DATABASE LINK信息的系统表,主要记录的是DATABASE LINK对象的详细信息。只有具备sysadmin权限的用户才可以对该系统表进行读操作。 表1 GS_DATABASE_LINK字段 名称 类型 描述 oid oid 当前DATABASE LINK对象的唯一id(隐含属性,必须明确选择)。 dlname name 当前DATABASE LINK的名称。 dlowner oid 当前DATABASE LINK的拥有者的id,为public则为0。 dlfdw oid 当前DATABASE LINK的外部数据封装器的OID。 dlcreater oid 当前DATABASE LINK创建者的id。 options text[] 当前DATABASE LINK连接信息,使用"keyword=value"。 useroptions text[] 当前DATABASE LINK连接远端所使用的用户信息,使用"keyword=value"。 dlacl aclitem[] 当前DATABASE LINK访问权限。 父主题: 系统表
  • 全局临时表函数 pg_get_gtt_relstats(relOid) 描述:显示当前会话指定的全局临时表的基本信息。 参数:全局临时表的OID。 返回值类型:record 示例: gaussdb=# select * from pg_get_gtt_relstats(74069); relfilenode | relpages | reltuples | relallvisible | relfrozenxid | relminmxid -------------+----------+-----------+---------------+--------------+------------ 74069 | 58 | 13000 | 0 | 11151 | 0 (1 row) pg_get_gtt_statistics(relOid, attnum, ''::text) 描述:显示当前会话指定的全局临时表的单列统计信息。 参数:全局临时表的OID和属性attnum。 返回值类型:record 示例: gaussdb=# select * from pg_get_gtt_statistics(74069,1,''::text); starelid | starelkind | staattnum | stainherit | stanullfrac | stawidth | stadistinct | stakind1 | stakind2 | stakind3 | stakind4 | stakind5 | staop1 | staop2 | staop3 | staop4 | staop5 | stanumbers1 | stanumbers2 | stanumbers3 | stanu mbers4 | stanumbers5 | stavalues1 | stavalues2 | stavalues3 | stavalues4 | stavalues5 | stadndistinct | staextinfo ----------+------------+-----------+------------+-------------+----------+-------------+----------+----------+----------+----------+----------+--------+--------+--------+--------+--------+-------------+-------------+-------------+------ -------+-------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------+------------+------------+------------+------------+---------------+------------ 74069 | c | 1 | f | 0 | 4 | -1 | 2 | 3 | 0 | 0 | 0 | 97 | 97 | 0 | 0 | 0 | | {1} | | | | {1,130,260,390,520,650,780,910,1040,1170,1300,1430,1560,1690,1820,1950,2080,2210,2340,2470,2600,2730,2860,2990,3120,3250,3380,3510,3640,3770,3900,4030,4160,4290,4420,4550,4680,4810,4940,5070,5200,5330,5460,5590,57 20,5850,5980,6110,6240,6370,6500,6630,6760,6890,7020,7150,7280,7410,7540,7670,7800,7930,8060,8190,8320,8450,8580,8710,8840,8970,9100,9230,9360,9490,9620,9750,9880,10010,10140,10270,10400,10530,10660,10790,10920,11050,11180,11310,11440,1 1570,11700,11830,11960,12090,12220,12350,12480,12610,12740,12870,13000} | | | | | 0 | (1 row) pg_gtt_attached_pid(relOid) 描述:显示正在使用指定全局临时表的所有线程pid和会话ID。当线程池开启时,如果正在使用全局临时表的会话为detach状态,pid会显示为0,sessionid为会话的ID。 参数:全局临时表的OID。 返回值类型:record 示例: gaussdb=# select * from pg_gtt_attached_pid(74069); relid | pid | sessionid -------+-----------------+----------------- 74069 | 139648170456832 | 139648170456832 74069 | 139648123270912 | 139648123270912 (2 rows) dbe_perf.get_global_full_sql_by_timestamp(start_timestamp timestamp, end_timestamp timestamp) 描述:获取实例级的全量SQL(Full SQL)信息。 返回值类型:record 表1 dbe_perf.get_global_full_sql_by_timestamp参数说明 参数 类型 描述 start_timestamp timestamp SQL启动时间范围的开始时间点。 end_timestamp timestamp SQL启动时间范围的结束时间点。 dbe_perf.get_global_slow_sql_by_timestamp(start_timestamp timestamp, end_timestamp timestamp) 描述:获取实例级的慢SQL(Slow SQL)信息。 返回值类型:record 表2 dbe_perf.get_global_slow_sql_by_timestamp参数说明 参数 类型 描述 start_timestamp timestamp SQL启动时间范围的开始时间点。 end_timestamp timestamp SQL启动时间范围的结束时间点。 statement_detail_decode(detail text, format text, pretty bool) 解析全量/慢SQL语句中的details字段的信息。 表3 statement_detail_decode参数说明 参数 类型 描述 detail text SQL语句产生的事件的集合(不可读)。 format text 解析输出格式,取值为plaintext或json。 pretty bool 当format为plaintext时,是否以优雅的格式展示: true表示通过“\n”分隔事件。 false表示通过“,”分隔事件。 pg_list_gtt_relfrozenxids() 描述:显示各会话的冻结事务xid。 pid=0的行,显示所有会话中最老的冻结事务xid。 参数:无。 返回值类型:record 示例: gaussdb=# select * from pg_list_gtt_relfrozenxids(); pid | relfrozenxid -----------------+-------------- 139648123270912 | 11151 139648170456832 | 11155 0 | 11151 (3 rows) 父主题: 函数和操作符
  • 示例 --向gs_global_config系统表中插入单个弱口令。 gaussdb=# CREATE WEAK PASSWORD DICTIONARY WITH VALUES ('password1'); --向gs_global_config系统表中插入多个弱口令。 gaussdb=# CREATE WEAK PASSWORD DICTIONARY WITH VALUES ('password2'),('password3'); --清空gs_global_config系统表中所有弱口令。 gaussdb=# DROP WEAK PASSWORD DICTIONARY; --查看现有弱口令。 gaussdb=# SELECT * FROM gs_global_config WHERE NAME LIKE 'weak_password';
  • SUMMARY_STAT_SYS_INDEXES 显示集群内所有节点pg_catalog、information_schema以及pg_toast模式中所有系统表的索引状态统计信息(在CN节点使用,对每个节点内系统表的索引状态信息汇总求和)。 表1 SUMMARY_STAT_SYS_INDEXES字段 名称 类型 描述 schemaname name 索引所在的Schema名。 relname name 索引的表名。 indexrelname name 索引名。 idx_scan numeric 该索引上执行的索引扫描次数。 idx_tup_read numeric 该索引上扫描返回的索引项数。 idx_tup_fetch numeric 使用该索引的简单索引扫描在原表中抓取的活跃行数。 父主题: Object
  • MY_IND_SUBPARTITIONS MY_IND_SUBPARTITIONS描述了当前用户拥有的二级分区表Local索引的索引分区信息(不包含分区表全局索引)。所有用户都可以访问。该视图同时存在于PG_CATALOG和SYS schema下。 表1 MY_IND_SUBPARTITIONS字段 名称 类型 描述 index_owner character varying(64) 索引分区所属分区表索引的所有者的名称。 index_name character varying(64) 索引分区所属分区表索引的名称。 partition_name character varying(64) 索引所在一级分区的名称。 subpartition_name character varying(64) 索引所在二级分区的名称。 def_tablespace_name name 索引分区的表空间名称。 high_value text 索引分区所对应分区的边界值。 index_partition_usable boolean 索引分区是否可用: t(true):可用。 f(false):不可用。 schema character varying(64) 索引分区所属分区表索引的模式。 high_value_length integer 索引分区所对应分区的边界的字符长度。 partition_position numeric 索引分区在索引中的位置。 subpartition_position numeric 二级分区在分区中的位置。 status character varying(8) 索引分区是否可用。 tablespace_name name 索引分区的表空间名称。 pct_free numeric 块中最小可用空间百分比。 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(13) 用于二级分区的压缩类型。 blevel numeric 暂不支持,值为NULL。 leaf_blocks numeric 暂不支持,值为NULL。 distinct_keys numeric 暂不支持,值为NULL。 avg_leaf_blocks_per_key numeric 暂不支持,值为NULL。 avg_data_blocks_per_key numeric 暂不支持,值为NULL。 clustering_factor numeric 根据索引的值表示表中行的顺序。需要通过执行analyze进行统计。 num_rows numeric 二级分区中的行数。需要通过执行vacuum进行统计。 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。 user_stats character varying(3) 暂不支持,值为NULL。 global_stats character varying(3) 暂不支持,值为NULL。 interval character varying(3) 分区是否在间隔分区表的间隔节中。 segment_created character varying(3) 索引分区段是否已创建。 domidx_opstatus character varying(6) 暂不支持,值为NULL。 parameters character varying(1000) 暂不支持,值为NULL。 父主题: 系统视图
  • 函数类型解析 从系统表pg_proc中选择所有可能被选到的函数。如果使用了一个不带模式修饰的函数名称,那么认为该函数是那些在当前搜索路径中的函数。如果给出一个带修饰的函数名,那么只考虑指定模式中的函数。 如果搜索路径中找到了多个不同参数类型的函数。将从中选择一个合适的函数。 查找和输入参数类型完全匹配的函数。如果找到一个,则用之。如果输入的实参类型都是unknown类型,则不会找到匹配的函数。 如果未找到完全匹配,请查看该函数是否为一个特殊的类型转换函数。 寻找最优匹配。 抛弃那些输入类型不匹配并且也不能隐式转换成匹配的候选函数。unknown文本在这种情况下可以转换成任何东西。如果只剩下一个候选项,则用之,否则继续下一步。 遍历所有候选函数,保留那些输入类型匹配最准确的。此时,域被看作和它们的基本类型相同。如果没有一个函数能准确匹配,则保留所有候选。如果只剩下一个候选项,则用之,否则继续下一步。 遍历所有候选函数,保留那些需要类型转换时接受首选类型位置最多的函数。如果没有接受首选类型的函数,则保留所有候选。如果只剩下一个候选项,则用之,否则继续下一步。 如果有任何输入参数是unknown类型,检查剩余的候选函数对应参数位置的类型范畴。在每一个能够接受字符串类型范畴的位置使用string类型(这种对字符串的偏爱是合适的,因为unknown文本确实像字符串)。另外,如果所有剩下的候选函数都接受相同的类型范畴,则选择该类型范畴,否则抛出一个错误(因为在没有更多线索的条件下无法作出正确的选择)。现在抛弃不接受选定的类型范畴的候选函数,然后,如果任意候选函数在那个范畴接受一个首选类型,则抛弃那些在该参数位置接受非首选类型的候选函数。如果没有一个候选符合这些测试则保留所有候选。如果只有一个候选函数符合,则使用它;否则,继续下一步。 如果同时有unknown和已知类型的参数,并且所有已知类型的参数有相同的类型,假设unknown参数也是这种类型,检查哪个候选函数可以在unknown参数位置接受这种类型。如果正好一个候选符合,那么使用它。否则,产生一个错误。
  • 示例 示例1:圆整函数参数类型解析。只有一个round函数有两个参数(第一个是numeric,第二个是integer)。所以下面的查询自动把第一个类型为integer的参数转换成numeric类型。 1 2 3 4 5 gaussdb=# SELECT round(4, 4); round -------- 4.0000 (1 row) 实际上它被分析器转换成: 1 gaussdb=# SELECT round(CAST (4 AS numeric), 4); 因为带小数点的数值常量初始时被赋予numeric类型,因此下面的查询将不需要类型转换,并且可能会略微高效一些: 1 gaussdb=# SELECT round(4.0, 4); 示例2:子字符串函数类型解析。有好几个substr函数,其中一个接受text和integer类型。如果用一个未声明类型的字符串常量调用它,系统将选择接受string类型范畴的首选类型(也就是text类型)的候选函数。 1 2 3 4 5 gaussdb=# SELECT substr('1234', 3); substr -------- 34 (1 row) 如果该字符串声明为varchar类型,就像从表中取出来的数据一样,分析器将试着将其转换成text类型: 1 2 3 4 5 gaussdb=# SELECT substr(varchar '1234', 3); substr -------- 34 (1 row) 被分析器转换后实际上变成: 1 gaussdb=# SELECT substr(CAST (varchar '1234' AS text), 3); 分析器从pg_cast表中了解到text和varchar是二进制兼容的,意思是说一个可以传递给接受另一个的函数而不需要做任何物理转换。因此,在这种情况下,实际上没有做任何类型转换。 而且,如果以integer为参数调用函数,分析器将试图将其转换成text类型: 1 2 3 4 5 gaussdb=# SELECT substr(1234, 3); substr -------- 34 (1 row) 被分析器转换后实际上变成: 1 2 3 4 5 gaussdb=# SELECT substr(CAST (1234 AS text), 3); substr -------- 34 (1 row)
  • 背景信息 在SQL语言中,每个数据都与一个决定其行为和用法的数据类型相关。GaussDB提供一个可扩展的数据类型系统,该系统比其它SQL实现更具通用性和灵活性。因此,GaussDB中大多数类型转换是由通用规则来管理的,这种做法允许使用混合类型的表达式。 GaussDB扫描/分析器只将词法元素分解成五个基本种类:整数、浮点数、字符串、标识符和关键字。大多数非数字类型首先表现为字符串。SQL语言的定义允许将常量字符串声明为具体的类型。例如: 1 2 3 4 5 gaussdb=# SELECT text 'Origin' AS "label", point '(0,0)' AS "value"; label | value --------+------- Origin | (0,0) (1 row) 示例中有两个文本常量,类型分别为text和point。如果没有为字符串文本声明类型,则该文本首先被定义成一个unknown类型。 在GaussDB分析器里,有四种基本的SQL结构需要独立的类型转换规则: 函数调用 多数SQL类型系统是建筑在一套丰富的函数上的。函数调用可以有一个或多个参数。因为SQL允许函数重载,所以不能通过函数名直接找到要调用的函数,分析器必须根据函数提供的参数类型选择正确的函数。 操作符 SQL允许在表达式上使用前缀或后缀(单目)操作符,也允许表达式内部使用双目操作符(两个参数)。像函数一样,操作符也可以被重载,因此操作符的选择也和函数一样取决于参数类型。 值存储 INSERT和UPDATE语句将表达式结果存入表中。语句中的表达式类型必须和目标字段的类型一致或者可以转换为一致。 UNION,CASE和相关构造 因为联合SELECT语句中的所有查询结果必须在一列里显示出来,所以每个SELECT子句中的元素类型必须相互匹配并转换成一个统一类型。类似地,一个CASE构造的结果表达式必须转换成统一的类型,这样整个case表达式会有一个统一的输出类型。同样的要求也存在于ARRAY构造以及GREATEST和LEAST函数中。 系统表pg_cast存储了有关数据类型之间的转换关系以及如何执行这些转换的信息。详细信息请参见PG_CAST。 语义分析阶段会决定表达式的返回值类型并选择适当的转换行为。数据类型的基本类型分类,包括:Boolean,numeric,string,bitstring,datetime,timespan,geometric和network。每种类型都有一种或多种首选类型用于解决类型选择的问题。根据首选类型和可用的隐含转换,就可能保证有歧义的表达式(那些有多个候选解析方案的)得到有效的方式解决。 所有类型转换规则都是建立在下面几个基本原则上的: 隐含转换决不能有奇怪的或不可预见的输出。 如果一个查询不需要隐含的类型转换,分析器和执行器不应该进行更多的额外操作。这就是说,任何一个类型匹配、格式清晰的查询不应该在分析器里耗费更多的时间,也不应该向查询中引入任何不必要的隐含类型转换调用。 另外,如果一个查询在调用某个函数时需要进行隐式转换,当用户定义了一个有正确参数的函数后,解释器应该选择使用新函数。 XML类型数据不支持隐式类型转换,包括字符串和XML类型之间的隐式转换。
  • MY_SYS_PRIVS MY_SYS_PRIVS视图显示授予当前用户的系统权限信息。默认所有用户都可以访问。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 MY_SYS_PRIVS字段 名称 类型 描述 grantee character varying(128) 被授予权限的用户或角色的名称。 privilege character varying(40) 系统权限。 admin_option character varying(3) 表示该授权是否包含ADMIN选项。 YES:表示包含ADMIN选项。 NO:表示不包含ADMIN选项。 common character varying(3) 暂不支持,值为NULL。 inherited character varying(3) 暂不支持,值为NULL。 父主题: 系统视图
  • 概述 在嵌入式SQL中进行C语言程序和SQL语句之间的数据传递不需要把数据粘贴到语句中,只需要在SQL语句里写上C语言变量的名称,前缀加一个冒号即可。示例如下: EXEC SQL INSERT INTO sometable VALUES (:v1, 'foo', :v2); 这个语句引用了两个C语言变量:v1和v2,并且使用一个普通的SQL字串文本,这表明一条SQL语句内并不限制只使用某一种数据。 父主题: 宿主变量
  • STATIO_SYS_INDEXES STATIO_SYS_INDEXES显示命名空间中所有系统表索引的I/O状态信息。 表1 STATIO_SYS_INDEXES字段 名称 类型 描述 relid oid 索引的表的OID。 indexrelid oid 该索引的OID。 schemaname name 该索引的模式名。 relname name 该索引的表名。 indexrelname name 索引名称。 idx_blks_read bigint 从索引中读取的磁盘块数。 idx_blks_hit bigint 索引命中缓存数。 父主题: Cache/IO
  • PG_STAT_USER_TABLES PG_STAT_USER_TABLES视图显示所有命名空间中用户自定义普通表和toast表的状态信息。 表1 PG_STAT_USER_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守护进程分析的次。 last_data_changed timestamp with time zone 这个表数据最近修改时间。 父主题: 系统视图
  • 参数说明 DEFINER 定时任务待执行语句在执行时使用的权限。默认情况下使用当前创建定时任务者的权限,当definer被指定时,使用被指定用户user的用户权限。 definer参数只有具有sysadmin权限的用户有权指定。 ON SCHEDULE 定时任务执行时刻。定时任务可以通过schedule设置为执行一次,也可以设置为执行多次: AT timestamp [+ INTERVAL interval] 表示设置定时任务只在timestamp [+ INTERVAL interval] 时间点执行一次。 EVERY interval 表示设置定时任务在每隔interval时间后重复执行。 STARTS timestamp [+ INTERVAL interval] 用户可以给可重复执行的定时任务指定起始时间,即定时任务从timestamp [+ INTERVAL interval]时刻开始执行。当此参数为空时默认从当前时刻开始执行。 ENDS timestamp [+ INTERVAL interval] 用户可以给可重复执行的定时任务指定结束时间,即定时任务从timestamp [+ INTERVAL interval]时刻停止执行。当此参数为空时默认为3999-12-31 16:00:00。 INTERVAL 时间间隔,interval由quantity数字和时间单位组成,例如1 YEAR。 ON COMPLETION [NOT] PRESERVE 默认情况下,一旦事务处于完成状态,系统表中就会立刻删除该定时任务。用户可以通过设置ON COMPLETION PRESERVE来覆盖默认行为。 ENABLE | DISABLE | DISABLE ON SLAVE 创建定时任务后,定时任务默认处于ENABLE状态,即到规定时间立即执行待执行语句。用户可以使用DISABLE关键字,改变定时任务的活动状态。DISABLE ON SLAVE表现与DISABLE一致。 COMMENT 用户可以给定时任务添加注释,注释内容在GS_JOB_ATTRIBUTE表中查看。 DO 定时任务待执行语句。
  • 示例 --创建表。 gaussdb=# CREATE TABLE t_ev(num int); --创建一个执行一次的定时任务。 gaussdb=# CREATE EVENT IF NOT EXISTS event_e1 ON SCHEDULE AT sysdate + interval 5 second + interval 33 minute DISABLE DO insert into t_ev values(0); --创建一个每隔一分钟执行一次的定时任务。 gaussdb=# CREATE EVENT IF NOT EXISTS event_e1 ON SCHEDULE EVERY 1 minute DO insert into t_ev values(1);
  • 注意事项 定时任务相关操作只有sql_compatibility = 'B'时支持。 用户操作(创建/修改/删除)定时任务时,非sysadmin用户需要被sysadmin用户赋予操作定时任务的权限。定时任务操作权限与高级包DBE_SCHEDULER中创建定时任务赋权操作一致。 定时任务时间间隔interval表达式目前兼容了浮点数语法,例如interval 0.5 minute,但是计算时会将浮点数取整,所以不建议interval时间间隔使用浮点数形式。 同一database下不支持同名定时任务。 定时任务中待执行语句范围是除安全相关操作以外任意SQL语句,但对于某些有约束的语句会执行失败。例如:不支持通过复合语句创建database。 定时任务待执行语句不支持的安全相关操作范围主要包括: 使用加密函数。 创建、设置用户、group。 连接数据库。 函数加密等。 定时任务指定definer选项在以下场景下会指定失败: 操作定时任务的用户不具有sysadmin权限。 当前用户与被指定definer不一致时: 指定definer为初始用户。 指定definer为运维管理员、监控管理员。 开启三权分立,enableSeparationOfDuty=on。
  • 语法格式 CREATE [DEFINER = user] EVENT [IF NOT EXISTS] event_name ON SCHEDULE schedule [ON COMPLETION [NOT] PRESERVE] [ENABLE | DISABLE | DISABLE ON SLAVE] [COMMENT 'string'] DO event_body; schedule: { AT timestamp [+ INTERVAL interval] ... | EVERY interval [STARTS timestamp [+ INTERVAL interval] ...] [ENDS timestamp [+ INTERVAL interval] ...] } interval: quantity {YEAR | MONTH | DAY | HOUR | MINUTE | SECOND | YEAR TO MONTH | DAY TO HOUR | DAY TO MINUTE | DAY TO SECOND | HOUR TO MINUTE | HOUR TO SECOND | MINUTE TO SECOND}
  • 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 --查询会话信息。 gaussdb=# SELECT sid,serial#,username FROM dv_sessions; sid | serial# | username -----------------+---------+---------- 140131075880720 | 0 | omm 140131025549072 | 0 | omm 140131073779472 | 0 | omm 140131071678224 | 0 | omm 140131125774096 | 0 | 140131127875344 | 0 | 140131113629456 | 0 | 140131094742800 | 0 | (8 rows) --结束SID为140131075880720的会话。 gaussdb=# ALTER SYSTEM KILL SESSION '140131075880720,0' IMMEDIATE;
  • Replication stat 表2 Replication stat报表主要内容 列名称 描述 Thread Id 线程的PID。 Usesys Id 用户系统ID。 Usename 用户名称。 Application Name 应用程序。 Client Addr 客户端地址。 Client Hostname 客户端主机名。 Client Port 客户端端口。 Backend Start 程序起始时间。 State 日志复制状态。 Sender Sent Location 发送端发送日志位置。 Receiver Write Location 接收端write日志位置。 Receiver Flush Location 接收端flush日志位置。 Receiver Replay Location 接收端replay日志位置。 Sync Priority 同步优先级。 Sync State 同步状态。
  • PG_LANGUAGE PG_LANGUAGE系统表登记编程语言,用户可以用这些语言或接口写函数或者存储过程。 表1 PG_LANGUAGE字段 名称 类型 引用 描述 oid oid - 行标识符(隐含字段;必须明确选择)。 lanname name - 语言的名称。 lanowner oid PG_AUTHID.oid 语言的所有者。 lanispl boolean - true:表示用户定义的语言。 false:表示内部语言,比如SQL。 目前,gs_dump仍然使用该字段判断哪种语言需要转储,但是这些可能在将来被其它机制取代。 lanpltrusted boolean - true:这是可信语言,意味着系统相信它不会被授予任何正常SQL执行环境之外的权限。 false:这是不可信语言。只有初始用户可以用不可信语言创建函数。 lanplcallfoid oid PG_PROC.oid 对于非内部语言,这是指向该语言处理器的引用,语言处理器是一个特殊函数, 负责执行以某种语言写的所有函数。 laninline oid PG_PROC.oid 这个字段引用一个负责执行“inline”匿名代码块的函数(DO块)。如果不支持内联块则为零。 lanvalidator oid PG_PROC.oid 这个字段引用一个语言校验器函数,它负责检查新创建的函数的语法和有效性。如果没有提供校验器,则为零。 lanacl aclitem[] - 访问权限。 父主题: 系统表
  • GLOBAL_STATIO_ALL_INDEXES GLOBAL_STATIO_ALL_INDEXES视图包含各节点的数据库中的每个索引行,显示特定索引的I/O的统计。 表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 索引命中缓存数。 父主题: Cache/IO
  • PG_STATIO_ALL_SEQUENCES PG_STATIO_ALL_SEQUENCES视图显示当前数据库中每个序列的I/O的统计信息。 表1 PG_STATIO_ALL_SEQUENCES字段 名称 类型 描述 relid oid 序列OID。 schemaname name 序列的模式名。 relname name 序列名。 blks_read bigint 从序列中读取的磁盘块数。 blks_hit bigint 序列命中缓存数。 父主题: 系统视图
  • WLM_CONTROLGROUP_CONFIG WLM_CONTROLGROUP_CONFIG视图显示数据库内所有的控制组信息。 表1 WLM_CONTROLGROUP_CONFIG字段 名称 类型 描述 name text 控制组的名称。 type text 控制组的类型。 gid bigint 控制组ID。 classgid bigint Workload所属Class的控制组ID。 class text Class控制组。 workload text Workload控制组。 shares bigint 控制组分配的CPU资源配额。 limits bigint 控制组分配的CPU资源限额。 wdlevel bigint Workload控制组层级。 cpucores text 控制组使用的CPU核的信息。 父主题: Workload Manager
  • 语法格式 修改物化视图的所属用户。 ALTER MATERIALIZED VIEW [ IF EXISTS ] mv_name OWNER TO new_owner; 修改物化视图的列。 ALTER MATERIALIZED VIEW [ IF EXISTS ] mv_name RENAME [ COLUMN ] column_name TO new_column_name; 重命名物化视图。 ALTER MATERIALIZED VIEW [ IF EXISTS ] mv_name RENAME TO new_name;
共100000条