华为云用户手册

  • log_min_error_statement 参数说明:控制在服务器日志中记录错误的SQL语句。 该参数属于SUSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:枚举类型,有效值有debug、debug5、debug4、debug3、debug2、debug1、info、log、notice、warning、error、fatal、panic。参数的详细信息请参见表1。 设置为error,表示导致错误、日志消息、致命错误、panic的语句都将被记录。 设置为panic,表示关闭此特性。 默认值:error
  • backtrace_min_messages 参数说明:控制当产生该设置参数级别相等或更高级别的信息时,会打印函数的堆栈信息到服务器日志文件中。 该参数属于SUSET类型参数,请参考表1中对应设置方法进行设置。 该参数作为客户现场问题定位手段使用,且由于频繁的打印函数栈会对系统的开销及稳定性有一定的影响,因此如果需要进行问题定位时,建议避免将backtrace_min_messages的值设置为fatal及panic以外的级别。 取值范围:枚举类型 有效值有debug、debug5、debug4、debug3、debug2、debug1、info、log、notice、warning、error、fatal、panic。参数的详细信息请参见表1。 默认值:panic
  • 原型 PGresult* PQexecPrepared(PGconn* conn, const char* stmtName, int nParams, const char* const* paramValues, const int* paramLengths, const int* paramFormats, int resultFormat);
  • 参数 表1 PQexecPrepared参数 关键字 参数说明 conn 连接句柄。 stmtName stmt名称,可以用""或者NULL来引用未命名语句,否则它必须是一个现有预备语句的名字。 nParams 参数个数。 paramValues 参数的实际值。 paramLengths 参数的实际数据长度。 paramFormats 参数的格式(文本或二进制)。 resultFormat 结果的格式(文本或二进制)。
  • DB_SEQUEN CES DB_SEQUENCES视图显示当前用户能够访问的所有序列的信息。该视图同时存在于PG_CATA LOG 和SYS Schema下。 表1 DB_SEQUENCES字段 名称 类型 描述 sequence_owner name 序列所有者。 sequence_name name 序列的名称。 min_value int16 序列最小值。 max_value int16 序列最大值。 increment_by int16 序列的增量。 cycle_flag character(1) 序列是否是循环序列。取值范围: Y:循环序列。 N:不是循环序列。 order_flag character varying(1) 标志序列是否按照请求顺序发生,暂不支持,值为NULL。 last_number int16 上一序列的值。 cache_size int16 序列磁盘缓存大小。 scale_flag character varying(1) 标志是否为可扩展序列,暂不支持,值为NULL。 extend_flag character varying(1) 标志可扩展序列生成的值是否超出序列最大值、最小值范围。暂不支持,值为NULL。 sharded_flag character varying(1) 标志是否是分片序列,暂不支持,值为NULL。 session_flag character varying(1) 标志序列是否是会话私有,暂不支持,值为NULL。 keep_value character varying(1) 标志在失败后的replay期间是否保留序列值,暂不支持,值为NULL。 父主题: 系统视图
  • GLOBAL_POOLER_STATUS GLOBAL_POOLER_STATUS视图用于查询全局CN 的pooler中的缓存连接状态。 表1 GLOBAL_POOLER_STATUS字段 名称 类型 描述 source_node_name name 源节点名称。 database text 数据库名称。 user_name text 用户名。 tid bigint 非线程池逻辑下为连接CN的线程id,线程池逻辑下为连接CN的sessionid。 node_oid bigint 连接的实例节点OID。 node_name name 连接的实例节点名称。 in_use boolean 连接是否正被使用: t(true):表示连接正在使用。 f(false):表示连接没有使用。 fdsock bigint 端口文件描述符。 remote_pid bigint 连接的远端节点线程号。 session_params text 会话参数。 父主题: Utility
  • SUMMARY_STAT_DATABASE 显示集群内数据库各节点的统计信息的汇总求和结果(在CN节点使用。按数据库名对数据库每个节点的状态信息汇总求和,其中timestamp类型字段不进行求和,仅取所有节点该字段的最新值)。 表1 SUMMARY_STAT_DATABASE 名称 类型 描述 datname name 数据库的名称。 numbackends bigint 当前连接到该数据库的后端数。 xact_commit numeric 此数据库中已经提交的事务数。 xact_rollback numeric 此数据库中已经回滚的事务数。 blks_read numeric 在这个数据库中读取的磁盘块的数量。 blks_hit numeric 高速缓存中已经命中的磁盘块的次数,这种情况下不需要从磁盘读取(高速缓存只包括缓冲区高速缓存,不包括操作系统的文件系统缓存)。 tup_returned numeric 该数据库中顺序扫描获取的活跃行数和索引扫描返回的索引行数。 tup_fetched numeric 当前数据库通过索引返回的行数。 tup_inserted bigint 插入的行数。 tup_updated bigint 更新的行数。 tup_deleted bigint 删除的行数。 conflicts bigint 由于与数据库回放发生冲突而取消的查询数量(冲突仅在备机上发生)。请参见STAT_DATABASE_CONFLI CTS 获取更多信息。 temp_files numeric 该数据库中查询语句创建的临时文件数量。统计所有临时文件,不受GUC参数log_temp_files设置值影响。 temp_bytes numeric 该数据库中查询语句写入临时文件的数据总量。统计所有临时文件,不受GUC参数log_temp_files设置值影响。 deadlocks bigint 在该数据库中检索的死锁数。 blk_read_time double precision 通过数据库后端读取数据文件块花费的时间,以毫秒计算。 blk_write_time double precision 通过数据库后端写入数据文件块花费的时间,以毫秒计算。 stats_reset timestamp with time zone 重置当前状态统计的时间。 父主题: Object
  • 优化建议 VALUES 通过INSERT语句批量插入数据时,建议将多条记录合并入一条语句中执行插入,以提高数据加载性能。例如,INSERT INTO sections VALUES (30, 'Administration', 31, 1900),(40, 'Development', 35, 2000), (50, 'Development' , 60 , 2001); 如果INSERT多VALUES语句中VALUES的值分布在一个DN上, GaussDB 可以把语句下推到对应DN执行。目前只支持VALUES中值为常量,简单表达式和可下推函数(pg_proc中字段provolatile为'i')。如果表中列带有DEFAULT值,只支持DEFAULT值为常量,简单表达式。单VALUES不能下推单DN的语句,多VALUES同样不支持下推。
  • 参数说明 WITH [ RECURSIVE ] with_query [, ...] 用于声明一个或多个可以在主查询中通过名称引用的子查询,相当于临时表。 如果声明了RECURSIVE,那么允许SELECT子查询通过名称引用它自己。 其中with_query的详细格式为: with_query_name [ ( column_name [, ...] ) ] AS [ [ NOT ] MATERIALIZED ] ( {SELECT | VALUES | INSERT | UPDATE | DELETE} ) – with_query_name指定子查询生成的结果集名称,在查询中可使用该名称访问子查询的结果集。 – column_name指定子查询结果集中显示的列名。 – 每个子查询可以是SELECT,VALUES,INSERT,UPDATE或DELETE语句。 – 用户可以使用MATERIALIZED / NOT MATERIALIZED对CTE进行修饰。 如果声明为MATERIALIZED,WITH查询将被物化,生成一个子查询结果集的拷贝,在引用处直接查询该拷贝,因此WITH子查询无法和主干SELECT语句进行联合优化(如谓词下推、等价类传递等),对于此类场景可以使用NOT MATERIALIZED进行修饰,如果WITH查询语义上可以作为子查询内联执行,则可以进行上述优化。 如果用户没有显示声明物化属性则遵守以下规则:如果CTE只在所属主干语句中被引用一次,且语义上支持内联执行,则会被改写为子查询内联执行,否则以CTE Scan的方式物化执行。 INSERT ON DUPLICATE KEY UPDATE不支持WITH及WITH RECURSIVE子句。 INSERT语句的输出,只会显示最外层query block插入的tuple数量。比如: with cte as (insert into t1 values(1) retunring * ) insert into t1 select * from cte; 只会显示插入一条tuple,但实际上插入了两条。 plan_hint子句 以/*+ */的形式在INSERT关键字后,用于对INSERT对应的语句块生成的计划进行hint调优,详细用法请参见章节使用Plan Hint进行调优。每条语句中只有第一个/*+ plan_hint */注释块会作为hint生效,里面可以写多条hint。 table_name 要插入数据的目标表名。 取值范围:已存在的表名。 支持使用DATABASE LINK方式对远端表进行操作,使用方式详情请见DATABASE LINK。 column_name 目标表中的字段名: 字段名可以使用子字段名或者数组下标修饰。 没有在字段列表中出现的每个字段,将由系统默认值,或者声明时的默认值填充,若都没有则用NULL填充。 目标字段(column_name)可以按顺序排列。如果没有列出任何字段,则默认全部字段,且顺序为表声明时的顺序。 如果value子句和query中只提供了N个字段,则目标字段为前N个字段。 value子句和query提供的值在表中从左到右关联到对应列。 取值范围:已存在的字段名。 expression 赋予对应column的一个有效表达式或值: 如果是INSERT ON DUPLICATE KEY UPDATE语句下,expression可以为VALUES(column_name)或EXCLUDED.column_name用来表示引用冲突行对应的column_name字段的值。需注意,其中VALUES(column_name)不支持嵌套在表达式中(例如VALUES(column_name)+1),但EXCLUDED不受此限制。 向表中字段插入单引号 " ' "时需要使用单引号自身进行转义。 如果插入行的表达式不是正确的数据类型,系统试图进行类型转换,若转换不成功,则插入数据失败,系统返回错误信息。 DEFAULT 对应字段名的缺省值。如果没有缺省值,则为NULL。 query 一个查询语句(SELECT语句),将查询结果作为插入的数据。 RETURNING 返回实际插入的行,RETURNING列表的语法与SELECT的输出列表一致。注意:INSERT ON DUPLICATE KEY UPDATE不支持RETURNING子句。 output_expression INSERT命令在每一行都被插入之后用于计算输出结果的表达式。 取值范围:该表达式可以使用table的任意字段。可以使用*返回被插入行的所有字段。 output_name 字段的输出名称。 取值范围:字符串,符合标识符命名规范。 ON DUPLICATE KEY UPDATE 对于带有唯一约束(UNIQUE INDEX或PRIMARY KEY)的表,如果插入数据违反唯一约束,则对冲突行执行UPDATE子句完成更新。如果UPDATE子句为NOTHING,则不做任何操作。 对于不带唯一约束的表,则仅执行插入。 支持触发器,触发器执行顺序由实际执行流程决定: 执行INSERT: 触发BEFORE INSERT、AFTER INSERT触发器。 执行UPDATE:触发BEFORE INSERT、BEFORE UPDATE、AFTER UPDATE触发器。 执行UPDATE NOTHING: 触发BEFORE INSERT触发器。 不支持延迟生效(DEFERRABLE)的唯一约束或主键。 如果表中存在多个唯一约束,如果所插入数据违反多个唯一约束,对于检测到冲突的第一行进行更新,其他冲突行不更新(检查顺序与索引维护具有强相关性,一般先创建的索引先进行冲突检查)。 分布列、唯一索引列不允许UPDATE。 UPDATE的WHERE子句不支持包含子链接。
  • 注意事项 表的所有者、拥有表INSERT权限的用户或拥有INSERT ANY TABLE权限的用户,可向表中插入数据,系统管理员默认拥有此权限。 如果使用RETURNING子句,用户必须要有该表的SELECT权限。 如果使用ON DUPLICATE KEY UPDATE,用户必须要有该表的INSERT、UPDATE权限,UPDATE子句中列的SELECT权限。 如果使用query子句插入来自查询里的数据行,用户还需要拥有在查询里使用的表的SELECT权限。 如果使用query子句插入来自查询动态数据脱敏列的数据,插入的结果即为脱敏后的值,无法被还原。 当连接到TD兼容的数据库时,td_compatible_truncation参数设置为on时,将启用超长字符串自动截断功能,在后续的INSERT语句中(不包含外表的场景下),对目标表中CHAR和VARCHAR类型的列上插入超长字符串时,系统会自动按照目标表中相应列定义的最大长度对超长字符串进行截断。 如果向字符集为字节类型编码(SQL_ASCII,LATIN1等)的数据库中插入多字节字符数据(如汉字等),且字符数据跨越截断位置,这种情况下,按照字节长度自动截断,自动截断后会在尾部产生非预期结果。如果用户有对于截断结果正确性的要求,建议用户采用UTF8等能够按照字符截断的输入字符集作为数据库的编码集。
  • 语法格式 1 2 3 4 5 6 7 [ WITH [ RECURSIVE ] with_query [, ...] ] INSERT [/*+ plan_hint */] INTO table_name [ AS alias ] [ ( column_name [, ...] ) ] { DEFAULT VALUES | VALUES {( { expression | DEFAULT } [, ...] ) }[, ...] | query } [ ON DUPLICATE KEY UPDATE { NOTHING | { column_name = { expression | DEFAULT } } [, ...] [ WHERE condition ] } ] [ RETURNING {* | {output_expression [ [ AS ] output_name ] }[, ...]} ];
  • PG_SETTINGS PG_SETTINGS视图显示数据库运行时参数的相关信息。 表1 PG_SETTINGS字段 名称 类型 描述 name text 参数名称。 setting text 参数当前值。 unit text 参数的单位。 category text 参数的逻辑组。 short_desc text 参数的简单描述。 extra_desc text 参数的详细描述。 context text 设置参数值的上下文,包括internal、postmaster、sighup、backend、superuser、user。 vartype text 参数类型,包括bool、enum、integer、real、string。 source text 参数的赋值方式。 min_val text 参数最小值。如果参数类型不是数值型,那么该字段值为null。 max_val text 参数最大值。如果参数类型不是数值型,那么该字段值为null。 enumvals text[] enum类型参数合法值。如果参数类型不是enum型,那么该字段值为null。 boot_val text 数据库启动时参数默认值。 reset_val text 数据库重置时参数默认值。 sourcefile text 设置参数值的配置文件。如果参数不是通过配置文件赋值,那么该字段值为null。 sourceline integer 设置参数值的配置文件的行号。如果参数不是通过配置文件赋值,那么该字段值为null。 父主题: 系统视图
  • V$NLS_PA RAM ETERS V$NLS_PARAMETERS视图显示数据库当前配置的NLS(National Language Support)参数和参数的值。所有用户都可以访问,该视图同时存在于PG_CATALOG和SYS Schema下。 表1 V$NLS_PARAMETERS字段 名称 类型 描述 parameter character varying(64) NLS(National Language Support)参数名。 value character varying(64) NLS(National Language Support)参数的值。 con_id numeric 暂不支持,值为0。 父主题: 系统视图
  • SUMMARY_TRANSACTIONS_RUNNING_XACTS 显示集群中各个CN节点运行事务的信息,字段内容和transactions_running_xacts一致。 表1 SUMMARY_TRANSACTIONS_RUNNING_XACTS字段 名称 类型 描述 handle integer 事务在GTM对应的句柄。 gxid xid 事务id号。 state tinyint 事务状态(3:prepared或者0:starting)。 node text 节点名称。 xmin xid 节点上当前数据涉及的最小事务号xmin。 vacuum boolean 标志当前事务是否是lazy vacuum事务。 timeline bigint 标志数据库重启次数。 prepare_xid xid 处于prepared状态的事务的id号,若不在prepared状态,值为0。 pid bigint 事务对应的线程id。 next_xid xid 本地活跃事务最小 CS N值。 父主题: Transaction
  • SUMMARY_STATIO_SYS_SEQUENCES SUMMARY_STATIO_SYS_SEQUENCES视图显示数据库内汇聚的命名空间中所有系统序列的I/O状态信息。 表1 SUMMARY_STATIO_SYS_SEQUENCES字段 名称 类型 描述 schemaname name 序列中模式名。 relname name 序列名。 blks_read numeric 从序列中读取的磁盘块数。 blks_hit numeric 序列中缓存命中数。 父主题: Cache/IO
  • 存储过程支持自治事务 自治事务可以在存储过程中定义,标识符为PRAGMA AUTONOMOUS_TRANSACTION,其余语法与创建存储过程语法相同,示例如下。 --建表 gaussdb=# create table t2(a int, b int); NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'a' as the distribution column by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CREATE TABLE gaussdb=# insert into t2 values(1,2); INSERT 0 1 gaussdb=# select * from t2; a | b ---+--- 1 | 2 (1 row) --创建包含自治事务的存储过程 gaussdb=# CREATE OR REPLACE PROCEDURE autonomous_4(a int, b int) AS DECLARE num3 int := a; num4 int := b; PRAGMA AUTONOMOUS_TRANSACTION; BEGIN insert into t2 values(num3, num4); dbe_output.print_line('just use call.'); END; / CREATE PROCEDURE --创建调用自治事务存储过程的普通存储过程 gaussdb=# CREATE OR REPLACE PROCEDURE autonomous_5(a int, b int) AS DECLARE BEGIN dbe_output.print_line('just no use call.'); insert into t2 values(666, 666); autonomous_4(a,b); rollback; END; / CREATE PROCEDURE --调用普通存储过程 gaussdb=# select autonomous_5(11,22); just no use call. just use call. autonomous_5 -------------- (1 row) --查看表结果 gaussdb=# select * from t2 order by a; a | b ----+---- 1 | 2 11 | 22 (2 rows) 上述例子,最后在回滚的事务块中执行包含自治事务的存储过程,直接说明了自治事务的特性,即主事务的回滚,不会影响自治事务已经提交的内容。 父主题: 自治事务
  • 算子说明 InitPlan是GaussDB的子计划的一部分。GaussDB中子查询计划可分为相关子计划和非相关子计划,相关子计划是指子查询依赖外部查询的行,不可独立于外部查询执行,非相关子计划则相反。在GaussDB中,SubPlan或InitPlan都可以叫做子计划,是相对于整个计划而言可以相对独立执行的部分,一般由不能提升的子计划生成。SubPlan主要是相关子计划生成的,InitPlan则是非相关子计划生成的。SubPlan是在主查询执行期间运行的,在主查询的每一行上重新执行一次,而InitPlan是在主查询执行之前运行的,结果是一次性的,它们在查询开始时计算一次,然后缓存起来在整个查询执行期间重用,所以InitPlan效率会更高。
  • DBE_SQL_UTIL.show_sql_patch show_sql_patch是用于显示给定patch_name对应的SQL PATCH的接口函数,返回运行结果。 限制仅初始用户、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
  • 窗口函数 窗口函数与OVER语句一起使用。OVER语句用于对数据进行分组,并对组内元素进行排序。窗口函数用于给组内的值生成序号。 窗口函数中的order by后面必须跟字段名,若order by后面跟数字,该数字会被按照常量处理,因此对目标列没有起到排序的作用。 RANK() 描述:RANK函数为各组内值生成跳跃排序序号,其中,相同的值具有相同序号。 返回值类型:BIGINT 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 gaussdb=# CREATE TABLE rank_t1(a int, b int); gaussdb=# INSERT INTO rank_t1 VALUES(1,1),(1,1),(1, 2),(1, 3),(2, 4),(2, 5),(3,6); gaussdb=# SELECT a,b,RANK() OVER(PARTITION BY a ORDER BY b) FROM rank_t1; a | b | rank ---+---+------ 1 | 1 | 1 1 | 1 | 1 1 | 2 | 3 1 | 3 | 4 2 | 4 | 1 2 | 5 | 2 3 | 6 | 1 (7 rows) gaussdb=# DROP TABLE rank_t1; ROW_NUMBER() 描述:ROW_NUMBER函数为各组内值生成连续排序序号,其中,相同的值其序号也不相同。 返回值类型:BIGINT 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 gaussdb=# CREATE TABLE row_number_t1(a int, b int); gaussdb=# INSERT INTO row_number_t1 VALUES(1,1),(1,1),(1, 2),(1, 3),(2, 4),(2, 5),(3,6); gaussdb=# SELECT a,b,ROW_NUMBER() OVER(PARTITION BY a ORDER BY b) FROM row_number_t1; a | b | row_number ---+---+------------ 1 | 1 | 1 1 | 1 | 2 1 | 2 | 3 1 | 3 | 4 2 | 4 | 1 2 | 5 | 2 3 | 6 | 1 (7 rows) gaussdb=# DROP TABLE row_number_t1; DENSE_RANK() 描述:DENSE_RANK函数为各组内值生成连续排序序号,其中,相同的值具有相同序号。 返回值类型:BIGINT 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 gaussdb=# CREATE TABLE dense_rank_t1(a int, b int); gaussdb=# INSERT INTO dense_rank_t1 VALUES(1,1),(1,1),(1, 2),(1, 3),(2, 4),(2, 5),(3,6); gaussdb=# SELECT a,b,DENSE_RANK() OVER(PARTITION BY a ORDER BY b) FROM dense_rank_t1; a | b | dense_rank ---+---+------------ 1 | 1 | 1 1 | 1 | 1 1 | 2 | 2 1 | 3 | 3 2 | 4 | 1 2 | 5 | 2 3 | 6 | 1 (7 rows) gaussdb=# DROP TABLE dense_rank_t1; PERCENT_RANK() 描述:PERCENT_RANK函数为各组内对应值生成相对序号,即根据公式 (rank - 1) / (totalrows - 1)计算所得的值。其中rank为该值依据RANK函数所生成的对应序号,totalrows为该分组内的总元素个数。 返回值类型:DOUBLE PRECISION 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 gaussdb=# CREATE TABLE percent_rank_t1(a int, b int); gaussdb=# INSERT INTO percent_rank_t1 VALUES(1,1),(1,1),(1, 2),(1, 3),(2, 4),(2, 5),(3,6); gaussdb=# SELECT a,b,PERCENT_RANK() OVER(PARTITION BY a ORDER BY b) FROM percent_rank_t1; a | b | percent_rank ---+---+------------------ 1 | 1 | 0 1 | 1 | 0 1 | 2 | .666666666666667 1 | 3 | 1 2 | 4 | 0 2 | 5 | 1 3 | 6 | 0 (7 rows) gaussdb=# DROP TABLE percent_rank_t1; CUME_DIST() 描述:CUME_DIST函数为各组内对应值生成累积分布序号。即根据公式(小于等于当前值的数据行数)/(该分组总行数totalrows)计算所得的相对序号。 返回值类型:DOUBLE PRECISION 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 gaussdb=# CREATE TABLE cume_dist_t1(a int, b int); gaussdb=# INSERT INTO cume_dist_t1 VALUES(1,1),(1,1),(1, 2),(1, 3),(2, 4),(2, 5),(3,6); gaussdb=# SELECT a,b,CUME_DIST() OVER(PARTITION BY a ORDER BY b) FROM cume_dist_t1; a | b | cume_dist ---+---+----------- 1 | 1 | .5 1 | 1 | .5 1 | 2 | .75 1 | 3 | 1 2 | 4 | .5 2 | 5 | 1 3 | 6 | 1 (7 rows) gaussdb=# DROP TABLE cume_dist_t1; NTILE(num_buckets integer) 描述:NTILE函数根据num_buckets integer将有序的数据集合平均分配到num_buckets所指定数量的桶中,并将桶号分配给每一行。分配时应尽量做到平均分配。 返回值类型:INTEGER 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 gaussdb=# CREATE TABLE ntile_t1(a int, b int); gaussdb=# INSERT INTO ntile_t1 VALUES(1,1),(1,1),(1, 2),(1, 3),(2, 4),(2, 5),(3,6); gaussdb=# SELECT a,b,NTILE(2) OVER(PARTITION BY a ORDER BY b) FROM ntile_t1; a | b | ntile ---+---+------- 1 | 1 | 1 1 | 1 | 1 1 | 2 | 2 1 | 3 | 2 2 | 4 | 1 2 | 5 | 2 3 | 6 | 1 (7 rows) gaussdb=# DROP TABLE ntile_t1; LAG(value any [, offset integer [, default any ]]) 描述:LAG函数为各组内对应值生成滞后值。即当前值对应的行数往前偏移offset位后所得行的value值作为序号。若经过偏移后行数不存在,则对应结果取为default值。若无指定,在默认情况下,offset取为1,default值取为NULL。default值的类型需要与value值的类型保持一致。 返回值类型:与参数数据类型相同 示例: 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 41 42 43 44 45 46 47 48 -- 建表并插入数据 gaussdb=# CREATE TABLE ta1 (hire_date date, last_name varchar(20), department_id int); CREATE TABLE gaussdb=# INSERT INTO ta1 VALUES('07-DEC-02', 'Raphaely', 30); INSERT 0 1 gaussdb=# INSERT INTO ta1 VALUES('24-JUL-05', 'Tobias', 30); INSERT 0 1 gaussdb=# INSERT INTO ta1 VALUES('24-DEC-05', 'Baida', 30); INSERT 0 1 gaussdb=# INSERT INTO ta1 VALUES('18-MAY-03', 'Khoo', 30); INSERT 0 1 gaussdb=# INSERT INTO ta1 values('15-NOV-06', 'Himuro', 30); INSERT 0 1 gaussdb=# INSERT INTO ta1 values('10-AUG-07', 'Colmenares', 30); INSERT 0 1 gaussdb=# INSERT INTO ta1 values('10-MAY-07', 'yq', 11); INSERT 0 1 gaussdb=# INSERT INTO ta1 values('10-MAY-08', 'zi', 11); INSERT 0 1 gaussdb=# INSERT INTO ta1 values('', 'yq1', 30); INSERT 0 1 gaussdb=# INSERT INTO ta1 values(null, 'yq2', 30); INSERT 0 1 gaussdb=# INSERT INTO ta1 values('10-DEC-07', 'yq3', 30); INSERT 0 1 gaussdb=# INSERT INTO ta1 values(null, null, 11); INSERT 0 1 gaussdb=# INSERT INTO ta1 values(null, null, 11); INSERT 0 1 -- 调用LAG,指定offset=3, default=null gaussdb=# SELECT hire_date, last_name, department_id, lag(hire_date, 3, null) OVER (PARTITION BY department_id ORDER BY last_name) AS "NextHired" FROM ta1 ORDER BY department_id; hire_date | last_name | department_id | NextHired ---------------------+------------+---------------+--------------------- 2007-05-10 00:00:00 | yq | 11 | 2008-05-10 00:00:00 | zi | 11 | | | 11 | | | 11 | 2007-05-10 00:00:00 2005-12-24 00:00:00 | Baida | 30 | 2007-08-10 00:00:00 | Colmenares | 30 | 2006-11-15 00:00:00 | Himuro | 30 | 2003-05-18 00:00:00 | Khoo | 30 | 2005-12-24 00:00:00 2002-12-07 00:00:00 | Raphaely | 30 | 2007-08-10 00:00:00 2005-07-24 00:00:00 | Tobias | 30 | 2006-11-15 00:00:00 | yq1 | 30 | 2003-05-18 00:00:00 | yq2 | 30 | 2002-12-07 00:00:00 2007-12-10 00:00:00 | yq3 | 30 | 2005-07-24 00:00:00 (13 rows) LEAD(value any [, offset integer [, default any ]]) 描述:LEAD函数为各组内对应值生成提前值。即当前值对应的行数向后偏移offset位后所得行的value值作为序号。若经过向后偏移后行数超过当前组内的总行数,则对应结果取为default值。若无指定,在默认情况下,offset取为1,default值取为NULL。default值的类型需要与value值的类型保持一致。 返回值类型:与参数数据类型相同。 示例: -- 建表并插入数据 gaussdb=# CREATE TABLE ta1 (hire_date date, last_name varchar(20), department_id int); CREATE TABLE gaussdb=# INSERT INTO ta1 values('07-DEC-02', 'Raphaely', 30); INSERT 0 1 gaussdb=# INSERT INTO ta1 values('24-JUL-05', 'Tobias', 30); INSERT 0 1 gaussdb=# INSERT INTO ta1 values('24-DEC-05', 'Baida', 30); INSERT 0 1 gaussdb=# INSERT INTO ta1 values('18-MAY-03', 'Khoo', 30); INSERT 0 1 gaussdb=# INSERT INTO ta1 values('15-NOV-06', 'Himuro', 30); INSERT 0 1 gaussdb=# INSERT INTO ta1 values('10-AUG-07', 'Colmenares', 30); INSERT 0 1 gaussdb=# INSERT INTO ta1 values('10-MAY-07', 'yq', 11); INSERT 0 1 gaussdb=# INSERT INTO ta1 values('10-MAY-08', 'zi', 11); INSERT 0 1 gaussdb=# INSERT INTO ta1 values('', 'yq1', 30); INSERT 0 1 gaussdb=# INSERT INTO ta1 values(null, 'yq2', 30); INSERT 0 1 gaussdb=# INSERT INTO ta1 values('10-DEC-07', 'yq3', 30); INSERT 0 1 gaussdb=# INSERT INTO ta1 values(null, null, 11); INSERT 0 1 gaussdb=# INSERT INTO ta1 values(null, null, 11); INSERT 0 1 -- 调用LEAD,指定offset=2 gaussdb=# SELECT hire_date, last_name, department_id, lead(hire_date, 2) OVER (PARTITION BY department_id ORDER BY last_name) AS "NextHired" FROM ta1 ORDER BY department_id; hire_date | last_name | department_id | NextHired ---------------------+------------+---------------+--------------------- 2007-05-10 00:00:00 | yq | 11 | 2008-05-10 00:00:00 | zi | 11 | | | 11 | | | 11 | 2005-12-24 00:00:00 | Baida | 30 | 2006-11-15 00:00:00 2007-08-10 00:00:00 | Colmenares | 30 | 2003-05-18 00:00:00 2006-11-15 00:00:00 | Himuro | 30 | 2002-12-07 00:00:00 2003-05-18 00:00:00 | Khoo | 30 | 2005-07-24 00:00:00 2002-12-07 00:00:00 | Raphaely | 30 | 2005-07-24 00:00:00 | Tobias | 30 | | yq1 | 30 | 2007-12-10 00:00:00 | yq2 | 30 | 2007-12-10 00:00:00 | yq3 | 30 | (13 rows) FIRST_VALUE(value any) 描述:FIRST_VALUE函数取各组内的第一个值作为返回结果。 返回值类型:与参数数据类型相同。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 gaussdb=# CREATE TABLE first_value_t1(a int, b int); gaussdb=# INSERT INTO first_value_t1 VALUES(1,1),(1,1),(1, 2),(1, 3),(2, 4),(2, 5),(3,6); gaussdb=# SELECT a,b,FIRST_VALUE(b) OVER(PARTITION BY a ORDER BY b) FROM first_value_t1; a | b | first_value ---+---+------------- 1 | 1 | 1 1 | 1 | 1 1 | 2 | 1 1 | 3 | 1 2 | 4 | 4 2 | 5 | 4 3 | 6 | 6 (7 rows) gaussdb=# DROP TABLE first_value_t1; LAST_VALUE(value any) 描述:LAST_VALUE函数取各组内的最后一个值作为返回结果。 返回值类型:与参数数据类型相同。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 gaussdb=# CREATE TABLE last_value_t1(a int, b int); gaussdb=# INSERT INTO last_value_t1 VALUES(1,1),(1,1),(1, 2),(1, 3),(2, 4),(2, 5),(3,6); gaussdb=# SELECT a,b,LAST_VALUE(b) OVER(PARTITION BY a ORDER BY b) FROM last_value_t1; a | b | last_value ---+---+------------ 1 | 1 | 1 1 | 1 | 1 1 | 2 | 2 1 | 3 | 3 2 | 4 | 4 2 | 5 | 5 3 | 6 | 6 (7 rows) gaussdb=# DROP TABLE last_value_t1; DELTA 描述:返回当前行和前一行的差值。 参数:numeric 返回值类型:numeric NTH_VALUE(value any, nth integer) 描述:NTH_VALUE函数返回该组内的第nth行作为结果。若该行不存在,则默认返回NULL。 返回值类型:与参数数据类型相同。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 gaussdb=# CREATE TABLE nth_value_t1(a int, b int); gaussdb=# INSERT INTO nth_value_t1 VALUES(1,1),(1,1),(1, 2),(1, 3),(2, 4),(2, 5),(3,6); gaussdb=# SELECT a,b,NTH_VALUE(b, 2) OVER(PARTITION BY a order by b) FROM nth_value_t1; a | b | nth_value ---+---+----------- 1 | 1 | 1 1 | 1 | 1 1 | 2 | 1 1 | 3 | 1 2 | 4 | 2 | 5 | 5 3 | 6 | (7 rows) gaussdb=# DROP TABLE nth_value_t1;
  • effective_cache_size 参数说明:设置优化器在一次单一的查询中可用的磁盘缓冲区的有效大小。 设置这个参数,要考虑GaussDB的共享缓冲区以及内核的磁盘缓冲区,还要考虑预计的在不同表之间的并发查询数目,因为它们将共享可用的空间。 这个参数对GaussDB实际运行时分配的共享内存大小没有影响,它只用于计划生成阶段的估算。该数值是用磁盘页来计算的,通常每个页面是8192字节。 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 取值范围:整型,1~2147483647‬,单位为8KB。 默认值: 独立部署: CN:2GB(60核CPU/480G内存);1GB(32核CPU/256G内存,16核CPU/128G内存);512MB(8核CPU/64G内存);256MB(4核CPU/32G内存);128MB(4核CPU/16G内存) DN:70GB(60核CPU/480G内存);38GB(32核CPU/256G内存);20GB(16核CPU/128G内存);8GB(8核CPU/64G内存);4GB(4核CPU/32G内存);2GB(4核CPU/16G内存) 设置建议: 较大的数值使优化器倾向于选择索引扫描,较小的数值使优化器倾向于选择全表扫描。一般情况下,可以设为shared_buffers大小的1/2,较为激进地,可以设为shared_buffers大小的3/4。
  • random_page_cost 参数说明:设置优化器计算一次非顺序抓取磁盘页面的开销。 该参数属于USERSET类型参数,请参考表1中对应设置方法进行设置。 虽然服务器允许将random_page_cost设置的比seq_page_cost小,但是物理上实际不受影响。如果所有数据库都位于随机访问内存中时,两者设置为相等很合理。因为在此种情况下,非顺序抓取页并没有副作用。同样,在缓冲率很高的数据库上,应该相对于CPU参数同时降低这两个值,因为获取内存中的页要比通常情况下开销小很多。 取值范围:浮点型,0~DBL_MAX。 默认值:4 对于特别表空间中的表和索引,可以通过设置同名的表空间的参数来覆盖这个值。 相对于seq_page_cost,减少这个值将导致系统更倾向于使用索引扫描,而增加这个值使得索引扫描开销比较高。可以通过同时增加或减少这两个值来调整磁盘I/O相对于CPU的开销。
  • GS_CLIENT_GLOBAL_KEYS_ARGS GS_CLIENT_GLOBAL_KEYS_ARGS系统表记录密态等值特性中客户端加密主密钥相关元数据信息,每条记录对应客户端加密主密钥的一个键值对信息。 表1 GS_CLIENT_GLOBAL_KEYS_ARGS字段 名称 类型 描述 oid oid 行标识符(隐含字段)。 global_key_id oid 客户端加密主密钥(cmk)oid。 function_name name 值为encryption。 key name 客户端加密主密钥(cmk)的元数据信息对应的名称。 value bytea 客户端加密主密钥(cmk)的元数据信息名称的值。 父主题: 系统表
  • SUMMARY_TRANSACTIONS_PREPARED_XACTS 显示集群中各CN节点当前准备好进行两阶段提交的事务的信息。 表1 SUMMARY_TRANSACTIONS_PREPARED_XACTS字段 名称 类型 描述 transaction xid 预备事务的数字事务标识。 gid text 赋予该事务的全局事务标识。 prepared timestamp with time zone 事务准备好提交的时间。 owner name 执行该事务的用户的名称。 database name 执行该事务所在的数据库名。 父主题: Transaction
  • alarm_component 参数说明:在对告警做上报时,会进行告警抑制,即同一个实例的同一个告警项在alarm_report_interval(默认值为10s)内不做重复上报。在这种情况下设置用于处理告警内容的告警组件的位置,仅sysadmin用户可以访问。 该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 取值范围:字符串。 若前置脚本gs_preinstall中的--alarm-type参数设置为5时,表示未对接第三方组件,告警写入system_alarm日志,此时GUC参数alarm_component的取值为:/opt/huawei/snas/bin/snas_cm_cmd。 若前置脚本gs_preinstall中的--alarm-type参数设置为1时,表示对接第三方组件,此时GUC参数alarm_component的值为第三方组件的可执行程序的绝对路径。 默认值:/opt/huawei/snas/bin/snas_cm_cmd
  • ADM_TAB_SUBPARTITIONS ADM_TAB_SUBPARTITIONS视图存储数据库下所有的二级分区信息。默认只有系统管理员权限才可以访问此系统视图,普通用户需要授权才可以访问。该视图同时存在于PG_CATALOG和SYS schema下。 表1 ADM_TAB_SUBPARTITIONS字段 名称 类型 描述 table_owner character varying(64) 表的所有者。 table_name character varying(64) 关系表名称。 partition_name character varying(64) 分区名称。 subpartition_name character varying(64) 二级分区名称。 high_value text 二级分区的边界值。 对于范围分区和间隔分区,显示各分区的上边界值。 对于列表分区,显示各分区的取值列表。 对于哈希分区,显示各分区的编号。 tablespace_name name 二级分区表的表空间名称。 schema character varying(64) 名称空间的名称。 high_value_length integer 二级分区的边界值的字符长度。 父主题: 系统视图
  • UPDATE 【规则】UPDATE语句中必须有WHERE子句,避免全表扫描。 【规则】不允许在UPDATE子句同时更新多个列时,被更新列同样是更新源。 同时更新多列,且更新源相同,在不同的数据库下行为不同,为了避免带来兼容性问题,业务层应避免上述操作。示例如下: UPDATE table SET col1 = col2, col3 = col1 WHERE col1 = 1; 该语句在中,col3的值为原col1的值;而MySQL中,col3的值为col2的值(因为col2的值被赋予给了col1)。 【规则】UPDATE语句中禁止使用ORDER BY、GROUP BY子句,避免不必要的排序。 【建议】有主键/索引的表,更新时WHERE条件应结合主键/索引。 父主题: 数据库编程规范
  • 示例 --创建一个普通表。 gaussdb=# CREATE TABLE my_table (c1 int, c2 int); --创建全量物化视图。 gaussdb=# CREATE MATERIALIZED VIEW my_mv AS SELECT * FROM my_table; --创建增量物化视图。 gaussdb=# CREATE INCREMENTAL MATERIALIZED VIEW my_imv AS SELECT * FROM my_table; --基表写入数据。 gaussdb=# INSERT INTO my_table VALUES(1,1),(2,2); --对全量物化视图my_mv进行全量刷新。 gaussdb=# REFRESH MATERIALIZED VIEW my_mv; --对增量物化视图my_imv进行全量刷新。 gaussdb=# REFRESH MATERIALIZED VIEW my_imv; --删除增量物化视图。 gaussdb=# DROP MATERIALIZED VIEW my_imv; --删除全量物化视图。 gaussdb=# DROP MATERIALIZED VIEW my_mv; --删除表my_table。 gaussdb=# DROP TABLE my_table;
  • 接口介绍 高级功能包DBE_MATCH支持的所有接口请参见表1。 表1 DBE_MATCH 接口名称 描述 DBE_MATCH.EDIT_DISTANCE_SIMILARITY 比较两个字符串的差距(删除、新增、变换的最小步骤),并归一化到0-100(100表示完全一致,0表示完全不一致)。 DBE_MATCH.EDIT_DISTANCE_SIMILARITY 比较两个字符串的差距(删除、新增、变换的最小步骤),并归一化到0-100(100表示完全一致,0表示完全不一致),DBE_MATCH.EDIT_DISTANCE_SIMILARITY函数原型为: 1 2 3 4 DBE_MATCH.EDIT_DISTANCE_SIMILARITY( str1 IN text, str2 IN text )returns integer ; 表2 DBE_MATCH.EDIT_DISTANCE_SIMILARITY接口参数说明 参数 描述 str1 第一个字符串,如果为null,直接输出0。 str2 第二个字符串,如果为null,直接输出0。
  • MY_IND_PARTITIONS MY_IND_PARTITIONS视图存储当前用户下一级分区表Local索引的索引分区信息(不包含分区表全局索引)。所有用户都可以访问。该视图同时存在于PG_CATALOG和SYS schema下。 表1 MY_IND_PARTITIONS字段 名称 类型 描述 index_owner character varying(64) 索引分区所属分区表索引的所有者的名称。 index_name character varying(64) 索引分区所属分区表索引的名称。 partition_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 索引分区所对应分区的边界的字符长度。 composite character varying(3) 索引是否属于二级分区表上的本地索引,该表不存储二级分区信息,所以该值为NO。 subpartition_count numeric 分区中的二级分区数,该表不存储二级分区信息,所以该值为0。 partition_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。 pct_direct_access numeric 暂不支持,值为NULL。 global_stats character varying(3) 暂不支持,值为NULL。 domidx_opstatus character varying(6) 暂不支持,值为NULL。 parameters character varying(1000) 暂不支持,值为NULL。 interval character varying(3) 分区是否在间隔分区表的间隔节中。 segment_created character varying(3) 索引分区段是否已创建。 orphaned_entries character varying(3) 暂不支持,值为NULL。 父主题: 系统视图
  • ADM_AUDIT_SESSION ADM_AUDIT_SESSION显示所有连接断开数据库审计信息,GaussDB审计信息主要通过pg_query_audit函数,该视图同时存在于PG_CATALOG和SYS schema下。仅拥有AUDITADMIN属性的用户才可以查看审计信息。GaussDB的action_name字段与ORA数据库审计动作不一致,transactionid字段与ORA数据库中transactionid数据的类型保持一致。 表1 ADM_AUDIT_SESSION字段 名称 类型 描述 os_username character varying(255) 暂不支持,值为NULL。 username character varying(128) 操作被审计的用户的名称,不是用户ID。 userhost character varying(128) 暂不支持,值为NULL。 terminal character varying(128) 暂不支持,值为NULL。 timestamp timestamp(0) without time zone 创建审核跟踪条目的日期和时间(用户登录创建的条目的日期和时间AUDIT SESSION)。 action_name character varying(28) DBA_AUDIT_TRAIL中的ACTION列中的数字代码对应的动作类型的名称。 logoff_time timestamp(0) without time zone 暂不支持,值为NULL。 logoff_lread numeric 暂不支持,值为NULL。 logoff_pread numeric 暂不支持,值为NULL。 logoff_lwrite numeric 暂不支持,值为NULL。 logoff_dlock character varying(40) 暂不支持,值为NULL。 sessionid numeric 暂不支持,值为NULL。 returncode numeric 暂不支持,值为NULL。 client_id character varying(128) 暂不支持,值为NULL。 session_cpu numeric 暂不支持,值为NULL。 extended_timestamp timestamp(6) with time zone 创建审核跟踪条目的时间戳(创建的条目的用户登录时间戳AUDIT SESSION)在UTC(协调世界时)时区。 proxy_sessionid numeric 暂不支持,值为NULL。 global_uid character varying(32) 暂不支持,值为NULL。 instance_numeric numeric 暂不支持,值为NULL。 os_process character varying(16) 暂不支持,值为NULL。 父主题: 系统视图
共100000条
提示

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