华为云用户手册

  • 参数说明 SESSION 声明的参数只对当前会话起作用。如果SESSION和LOCAL都没出现,则SESSION为缺省值。 如果在事务中执行了此命令,命令的产生影响将在事务回滚之后消失。如果该事务已提交,影响将持续到会话的结束,除非被另外一个SET命令重置参数。 LOCAL 声明的参数只在当前事务中有效。在COMMIT或ROLLBACK之后,会话级别的设置将再次生效。 不论事务是否提交,此命令的影响只持续到当前事务结束。一个特例是:在一个事务里面,既有SET命令,又有SET LOCAL命令,且SET LOCAL在SET后面,则在事务结束之前,SET LOCAL命令会起作用,但事务提交之后,则是SET命令会生效。 TIME ZONE timezone 用于指定当前会话的本地时区。 取值范围:有效的本地时区。该选项对应的运行时参数名称为TimeZone,DEFAULT缺省值为PRC。 CURRENT_SCHEMA schema CURRENT_SCHEMA用于指定当前的模式。 取值范围:已存在模式名称。如果模式名不存在,会导致CURRENT_SCHEMA值为空。 SCHEMA schema 同CURRENT_SCHEMA。此处的schema是个字符串。 例如:set schema 'public'; NAMES encoding_name 用于设置客户端的字符编码。等价于set client_encoding to encoding_name。 取值范围:有效的字符编码。该选项对应的运行时参数名称为client_encoding,默认编码为UTF8。 XML OPTION option 用于设置XML的解析方式。 取值范围:CONTENT(缺省)、DOCUMENT config_parameter 可设置的运行时参数的名称。可用的运行时参数可以使用SHOW ALL命令查看。 部分通过SHOW ALL查看的参数不能通过SET设置。如max_datanodes。 value config_parameter的新值。可以声明为字符串常量、标识符、数字,或者逗号分隔的列表。DEFAULT用于把这些参数设置为它们的缺省值。
  • 语法格式 设置所处的时区。 SET [ SESSION | LOCAL ] TIME ZONE { timezone | LOCAL | DEFAULT }; 设置所属的模式。 SET [ SESSION | LOCAL ] {CURRENT_SCHEMA { TO | = } { schema | DEFAULT } | SCHEMA 'schema'}; 设置客户端编码集。 SET [ SESSION | LOCAL ] NAMES encoding_name; 设置XML的解析方式。 SET [ SESSION | LOCAL ] XML OPTION { DOCUMENT | CONTENT }; 设置其他运行时参数。 SET [ LOCAL | SESSION ] {config_parameter { { TO | = } { value | DEFAULT } | FROM CURRENT }};
  • DB_PART_TABLES DB_PART_TABLES视图显示当前用户所能访问的分区表的信息。该视图同时存在于PG_CATA LOG 和SYS Schema下。 表1 DB_PART_TABLES字段 名称 类型 描述 table_owner character varying(64) 分区表的所有者名称。 table_name character varying(64) 分区表的名称。 partitioning_type text 分区表的分区策略。 说明: 当前分区表策略支持范围见CREATE TABLE PARTITION。 partition_count bigint 分区表的分区个数。 partitioning_key_count integer 分区表的分区键个数。 def_tablespace_name name 分区表的表空间名称。 schema character varying(64) 分区表的模式。 subpartitioning_type text 二级分区表的分区策略。如果分区表是一级分区表,则显示NONE。 说明: 当前二级分区表策略支持范围见CREATE TABLE SUBPARTITION。 def_subpartition_count integer 默认创建二级分区的个数,二级分区表为1,一级分区表为0。 subpartitioning_key_count integer 分区表二级分区键的个数。 父主题: 系统视图
  • PG_RANGE PG_RANGE系统表存储关于范围类型的信息,除了PG_TYPE里类型的记录。 表1 PG_RANGE字段 名称 类型 引用 描述 rngtypid oid PG_TYPE.oid 范围类型的OID。 rngsubtype oid PG_TYPE.oid 这个范围类型的元素类型(子类型)的OID。 rngcollation oid PG_COLLATION.oid 用于范围比较的排序规则的OID,如果没有则为零。 rngsubopc oid PG_OPCLASS.oid 用于范围比较的子类型的操作符类的OID。 rngcanonical regproc PG_PROC.proname 转换范围类型为规范格式的函数名,如果没有则为0。 rngsubdiff regproc PG_PROC.proname 表示用于计算范围两元素差值的函数的名字,该函数的返回值为双精度类型,如果不存在该函数则rngsubdiff字段值为0。 若元素类型是离散的,则rngcanonical决定用于范围类型的排序顺序;若元素类型是不可排序的,则rngsubopc决定用于范围类型的排序顺序;若元素类型是可排序的,则rngsubopc和rngcollation决定用于范围类型的排序顺序。 父主题: 系统表
  • SUMMARY_STATIO_SYS_TABLES SUMMARY_STATIO_SYS_TABLES视图显示数据库内各节点的系统表的I/O状态汇总信息。 表1 SUMMARY_STATIO_SYS_TABLES字段 名称 类型 描述 schemaname name 该表模式名。 relname name 表名。 heap_blks_read numeric 从该表中读取的磁盘块数。 heap_blks_hit numeric 此表缓存命中数。 idx_blks_read numeric 从表中所有索引读取的磁盘块数。 idx_blks_hit numeric 表中所有索引命中缓存数。 toast_blks_read numeric 此表的TOAST表读取的磁盘块数(如果存在)。 toast_blks_hit numeric 此表的TOAST表命中缓冲区数(如果存在)。 tidx_blks_read numeric 此表的TOAST表索引读取的磁盘块数(如果存在)。 tidx_blks_hit numeric 此表的TOAST表索引命中缓冲区数(如果存在)。 父主题: Cache/IO
  • 参数 表1 PQsetdbLogin参数 关键字 参数说明 pghost 要连接的主机名,详见连接参数说明章节描述的host字段。 pgport 主机服务器的端口号,详见连接参数说明描述的port字段。 pgoptions 添加命令行选项以在运行时发送到服务器,详见连接参数说明描述的options字段。 pgtty 忽略(这个选项声明服务器日志的输出方向)。 dbName 要连接的数据库名,详见连接参数说明描述的dbname字段。 login 要连接的用户名,详见连接参数说明章节描述的user字段。 pwd 如果服务器要求口令认证,所用的口令,详见连接参数说明描述的password字段。
  • 原型 PGconn *PQsetdbLogin(const char *pghost, const char *pgport, const char *pgoptions, const char *pgtty, const char *dbName, const char *login, const char *pwd);
  • PG_STAT_BAD_BLOCK PG_STAT_BAD_BLOCK视图显示自节点启动后,读取数据时出现Page/CU校验失败的统计信息。 表1 PG_STAT_BAD_BLOCK字段 名称 类型 描述 nodename text 节点名。 databaseid integer 数据库OID。 tablespaceid integer 表空间OID。 relfilenode integer 文件对象ID。 bucketid smallint 一致性hash bucket ID。 forknum integer 文件类型。取值如下: 0:数据主文件。 1:FSM文件。 2:VM文件。 3:BCM文件。 error_count integer 出现校验失败的次数。 first_time timestamp with time zone 第一次出现时间。 last_time timestamp with time zone 最后一次出现时间。 父主题: 系统视图
  • 功能描述 DECLARE命令既可以定义一个游标,用于在一个大的查询里面检索少数几行数据,也可以作为一个匿名块的开始。 本节主要描述定义为游标的用法,开启匿名块的用法见BEGIN。 为了处理SQL语句,存储过程进程分配一段内存区域来保存上下文联系。游标是指向上下文区域的句柄或指针。借助游标,存储过程可以控制上下文区域的变化。 通常游标和SELECT一样返回文本格式。因为数据在系统内部是用二进制格式存储的,系统必须对数据做一定转换以生成文本格式。一旦数据是以文本形式返回,客户端应用需要把它们转换成二进制进行操作。使用FETCH语句,游标可以返回文本或二进制格式。
  • 参数说明 cursor_name 将要创建的游标名。 取值范围:遵循数据库对象命名规范。 BINARY 指明游标以二进制而不是文本格式返回数据。 NO SCROLL 声明游标检索数据行的方式。 NO SCROLL:声明该游标不能用于以倒序的方式检索数据行。 未声明:根据执行计划的不同,自动判断该游标是否可以用于以倒序的方式检索数据行。 WITH HOLD WITHOUT HOLD 声明当创建游标的事务结束后,游标是否能继续使用。 WITH HOLD:声明该游标在创建它的事务结束后仍可继续使用。 WITHOUT HOLD:声明该游标在创建它的事务之外不能再继续使用,此游标将在事务结束时被自动关闭。 如果不指定WITH HOLD或WITHOUT HOLD,默认行为是WITHOUT HOLD。 query 使用SELECT或VALUES子句指定游标返回的行。 取值范围:SELECT或VALUES子句。 declare_statements 声明变量,包括变量名和变量类型,如“sales_cnt int”。 execution_statements 匿名块中要执行的语句。 取值范围:已存在的函数名称。
  • 示例 1 2 3 4 5 6 7 8 9 10 11 12 --产生0到1之间的随机数: SELECT DBE_RANDOM.GET_VALUE(0,1); get_value ------------------ .917468812743886 (1 row) --对于指定范围内的整数,要加入参数min和max,并从结果中截取较小的数(最大值不能被作为可能的值)。所以对于0到99之间的整数,使用下面的代码: SELECT TRUNC(DBE_RANDOM.GET_VALUE(0,100)); trunc ------- 26 (1 row)
  • 接口介绍 高级功能包DBE_RANDOM支持的所有接口请参见表 DBE_RANDOM接口参数说明。 表1 DBE_RANDOM接口参数说明 接口名称 描述 DBE_RANDOM.SET_SEED 设置一个随机数的种子。 DBE_RANDOM.GET_VALUE 生成一个大小介于指定的low及high之间的随机数。 DBE_RANDOM.SET_SEED 存储过程SEED用于设置一个随机数的种子。DBE_RANDOM.SET_SEED函数原型为: 1 DBE_RANDOM.SET_SEED (seed IN INTEGER); 表2 DBE_RANDOM.SET_SEED接口参数说明 参数 描述 seed 用于产生一个随机数的种子。 DBE_RANDOM.GET_VALUE 函数GET_VALUE生成一个大小介于指定的low及high之间的随机数。DBE_RANDOM.GET_VALUE函数原型为: 1 2 3 4 DBE_RANDOM.GET_VALUE( min IN NUMBER default 0, max IN NUMBER default 1) RETURN NUMBER; 表3 DBE_RANDOM.GET_VALUE接口参数说明 参数 描述 min 指定随机数大小的下边界,生成的随机数大于或等于min。 max 指定随机数大小的上边界,生成的随机数小于max。 实际上,只要求这里的参数类型是NUMERIC即可,对于左右边界的大小并没有要求。 DBE_RANDOM实现的是伪随机,所以若使用的初值(种子)不变,那么伪随机数的数序也不变,使用时需要注意。 生成的随机数有效数字为15位。
  • 注意事项 package只支持集中式。 在package specification中声明过的函数或者存储过程,必须在package body中找到定义。 在实例化中,无法调用带有commit/rollback的存储过程。 不能在Trigger中调用package函数。 不能在外部SQL中直接使用package当中的变量。 不允许在package外部调用package的私有变量和存储过程。 不支持其它存储过程不支持的用法,例如,在function中不允许调用commit/rollback,则package的function中同样无法调用commit/rollback。 不支持schema与package同名。 只支持A风格的存储过程和函数定义。 不支持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函数时,其参数默认值不支持含有变量。
  • 语法格式 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 INVOKER,分别为定义者权限和调用者权限。 item_list_1可以为声明的变量或者存储过程以及函数。 PACKAGE SPECIFICATION(包头)声明了包内的公有变量、函数、异常等,可以被外部函数或者存储过程调用。在PACKAGE SPECIFICATION中只能声明存储过程,函数,不能定义存储过程或者函数。 CREATE PACKAGE BODY语法格式。 CREATE [ OR REPLACE ] PACKAGE BODY [ schema ] package_name { IS | AS } declare_section [ initialize_section ] END package_name; PACKAGE BODY(包体内)定义了包的私有变量,函数等。如果变量或者函数没有在PACKAGE SPECIFICATION中声明过,那么这个变量或者函数则为私有变量或者函数。 PACKAGE BODY也可以声明实例化部分,用来初始化package,详见示例。
  • 示例 CREATE PACKAGE SPECIFICATION示例 CREATE OR REPLACE PACKAGE emp_bonus IS var1 int:=1;--公有变量 var2 int:=2; PROCEDURE testpro1(var3 int);--公有存储过程,可以被外部调用 END emp_bonus; / CREATE PACKAGE BODY示例 drop table if exists test1; create or replace package body emp_bonus is var3 int:=3; var4 int:=4; procedure testpro1(var3 int) is begin create table if not exists test1(col1 int); insert into test1 values(var1); insert into test1 values(var4); end; begin --实例化开始 var4:=9; testpro1(var4); end emp_bonus; / ALTER PACKAGE OWNER示例 ALTER PACKAGE emp_bonus OWNER TO omm; --将PACKAGE emp_bonus的所属者改为omm 调用PACKAGE示例 call emp_bonus.testpro1(1); --使用call调用package存储过程 select emp_bonus.testpro1(1); --使用select调用package存储过程 --匿名块里调用package存储过程 begin emp_bonus.testpro1(1); end; /
  • 选择存储模型 进行数据库设计时,表设计上的一些关键项将严重影响后续整库的查询性能。表设计对数据存储也有影响:好的表设计能够减少I/O操作及最小化内存使用,进而提升查询性能。 表的存储模型选择是表定义的第一步。客户业务属性是表的存储模型的决定性因素,依据下面表格选择适合当前业务的存储模型。 存储模型 适用场景 行存 点查询(返回记录少,基于索引的简单查询)。 增删改比较多的场景。 父主题: 表设计最佳实践
  • PG_OBJECT PG_OBJECT系统表存储限定类型对象(普通表,索引,序列,视图,存储过程和函数)的创建用户、创建时间和最后修改时间。 表1 PG_OBJECT字段 名称 类型 描述 object_oid oid 对象标识符。 object_type "char" 对象类型: r 表示普通表 i 表示索引 s 表示序列 v 表示视图 p 表示存储过程和函数 creator oid 创建用户的标识符。 ctime timestamp with time zone 对象的创建时间。 mtime timestamp with time zone 对象的最后修改时间,修改行为包括ALTER操作和GRANT、REVOKE操作。 createcsn bigint 对象创建时的 CS N。 changecsn bigint 对表或索引执行DDL操作时的CSN。 无法记录初始化数据库(initdb)过程中所创建或修改的对象,即PG_OBJECT无法查询到该对象记录。 对于升级前创建的对象,再次修改时会记录其修改时间(mtime),对表或索引执行DDL操作时会记录其所属事务的事务提交序列号(changecsn)。由于无法得知该对象创建时间,因此ctime和createcsn为空。 ctime和mtime所记录的时间为用户当次操作所属事务的起始时间。 由扩容引起的对象修改时间也会被记录。 createcsn和changecsn记录的是用户当次操作所属事务的事务提交序列号。 enable_gtt_concurrent_truncate开启时,truncate全局临时表不会刷新mtime字段。 父主题: 系统表
  • 原型 PGresult* PQexecPreparedBatch(PGconn* conn, const char* stmtName, int nParams, int nBatchCount, const char* const* paramValues, const int* paramLengths, const int* paramFormats, int resultFormat);
  • 参数 表1 PQexecPreparedBatch参数 关键字 参数说明 conn 连接句柄。 stmtName stmt名称,可以用""或者NULL来引用未命名语句,否则它必须是一个现有预备语句的名字。 nParams 参数个数。 nBatchCount 批量数。 paramValues 参数的实际值。 paramLengths 参数的实际数据长度。 paramFormats 参数的格式(文本或二进制)。 resultFormat 结果的格式(文本或二进制)。
  • GS_INSTANCE_TIME 提供当前集节点下的各种时间消耗信息,主要分为以下类型: DB_TIME: 作业在多核下的有效时间花销。 CPU_TIME:CPU的时间花销。 EXECUTION_TIME:执行器内的时间花销。 PARSE_TIME:SQL解析的时间花销。 PLAN_TIME:生成Plan的时间花销。 REWRITE_TIME:SQL重写的时间花销。 PL_EXECUTION_TIME :PL/SQL(存储过程)执行的时间花销。 PL_COMPILATION_TIME:PL/SQL(存储过程)编译的时间花销。 NET_SEND_TIME:网络上的时间花销。 DATA_IO_TIME:I/O的时间花销。 表1 GS_INSTANCE_TIME字段 名称 类型 描述 stat_id integer 统计编号。 stat_name text 类型名称。 value bigint 时间值(单位:微秒)。 父主题: 系统视图
  • 值存储数据类型解析 查找与目标字段准确的匹配。 试着将表达式直接转换成目标类型。如果已知这两种类型之间存在一个已注册的转换函数,那么直接调用该转换函数即可。如果表达式是一个未知类型文本,该文本字符串的内容将交给目标类型的输入转换过程。 检查目标类型是否有长度转换。长度转换是一个从某类型到自身的转换。如果在pg_cast表里面找到一个,那么在存储到目标字段之前先在表达式上应用。这样的转换函数总是接受一个额外的类型为integer的参数,它接收目标字段的atttypmod值(实际上是其声明长度,atttypmod的解释随不同的数据类型而不同),并且它可能接受一个Boolean类型的第三个参数,表示转换是显式的还是隐式的。转换函数负责施加那些长度相关的语义,比如长度检查或者截断。
  • 示例 character存储类型转换。对一个目标列定义为character(20)的语句,下面的语句显示存储值的长度正确: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 openGauss=# CREATE SCHEMA tpcds; openGauss=# CREATE TABLE tpcds.value_storage_t1 ( VS_COL1 CHARACTER(20) ); openGauss=# INSERT INTO tpcds.value_storage_t1 VALUES('abcdef'); openGauss=# SELECT VS_COL1, octet_length(VS_COL1) FROM tpcds.value_storage_t1; vs_col1 | octet_length ----------------------+-------------- abcdef | 20 (1 row) ) openGauss=# DROP TABLE tpcds.value_storage_t1; openGauss=# DROP SCHEMA tpcds; 这里真正发生的事情是两个unknown文本缺省解析成text,这样就允许||操作符解析成text连接。然后操作符的text结果转换成bpchar("空白填充的字符型", character类型内部名称)以匹配目标字段类型。不过,从text到bpchar的转换是二进制兼容的,这样的转换是隐含的并且实际上不做任何函数调用。最后,在系统表里找到长度转换函数bpchar(bpchar, integer, Boolean) 并且应用于该操作符的结果和存储的字段长。这个类型相关的函数执行所需的长度检查和额外的空白填充。
  • 动态数据脱敏函数 该函数为内部功能调用函数。 creditcardmasking(col text, letter char default 'x') 描述:将col字符串后四位之前的数字使用letter替换。 参数:待替换的字符串、替换字符。 返回值类型:text basicmailmasking(col text, letter char default 'x') 描述:将col字符串中第一个'@'之前的字符使用letter替换。 参数:待替换的字符串、替换字符。 返回值类型:text fullmailmasking(col text, letter char default 'x') 描述:将col字符串中出现最后一个'.'之前的字符(除'@'外)使用letter替换。 参数:待替换的字符串、替换字符。 返回值类型:text alldigitsmasking(col text, letter char default '0') 描述:将col字符串中出现的数字使用letter替换。 参数:待替换的字符串、替换字符。 返回值类型:text shufflemasking(col text) 描述:将col字符串中的字符乱序排列。 参数:待替换的字符串、替换字符。 返回值类型:text randommasking(col text) 描述:将col字符串中的字符随机化。 参数:待替换的字符串、替换字符。 返回值类型:text regexpmasking 描述:脱敏策略的内部函数,对字符进行正则表达式替换。 参数:col text, reg text, replace_text text, pos INTEGER default 0, reg_len INTEGER default -1 返回值类型:text 父主题: 函数和操作符
  • PG_STAT_DATABASE_CONFLI CTS PG_STAT_DATABASE_CONFLICTS视图显示数据库冲突状态的统计信息。 表1 PG_STAT_DATABASE_CONFLICTS字段 名称 类型 描述 datid oid 数据库标识。 datname name 数据库名称。 confl_tablespace bigint 冲突的表空间的数目。 confl_lock bigint 冲突的锁数目。 confl_snapshot bigint 冲突的快照数目。 confl_bufferpin bigint 冲突的缓冲区数目。 confl_deadlock bigint 冲突的死锁数目。 父主题: 系统视图
  • 获取函数返回值 JDBC调用函数时获取返回值,以下示例展示返回值类型为bit和float8两种数据类型,其他数据类型可参考本示例。 代码运行的前提条件:根据实际情况添加opengaussjdbc.jar包(例如用户使用IDE执行代码,则需要在本地IDE添加opengaussjdbc.jar包)。 // 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放,使用时解密),确保安全。 // 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。 // $ip、$port、database需要用户自行修改。 import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; import java.sql.CallableStatement; import java.sql.SQLException; import java.sql.PreparedStatement; import java.sql.Types; public class Type { public static void main(String[] args) throws SQLException { String driver = "com.huawei.opengauss.jdbc.Driver"; String username = System.getenv("EXAMPLE_USERNAME_ENV"); String passwd = System.getenv("EXAMPLE_PASSWORD_ENV"); String sourceURL = "jdbc:opengauss://$ip:$port/database"; Connection conn = null; try { // 加载数据库驱动。 Class.forName(driver).newInstance(); } catch (Exception e) { e.printStackTrace(); } try { // 以非加密方式创建数据库连接。 conn = DriverManager.getConnection(sourceURL, username, passwd); System.out.println("Connection succeed!"); } catch (Exception e) { e.printStackTrace(); } // 建表。 String createsql = "create table if not exists t_bit(col_bit bit)"; Statement stmt = conn.createStatement(); stmt.execute(createsql); stmt.close(); // bit类型使用示例,注意此处bit类型取值范围[0,1]。 Statement st = conn.createStatement(); String sqlstr = "create or replace function fun_1()\n" + "returns bit AS $$\n" + "select col_bit from t_bit limit 1;\n" + "$$\n" + "LANGUAGE SQL;"; st.execute(sqlstr); CallableStatement c = conn.prepareCall("{ ? = call fun_1() }"); // 注册输出类型,位串类型。 c.registerOutParameter(1, Types.BIT); c.execute(); // 使用Boolean类型获取结果。 System.out.println(c.getBoolean(1)); // float8类型使用示例。 st.execute("create table if not exists t_float(col1 float8)"); PreparedStatement pstm = conn.prepareStatement("insert into t_float values(?)"); pstm.setDouble(1, 123456.123); pstm.execute(); pstm.close(); // 函数返回值为float8的使用示例。 st.execute( "create or replace function func_float() " + "return float8 " + "as declare " + "var1 float8; " + "begin " + " select col1 into var1 from t_float limit 1; " + " return var1; " + "end;"); CallableStatement cs = conn.prepareCall("{? = call func_float()}"); cs.registerOutParameter(1, Types.DOUBLE); cs.execute(); System.out.println(cs.getDouble(1)); st.close(); // 关闭数据库连接。 try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } 上述示例的运行结果为: Connection succeed! false 123456.123 当前JDBC不支持调用返回数据类型为money的存储过程和函数。 父主题: 典型应用开发示例
  • 示例 --撤销 my_savepoint 建立之后执行的命令的影响。 openGauss=# START TRANSACTION; openGauss=# SAVEPOINT my_savepoint; openGauss=# ROLLBACK TO SAVEPOINT my_savepoint; --游标位置不受保存点回滚的影响。 openGauss=# DECLARE foo CURSOR FOR SELECT 1 UNION SELECT 2; openGauss=# SAVEPOINT foo; openGauss=# FETCH 1 FROM foo; ?column? ---------- 1 openGauss=# ROLLBACK TO SAVEPOINT foo; openGauss=# FETCH 1 FROM foo; ?column? ---------- 2 openGauss=# RELEASE SAVEPOINT my_savepoint; openGauss=# COMMIT;
  • 注意事项 不能回滚到一个未定义的保存点,语法上会报错。 在保存点方面,游标有一些非事务性的行为。任何在保存点里打开的游标都会在回滚掉这个保存点之后关闭。如果一个前面打开了的游标在保存点里面,并且游标被一个FETCH命令影响,而这个保存点稍后回滚了,那么这个游标的位置仍然在FETCH让它指向的位置(也就是FETCH不会被回滚)。关闭一个游标的行为也不会被回滚给撤销掉。如果一个游标的操作导致事务回滚,那么这个游标就会置于不可执行状态,所以,尽管一个事务可以用ROLLBACK TO SAVEPOINT重新恢复,但是游标不能再使用了。 使用ROLLBACK TO SAVEPOINT回滚到一个保存点。使用RELEASE SAVEPOINT删除一个保存点,但是保留该保存点建立后执行的命令的效果。
  • GS_ASP GS_ASP显示被持久化的ACTIVE SESSION PROFILE样本,该表只能在系统库下查询,在用户库下查询无数据。 表1 GS_ASP字段 名称 类型 描述 sampleid bigint 采样ID。 sample_time timestamp with time zone 采样的时间。 need_flush_sample boolean 该样本是否需要刷新到磁盘。 t(true):表示需要。 f(false):表示不需要。 databaseid oid 数据库ID。 thread_id bigint 线程的ID。 sessionid bigint 会话的ID。 start_time timestamp with time zone 会话的启动时间。 event text 具体的事件名称。 lwtid integer 当前线程的轻量级线程号。 psessionid bigint streaming线程的父线程。 tlevel integer streaming线程的层级。与执行计划的层级(id)相对应。 smpid integer smp执行模式下并行线程的并行编号。 userid oid session用户的id。 application_name text 应用的名字。 client_addr inet client端的地址。 client_hostname text client端的名字。 client_port integer 客户端用于与后端通讯的TCP端口号。 query_id bigint debug query id。 unique_query_id bigint unique query id。 user_id oid unique query的key中的user_id。 cn_id integer 表示下发该unique sql的节点id。unique query的key中的cn_id。 unique_query text 规范化后的Unique SQL文本串。 locktag text 会话等待锁信息,可通过locktag_decode解析。 lockmode text 会话等待锁模式: LW_EXCLUSIVE:排他锁 LW_SHARED:共享锁 LW_WAIT_UNTIL_FREE:等待LW_EXCLUSIVE可用 block_sessionid bigint 如果会话正在等待锁,阻塞该会话获取锁的会话标识。 wait_status text 描述event列的更多详细信息。 global_sessionid text 全局会话ID。 xact_start_time timestamp with time zone 事务开始时间。 query_start_time timestamp with time zone 语句开始执行时间。 state text 当前事务状态。 可能取值为:active、idle in transaction、fastpath function call、idle in transaction (aborted)、disabled、retrying。 父主题: 系统表
  • GLOBAL_STAT_BAD_BLOCK 获得各节点的表、索引等文件的读取失败信息。 表1 GLOBAL_STAT_BAD_BLOCK字段 名称 类型 描述 node_name text 节点名称。 databaseid integer database的oid。 tablespaceid integer tablespace的oid。 relfilenode integer relation的file node。 forknum integer fork编号。 error_count integer error的数量。 first_time timestamp with time zone 页面损坏第一次出现的时间。 last_time timestamp with time zone 页面损坏最后出现的时间。 父主题: Object
  • java.sql.Statement java.sql.Statement是SQL语句接口。 表1 对java.sql.Statement的支持情况 方法名 返回值类型 支持JDBC 4 addBatch(String sql) void Yes clearBatch() void Yes clearWarnings() void Yes close() void Yes closeOnCompletion() void Yes execute(String sql) boolean Yes execute(String sql, int autoGeneratedKeys) boolean Yes execute(String sql, int[] columnIndexes) boolean Yes execute(String sql, String[] columnNames) boolean Yes executeBatch() boolean Yes executeQuery(String sql) ResultSet Yes executeUpdate(String sql) int Yes executeUpdate(String sql, int autoGeneratedKeys) int Yes executeUpdate(String sql, int[] columnIndexes) int Yes executeUpdate(String sql, String[] columnNames) int Yes getConnection() Connection Yes getFetchDirection() int Yes getFetchSize() int Yes getGeneratedKeys() ResultSet Yes getMaxFieldSize() int Yes getMaxRows() int Yes getMoreResults() boolean Yes getMoreResults(int current) boolean Yes getResultSet() ResultSet Yes getResultSetConcurrency() int Yes getResultSetHoldability() int Yes getResultSetType() int Yes getQueryTimeout() int Yes getUpdateCount() int Yes getWarnings() SQLWarning Yes isClosed() boolean Yes isCloseOnCompletion() boolean Yes isPoolable() boolean Yes setCursorName(String name) void Yes setEscapeProcessing(boolean enable) void Yes setFetchDirection(int direction) void Yes setMaxFieldSize(int max) void Yes setMaxRows(int max) void Yes setPoolable(boolean poolable) void Yes setQueryTimeout(int seconds) void Yes setFetchSize(int rows) void Yes cancel() void Yes executeLargeUpdate(String sql) long No getLargeUpdateCount() long No executeLargeBatch() long No executeLargeUpdate(String sql, int autoGeneratedKeys) long No executeLargeUpdate(String sql, int[] columnIndexes) long No executeLargeUpdate(String sql, String[] columnNames) long No 通过setFetchSize可以减少结果集在客户端的内存占用情况。它的原理是通过将结果集打包成游标,然后分段处理,所以会加大数据库与客户端的通信量,但会有性能损耗。 由于数据库游标是事务内有效,所以,在设置setFetchSize的同时,需要将连接设置为非自动提交模式,setAutoCommit(false)。同时在业务数据需要持久化到数据库中时,在连接上执行提交操作。 LargeUpdate相关方法必须在JDBC4.2及以上版本使用。 父主题: JDBC接口参考
共100000条
提示

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