华为云用户手册

  • autovacuum_freeze_max_age 参数说明:设置事务内的最大时间,使得表的pg_class.relfrozenxid字段在VACUUM操作执行之前被写入。 VACUUM也可以删除pg_clog/子目录中的旧文件。 即使自动清理线程被禁止,系统也会调用自动清理线程来防止循环重复。 该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 取值范围:长整型,100 000~576 460 752 303 423 487 默认值:4000000000
  • autovacuum 参数说明:控制数据库自动清理线程(autovacuum)的启动。自动清理线程运行的前提是将track_counts设置为on。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 如果希望系统在故障恢复后,具备自动清理两阶段事务的功能,请将autovacuum设置为on; 当设置autovacuum为on,autovacuum_max_workers为0时,表示系统不会自动进行autovacuum,只会在故障恢复后,自动清理两阶段事务; 当设置autovacuum为on,autovacuum_max_workers大于0时,表示系统不仅在故障恢复后,自动清理两阶段事务,并且还可以自动清理线程。 取值范围:布尔型 on表示开启数据库自动清理线程。 off表示关闭数据库自动清理线程。 默认值:on
  • autovacuum_mode 参数说明:该参数仅在autovacuum设置为on的场景下生效,它控制autoanalyze或autovacuum的打开情况。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 取值范围:枚举类型 analyze表示只做autoanalyze。 vacuum表示只做autovacuum。 mix表示autoanalyze和autovacuum都做。 none表示二者都不做。 默认值:mix
  • log_autovacuum_min_duration 参数说明:当自动清理的执行时间大于或者等于某个特定的值时,向服务器日志中记录自动清理执行的每一步操作。设置此选项有助于追踪自动清理的行为。 该参数属于SIGHUP类型参数,请参考表1中对应设置方法进行设置。 举例如下: 将log_autovacuum_min_duration设置为250ms,记录所有运行大于或者等于250ms的自动清理命令的相关信息。 取值范围:整型,最小值为-1,最大值为2147483647,单位为毫秒。 当参数设置为0时,表示所有的自动清理操作都记录到日志中。 当参数设置为-1时,表示所有的自动清理操作都不记录到日志中。 当参数设置为非-1时,当由于锁冲突的存在导致一个自动清理操作被跳过,记录一条消息。 默认值:-1
  • autovacuum_max_workers 参数说明:设置能同时运行的自动清理线程的最大数量,该参数的取值上限与GUC参数max_connections和job_queue_processes大小有关。 该参数属于POSTMASTER类型参数,请参考表1中对应设置方法进行设置。 取值范围:整型,最小值为0(表示不会自动进行autovacuum),理论最大值为262143,实际最大值为动态值,计算公式为“262143 - max_inner_tool_connections - max_connections - job_queue_processes - max_concurrent_autonomous_transactions - 辅助线程数 – autovacuum的launcher线程数 - 1”,其中辅助线程数和autovacuum的launcher线程数由两个宏来指定,当前版本的默认值分别为20和2。 默认值:3
  • PG_AGGREGATE PG_AGGREGATE系统表存储与聚集函数有关的信息。PG_AGGREGATE里的每条记录都是一条pg_proc里面的记录的扩展。PG_PROC记录承载该聚集的名称、输入和输出数据类型,以及其它一些和普通函数类似的信息。 表1 PG_AGGREGATE字段 名称 类型 引用 描述 aggfnoid regproc PG_PROC.proname 此聚集函数的PG_PROC proname。 aggtransfn regproc PG_PROC.proname 转换函数。 aggcollectfn regproc PG_PROC.proname 收集函数。 aggfinalfn regproc PG_PROC.proname 最终处理函数(如果没有则为零)。 aggsortop oid PG_OPERATOR.oid 关联排序操作符(如果没有则为零)。 aggtranstype oid PG_TYPE.oid 此聚集函数的内部转换(状态)数据的数据类型。 可能取值及其含义见于pg_type.h中诸type定义,主要分为多态(isPolymorphicType)和非多态两类。 agginitval text - 转换状态的初始值。这是一个文本数据域,它包含初始值的外部字符串表现形式。如果数据域是null,则转换状态值从null开始。 agginitcollect text - 收集状态的初始值。这是一个文本数据域,它包含初始值的外部字符串表现形式。如果数据域是null,则收集状态值从null开始。 aggkind "char" - 此聚集函数类型: 'n' :表示Normal Agg 'o' :表示Ordered Set Agg aggnumdirectargs smallint - Ordered Set Agg类型聚集函数的直接参数(非聚集相关参数)数量。对Normal Agg类型聚集函数,该值为0。 父主题: 系统表
  • MY_IND_COLUMNS MY_IND_COLUMNS视图显示当前用户下所有索引的字段信息。所有用户都可以访问。该视图同时存在于PG_CATA LOG 和SYS Schema下。 表1 MY_IND_COLUMNS字段 名称 类型 描述 index_owner character varying(64) 索引的所有者。 index_name character varying(64) 索引名。 table_owner character varying(64) 表的所有者。 table_name character varying(64) 表名。 column_name name 列名。 column_position smallint 索引中列的位置。 column_length numeric 列的长度,如果列是变长类型,该字段取值为NULL。 char_length numeric 列的最大字节长度。 descend character varying 表示列是按降序(DESC)还是升序(ASC)排序。 collated_column_id numeric 暂不支持,值为NULL。 父主题: 系统视图
  • GS_AUDITING_POLICY_AC CES S GS_AUDITING_POLICY_ACCESS系统表记录与DML数据库相关操作的统一审计信息。需要有系统管理员或安全策略管理员权限才可以访问此系统表。 表1 GS_AUDITING_POLICY_ACCESS字段 名称 类型 描述 oid oid 行标识符(隐含属性,必须明确选择)。 accesstype name DML数据库操作相关类型。例如SELECT、INSERT、DELETE等。 labelname name 资源标签名称。对应系统表13.2.2 GS_AUDITING_POLICY中的polname字段。 policyoid oid 所属审计策略的Oid,对应系统表13.2.2 GS_AUDITING_POLICY中的oid。 modifydate timestamp without time zone 创建或修改的最新时间戳。 父主题: 系统表
  • GS_MODEL_WAREHOUSE GS_MODEL_WAREHOUSE系统表用于存储AI引擎训练模型,其中包含模型,训练过程的详细描述。 表1 GS_MODEL_WAREHOUSE字段 名称 数据类型 描述 oid oid 隐含列。 modelname name 唯一约束。 modelowner oid 模型拥有者的OID。 createtime timestamp without time zone 模型创建的时间。 processedtuples integer 训练涉及的元组数。 discardedtuples integer 未参加训练的不合格元组数。 preprocesstime real 数据预处理时长。 exectime real 训练时长。 iterations integer 迭代轮次。 outputtype oid 模型输出的数据类型OID。 modeltype text AI算子的类型名称。 query text 创建模型所执行的query语句。 modeldata bytea 保存的二进制模型信息。 weight real[] 目前只适用于GD算子模型。 hyperparametersnames text[] 涉及的超参名称。 hyperparametersvalues text[] 超参所对应的取值。 hyperparametersoids oid[] 超参对应的数据类型OID。 coefnames text[] 模型参数名称。 coefvalues text[] 模型参数对应的取值。 coefoids oid[] 模型参数对应的数据类型OID。 trainingscoresname text[] 度量模型性能方法的名称。 trainingscoresvalue real[] 度量模型性能方法的数值。 modeldescribe text[] 模型的描述信息。 父主题: 系统表
  • 加载驱动 在创建数据库连接之前,需要先加载数据库驱动程序。 加载驱动有两种方法: 在代码中创建连接之前任意位置隐含装载在与数据库建立连接之前添加Class.forName("org.postgresql.Driver");,建立连接代码详见连接数据库示例章节。 在JVM启动时参数传递,指定驱动名字,适用于在DOS窗口或者Linux上执行Java代码。例如,java -Djdbc.drivers=org.postgresql.Driver jdbctest。 上述jdbctest为测试用例程序的名称。 父主题: 基于JDBC开发
  • 对象标识符类型 GaussDB 在内部使用对象标识符(OID)作为各种系统表的主键。系统不会给用户创建的表增加一个OID系统字段,OID类型代表一个对象标识符。 目前OID类型用一个四字节的无符号整数实现。因此不建议在创建的表中使用OID字段做主键。 表1 对象标识符类型 名称 引用 描述 示例 OID - 数字化的对象标识符。 564182 CID - 命令标识符。它是系统字段cmin和cmax的数据类型。命令标识符是32位的量。 - XID - 事务标识符。它是系统字段xmin和xmax的数据类型。事务标识符是64位的量。 - TID - 行标识符。它是系统表字段ctid的数据类型。行ID是一对数值(块号,块内的行索引),它标识该行在其所在表内的物理位置。 - REGCONFIG pg_ts_config 文本搜索配置。 english REGDICTIONARY pg_ts_dict 文本搜索字典。 simple REGOPER pg_operator 操作符名。 - REGOPERATOR pg_operator 带参数类型的操作符。 *(integer,integer)或-(NONE,integer) REGPROC pg_proc 函数名称。 sum REGPROCEDURE pg_proc 带参数类型的函数。 sum(int4) REGCLASS pg_class 关系名。 pg_type REGTYPE pg_type 数据类型名。 integer OID类型:主要作为数据库系统表中字段使用。 示例: 1 2 3 4 5 gaussdb=# SELECT oid FROM pg_class WHERE relname = 'pg_type'; oid ------ 1247 (1 row) OID别名类型REGCLASS:主要用于对象OID值的简化查找。 示例: 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 gaussdb=# SELECT attrelid,attname,atttypid,attstattarget FROM pg_attribute WHERE attrelid = 'pg_type'::REGCLASS; attrelid | attname | atttypid | attstattarget ----------+------------+----------+--------------- 1247 | xc_node_id | 23 | 0 1247 | tableoid | 26 | 0 1247 | cmax | 29 | 0 1247 | xmax | 28 | 0 1247 | cmin | 29 | 0 1247 | xmin | 28 | 0 1247 | oid | 26 | 0 1247 | ctid | 27 | 0 1247 | typname | 19 | -1 1247 | typnamespace | 26 | -1 1247 | typowner | 26 | -1 1247 | typlen | 21 | -1 1247 | typbyval | 16 | -1 1247 | typtype | 18 | -1 1247 | typcategory | 18 | -1 1247 | typispreferred | 16 | -1 1247 | typisdefined | 16 | -1 1247 | typdelim | 18 | -1 1247 | typrelid | 26 | -1 1247 | typelem | 26 | -1 1247 | typarray | 26 | -1 1247 | typinput | 24 | -1 1247 | typoutput | 24 | -1 1247 | typreceive | 24 | -1 1247 | typsend | 24 | -1 1247 | typmodin | 24 | -1 1247 | typmodout | 24 | -1 1247 | typanalyze | 24 | -1 1247 | typalign | 18 | -1 1247 | typstorage | 18 | -1 1247 | typnotnull | 16 | -1 1247 | typbasetype | 26 | -1 1247 | typtypmod | 23 | -1 1247 | typndims | 23 | -1 1247 | typcollation | 26 | -1 1247 | typdefaultbin | 194 | -1 1247 | typdefault | 25 | -1 1247 | typacl | 1034 | -1 1247 | typelemmod | 23 | -1 (39 rows) 父主题: 数据类型
  • GS_OPT_MODEL GS_OPT_MODEL是启用AiEngine执行计划时间预测功能时的数据表,记录机器学习模型的配置、训练结果、功能、对应系统函数、训练历史等相关信息。 表1 GS_OPT_MODEL字段 名称 类型 描述 template_name name 机器学习模型的模板名,决定训练和预测调用的函数接口,目前只实现了rlstm,方便后续扩展。 model_name name 模型的实例名,每个模型对应AiEngine在线学习进程中的一套参数、训练日志、模型系数。此列需为unique。 datname name 该模型所服务的database名,每个模型只针对单个database。此参数决定训练时所使用的数据。 ip name AiEngine端所部署的host ip地址。 port integer AiEngine端所侦听的端口号。 max_epoch integer 模型每次训练的迭代次数上限。 learning_rate real 模型训练的学习速率,推荐缺省值1。 dim_red real 模型特征维度降维系数。 hidden_units integer 模型隐藏层神经元个数。如果训练发现模型长期无法收敛,可以适量提升本参数。 batch_size integer 模型每次迭代时一个batch的大小,尽量设为大于等于训练数据总量的值,加快模型的收敛速度。 feature_size integer [不需设置] 模型特征的长度,用于触发重新训练,模型训练后该参数自动更新。 available boolean [不需设置]标识模型是否收敛。 Is_training boolean [不需设置]标识模型是否正在训练。 label "char"[] 模型的目标任务: S: startup time T: total time R: rows M: peak memory 目前受模型性能限制,推荐{S, T}或{R}。 max bigint[] [不需设置]标识模型各任务标签的最大值,用于触发重新训练。 acc real[] [不需设置]标识模型各任务的准确率。 description text 模型注释。 父主题: 系统表
  • 选择数据类型 高效数据类型,主要包括以下三方面: 尽量使用执行效率比较高的数据类型 一般来说整型数据运算(包括=、>、<、≧、≦、≠等常规的比较运算,以及group by)的效率比字符串、浮点数要高。 尽量使用短字段的数据类型 长度较短的数据类型不仅可以减小数据文件的大小,提升I/O性能;同时也可以减小相关计算时的内存消耗,提升计算性能。比如对于整型数据,如果可以用smallint就尽量不用int,如果可以用int就尽量不用bigint。 使用一致的数据类型 表关联列尽量使用相同的数据类型。如果表关联列数据类型不同,数据库必须动态地转化为相同的数据类型进行比较,这种转换会带来一定的性能开销。 父主题: 表设计最佳实践
  • PG_CONVERSION PG_CONVERSION系统表描述编码转换信息。 表1 PG_CONVERSION字段 名称 类型 引用 描述 oid oid - 行标识符(隐含属性,必须明确选择)。 conname name - 转换名称(在一个名称空间里是唯一的)。 connamespace oid PG_NAMESPACE.oid 包含这个转换的名称空间的OID。 conowner oid PG_AUTHID.oid 编码转换的属主。 conforencoding integer - 源编码ID。 contoencoding integer - 目的编码ID。 conproc regproc PG_PROC.proname 转换过程。 condefault boolean - 如果这是缺省转换则为真,否则为假。 父主题: 系统表
  • 接口介绍 高级功能包DBE_XMLDOM用于访问XMLType对象,实现DOM(Document Object Model),一个用于访问HTML和XML DOCUMENTS API。高级功能包DBE_XMLDOM支持的所有类型请参见 表1,DBE_XMLDOM支持的所有接口请参见 表2。 当在数据库的字符集设置为SQL_ASCII的情况下使用DBE_XMLDOM高级包,传入超出ASCII范围的字符时,会产生报错信息。 表1 DBE_XMLDOM数据类型说明 类型名称 描述 DOMATTR 实现DOM Attribute接口。 DOMDOCUMENT 实现DOM Document接口。 DOMELEMENT 实现DOM Element接口。 DOMNAMEDNODEMAP 实现DOM Named Node Map接口。 DOMNODELIST 实现DOM Node List接口。 DOMNODE 实现DOM Node接口。 DOMTEXT 实现DOM Text接口。 表2 DBE_XMLDOM接口参数说明 接口名称 描述 DBE_XMLDOM.APPENDCHILD 将newchild node添加到parent(n)节点最后面,并返回新添加的Node节点。 DBE_XMLDOM.CREATEELEMENT 创建指定名称的DOMELEMENT对象。 DBE_XMLDOM.CREATETEXTNODE 创建DOMTEXT节点。 DBE_XMLDOM.FREEDOCUMENT 释放DOMDOCUMENT节点相关资源。 DBE_XMLDOM.FREEELEMENT 释放DOMELEMENT节点相关资源。 DBE_XMLDOM.FREENODE 释放DOMNODE节点相关资源。 DBE_XMLDOM.FREENODELIST 释放DOMNODELIST节点相关资源。 DBE_XMLDOM.GETATTRIBUTE 按名称返回DOMELEMENT属性的值。 DBE_XMLDOM.GETATTRIBUTES 将DOMNODE节点属性值作为map返回。 DBE_XMLDOM.GETCHILDNODES 将节点下的若干子节点转换成节点列表。 DBE_XMLDOM.GETCHILDRENBYTAGNAME 按名称返回DOMELEMENT的子节点。 DBE_XMLDOM.GETDOCUMENTELEMENT 返回指定DOCUMENT的首个子节点。 DBE_XMLDOM.GETFIRSTCHILD 返回第一个子节点。 DBE_XMLDOM.GETLASTCHILD 返回最后一个子节点。 DBE_XMLDOM.GETLENGTH 获取给定节点中的节点个数。 DBE_XMLDOM.GETLOCALNAME 检索节点的本地名称。 DBE_XMLDOM.GETNAMEDITEM 检索由名称指定的节点。 DBE_XMLDOM.GETNEXTSIBLING 返回该节点的下一个节点。 DBE_XMLDOM.GETNODENAME 返回节点名称。 DBE_XMLDOM.GETNODETYPE 返回节点类型。 DBE_XMLDOM.GETNODEVALUE 此函数用于获取节点的值,具体取决于其类型。 DBE_XMLDOM.GETPARENTNODE 检索此节点的父节点。 DBE_XMLDOM.GETTAGNAME 返回指定DOMELEMENT的标签名称。 DBE_XMLDOM.HASCHILDNODES 检查DOMNODE对象是否拥有任一子节点。 DBE_XMLDOM.IMPORTNODE 复制节点并为该节点指定所属文档。 DBE_XMLDOM.ISNULL 检测节点是否为空。 DBE_XMLDOM.ITEM 返回映射中与索引参数对应的项。 DBE_XMLDOM.MAKEELEMENT 将DOMNODE对象转换为DOMELEMENT类型。 DBE_XMLDOM.MAKENODE 将节点强制转换为DOMNODE类型。 DBE_XMLDOM.NEWDOMDOCUMENT 返回新的DOMDOCUMENT对象。 DBE_XMLDOM.SETATTRIBUTE 按名称设置DOMELEMENT属性的值。 DBE_XMLDOM.SETCHARSET 设置DOMDOCUMENT的CHATSET字符集。 DBE_XMLDOM.SETDOCTYPE 设置DOMDOCUMENT的外部DTD。 DBE_XMLDOM.SETNODEVALUE 此函数用于向DOMNODE对象中设置节点的值。 DBE_XMLDOM.WRITETOBUFFER 将 XML 节点写入指定缓冲区。 DBE_XMLDOM.WRITETOCLOB 将 XML 节点写入指定CLOB。 DBE_XMLDOM.WRITETOFILE 将 XML 节点写入指定文件。 DBE_XMLDOM.GETSESSIONTREENUM 显示当前session中所有类型的dom树的数量。 DBE_XMLDOM.GETDOCTREESINFO 显示document类型的dom树的内存占用、结点数量等统计信息。 DBE_XMLDOM.GETDETAILDOCTREEINFO 显示特定的document变量的各类型结点数量。
  • MY_ERRORS MY_ERRORS视图显示用户拥有的存储对象的最新编译错误信息。该视图所有用户可访问,仅可查看当前用户所属信息。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 MY_ERRORS字段 名称 类型 描述 name character varying(128) 对象的名称。 type character varying(12) 对象类型: PROCEDURE FUNCTION PACKAGE PACKAGE BODY sequence numeric 序列号。 line numeric 发生错误的行号。 position numeric 发生错误的行中的位置。 text character varying(4000) 错误文本。 attribute character varying(9) 属性标记:错误(ERROR)。 message_number numeric 暂不支持,值为NULL。 父主题: 系统视图
  • MY_TYPES MY_TYPES视图用于描述当前用户所拥有的所有对象类型。所有用户都可以访问该视图。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 MY_TYPES字段 名称 类型 描述 type_name character varying(128) 类型名称。 type_oid raw 类型的标识符(OID)。 typecode character varying(128) 类型的类型代码。 attributes numeric 类型中的属性数。 methods numeric 暂不支持,值为0。 predefined character varying(3) 表示该类型是否是内置类型。 incomplete character varying(3) 表示类型是否为不完整类型。 final character varying(3) 暂不支持,值为NULL。 instantiable character varying(3) 暂不支持,值为NULL。 persistable character varying(3) 暂不支持,值为NULL。 supertype_owner character varying(128) 暂不支持,值为NULL。 supertype_name character varying(128) 暂不支持,值为NULL。 local_attributes numeric 暂不支持,值为NULL。 local_methods numeric 暂不支持,值为NULL。 typeid raw 暂不支持,值为NULL。 父主题: 系统视图
  • PG_STATIO_SYS_TABLES PG_STATIO_SYS_TABLES视图显示命名空间中所有系统表的I/O状态信息。 表1 PG_STATIO_SYS_TABLES字段 名称 类型 描述 relid oid 表OID。 schemaname name 该表的模式名。 relname name 表名。 heap_blks_read bigint 从该表中读取的磁盘块数。 heap_blks_hit bigint 该表命中缓存数。 idx_blks_read bigint 从表中所有索引读取的磁盘块数。 idx_blks_hit bigint 表中所有索引命中缓存数。 toast_blks_read bigint 从该表的TOAST表读取的磁盘块数(如果存在)。 toast_blks_hit bigint 该表的TOAST表命中缓存数(如果存在)。 tidx_blks_read bigint 从该表的TOAST表索引读取的磁盘块数(如果存在)。 tidx_blks_hit bigint 该表的TOAST表索引命中缓存数(如果存在)。 父主题: 系统视图
  • REPLICATION_STAT REPLICATION_STAT用于描述日志同步状态信息,如发起端发送日志位置,接收端接收日志位置等。 表1 REPLICATION_STAT字段 名称 类型 描述 pid bigint 线程的PID。 usesysid oid 用户系统ID。 usename name 用户名。 application_name text 程序名称。 client_addr inet 客户端地址。 client_hostname text 客户端名。 client_port integer 客户端端口。 backend_start timestamp with time zone 程序启动时间。 state text 日志复制的状态: 追赶状态 一致的流状态 sender_sent_location text 发送端发送日志位置。 receiver_write_location text 接收端write日志位置。 receiver_flush_location text 接收端flush日志位置。 receiver_replay_location text 接收端replay日志位置。 sync_priority integer 同步复制的优先级(0表示异步)。 sync_state text 同步状态: 异步复制 同步复制 潜在同步者 父主题: Utility
  • DBE_PLDEBUGGER.set_var 将指定的调试的存储过程中最上层栈上的变量修改为入参的取值。如果存储过程中包含同名的变量,set_var只支持第一个变量值的设置。 表1 set_var入参和返回值列表 名称 类型 描述 var_name IN text 变量名 value IN text 修改值 result OUT boolean 结果,是否成功 父主题: DBE_PLDEBUGGER Schema
  • 执行批处理 用一条预处理语句处理多条相似的数据,数据库只创建一次执行计划,节省了语句的编译和优化时间。可以按如下步骤执行: 调用Connection的prepareStatement方法创建预编译语句对象。 1 2 3 4 5 6 // 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放,使用时解密),确保安全。 // 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。 String userName = System.getenv("EXAMPLE_USERNAME_ENV"); String password = System.getenv("EXAMPLE_PASSWORD_ENV"); Connection conn = DriverManager.getConnection("url",userName,password); PreparedStatement pstmt = conn.prepareStatement("INSERT INTO customer_t1 VALUES (?)"); 针对每条数据都要调用setShort设置参数,以及调用addBatch确认该条设置完毕。 1 2 pstmt.setShort(1, (short)2); pstmt.addBatch(); 调用PreparedStatement的executeBatch方法执行批处理。 1 int[] rowcount = pstmt.executeBatch(); 调用PreparedStatement的close方法关闭预编译语句对象。 1 pstmt.close(); 在实际的批处理过程中,通常不终止批处理程序的执行,否则会降低数据库的性能。因此在批处理程序时,应该关闭自动提交功能,每几行提交一次。关闭自动提交功能的语句为: conn.setAutoCommit(false);。
  • Oracle兼容模式启用重载时,调用存储过程 打开参数behavior_compat_options='proc_outparam_override'后,JDBC调用事先创建的存储过程,步骤如下: 调用Connection的prepareCall方法创建调用语句对象。 1 2 3 4 5 6 // 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放,使用时解密),确保安全。 // 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。 String userName = System.getenv("EXAMPLE_USERNAME_ENV"); String password = System.getenv("EXAMPLE_PASSWORD_ENV"); Connection conn = DriverManager.getConnection("url",userName,password); CallableStatement cs = conn.prepareCall("{ CALL TEST_PROC(?,?,?) }"); 调用CallableStatement的setInt方法设置参数。 1 2 3 4 PGobject pGobject = new PGobject(); pGobject.setType("public.compfoo"); // 设置复合类型名,格式为“schema.typename”。 pGobject.setValue("(1,demo)"); // 绑定复合类型值,格式为“(value1,value2)”。 cs.setObject(1, pGobject); 调用CallableStatement的registerOutParameter方法注册输出参数。 1 2 3 4 // 注册out类型的参数,类型为复合类型,格式为“schema.typename”。 cs.registerOutParameter(2, Types.STRUCT, "public.compfoo"); // 注册out类型的参数,类型为Table类型,格式为“schema.typename”。 cs.registerOutParameter(3, Types.ARRAY, "public.compfoo_table"); 调用CallableStatement的execute方法调用。 1 cs.execute(); 调用CallableStatement的getObject方法获取输出参数。 1 2 3 4 5 6 7 8 9 10 11 12 // 返回结构是自定义类型 PGobject result = (PGobject)cs.getObject(2); // 获取out参数 result.getValue(); // 获取复合类型字符串形式值。 result.getArrayValue(); //获取复合类型数组形式值,以复合数据类型字段顺序排序。 result.getStruct(); //获取复合类型子类型名,按创建顺序排序。 result.getAttributes(); //返回自定义类型每列组成类型的对象,对于array类型和table类型返回的是PgArray,对于自定义类型,封装的是PGobject,对于其他类型数据存储方式为字符串类型。 // 返回结果是Table类型 PgArray pgArray = (PgArray) cs.getObject(3); ResultSet rs = pgArray.getResultSet(); while (rs.next()) { rs.getObject(2);// table类型每行的数据构建成的对象 } 如果出参的table类型组成为自定义类型,例如create type compfooTable is table of compfoo,此时接收到的返回对象为PgArray,在通过rs.getObject(2)遍历获取到的组成对象也为PgArray,此时无法获取到组成它的compfoo类型对应的每列数据,需要通过getPGobject()获取到PgObject再操作获取。 调用CallableStatement的close方法关闭调用语句。 1 cs.close(); oracle兼容模式开启参数后,调用存储过程必须使用{call proc_name(?,?,?)}形式调用,调用函数必须使用{? = call func_name(?,?)}形式调用(等号左侧的“?”为函数返回值的占位符,用于注册函数返回值)。 参数behavior_compat_options='proc_outparam_override'行为变更后,业务需要重新建立连接,否则无法正确调用存储过程和函数。 函数和存储过程中包含复合类型时,参数的绑定与注册需要使用schema.typename形式。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 // 在数据库创建复合数据类型。 CREATE TYPE compfoo AS (f1 int, f3 text); // 在数据库中已创建了如下存储过程,它带有out参数。 create or replace procedure test_proc ( psv_in in compfoo, psv_out out compfoo, table_out out compfoo_table ) as begin psv_out := psv_in; table_out:=compfoo_table(); table_out.extend(2); table_out(1):=psv_out; table_out(2):=psv_out; end; / // 在数据库中创建table类型。 create type compfoo_table is table of compfoo;
  • 调用存储过程 GaussDB支持通过JDBC直接调用事先创建的存储过程,步骤如下: 调用Connection的prepareCall方法创建调用语句对象。 1 2 3 4 5 6 // 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放,使用时解密),确保安全。 // 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。 String userName = System.getenv("EXAMPLE_USERNAME_ENV"); String password = System.getenv("EXAMPLE_PASSWORD_ENV"); Connection myConn = DriverManager.getConnection("url",userName,password); CallableStatement cstmt = myConn.prepareCall("{? = CALL TESTPROC(?,?,?)}"); 调用CallableStatement的setInt方法设置参数。 1 2 3 cstmt.setInt(2, 50); cstmt.setInt(1, 20); cstmt.setInt(3, 90); 调用CallableStatement的registerOutParameter方法注册输出参数。 1 cstmt.registerOutParameter(4, Types.INTEGER); //注册out类型的参数,类型为整型。 调用CallableStatement的execute方法调用。 1 cstmt.execute(); 调用CallableStatement的getInt方法获取输出参数。 1 int out = cstmt.getInt(4); //获取out参数 示例: 1 2 3 4 5 6 7 8 9 10 11 12 //在数据库中已创建了如下存储过程,它带有out参数。 create or replace procedure testproc ( psv_in1 in integer, psv_in2 in integer, psv_inout in out integer ) as begin psv_inout := psv_in1 + psv_in2 + psv_inout; end; / 调用CallableStatement的close方法关闭调用语句。 1 cstmt.close(); 很多数据库类如Connection、Statement和ResultSet都有close()方法,在使用完对象后应把它们关闭。Connection的关闭将间接关闭所有与它关联的Statement,Statement的关闭间接关闭了ResultSet。 一些JDBC驱动程序提供命名参数的方法来设置参数。命名参数的方法允许根据名称而不是顺序来设置参数,若参数有默认值,则可以不用指定参数值就可以使用此参数的默认值。即使存储过程中参数的顺序发生了变更,也不必修改应用程序。目前 GaussDB数据库 的JDBC驱动程序不支持此方法。 GaussDB数据库不支持带有输出参数的函数,也不支持存储过程和函数参数默认值。 myConn.prepareCall("{? = CALL TESTPROC(?,?,?)}"),执行存储过程绑定参数时,可以按照占位符的顺序绑定参数,注册第一个参数为出参,也可以按照存储过程中的参数顺序绑定参数,注册第四个参数为出参,上述用例为此场景,注册第四个参数为出参。 当游标作为存储过程的返回值时,如果使用JDBC调用该存储过程,返回的游标将不可用。 存储过程不能和普通SQL在同一条语句中执行。 存储过程中inout类型参数必需注册出参。
  • 执行预编译SQL语句 预编译语句是只编译和优化一次,可以通过设置不同的参数值多次使用。由于已经预先编译好,后续使用会减少执行时间。因此,如果多次执行一条语句,请选择使用预编译语句。可以按以下步骤执行: 调用Connection的prepareStatement方法创建预编译语句对象。 1 PreparedStatement pstmt = con.prepareStatement("UPDATE customer_t1 SET c_customer_name = ? WHERE c_customer_sk = 1"); 调用PreparedStatement的setShort设置参数。 1 pstmt.setShort(1, (short)2); PrepareStatement设置绑定参数后,最终会构建成一个B报文或U报文,在下一步执行SQL语句时发给服务端。但是B报文或U报文有最大长度限制(不能超过1023MB),如果一次绑定数据过大,可能因报文过长导致异常。因此PrepareStatement设置绑定参数时需要注意评估和控制绑定数据的大小,避免出现超出报文上限要求的现象。 调用PreparedStatement的executeUpdate方法执行预编译SQL语句。 1 int rowcount = pstmt.executeUpdate(); 调用PreparedStatement的close方法关闭预编译语句对象。 1 pstmt.close();
  • 执行普通SQL语句 应用程序通过执行SQL语句来操作数据库的数据(不用传递参数的语句),需要按以下步骤执行。 支持对XML类型数据进行SELECT、UPDATE、INSERT、DELETE等操作。 调用Connection的createStatement方法创建语句对象。 1 2 3 4 5 6 // 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放,使用时解密),确保安全。 // 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。 String userName = System.getenv("EXAMPLE_USERNAME_ENV"); String password = System.getenv("EXAMPLE_PASSWORD_ENV"); Connection conn = DriverManager.getConnection("url",userName,password); Statement stmt = conn.createStatement(); 调用Statement的executeUpdate方法执行SQL语句。 1 int rc = stmt.executeUpdate("CREATE TABLE customer_t1(c_customer_sk INTEGER, c_customer_name VARCHAR(32));"); 数据库中收到的一次执行请求(不在事务块中),如果含有多条语句,将会被打包成一个事务,事务块中不支持vacuum操作。如果其中有一个语句失败,那么整个请求都将会被回滚。 使用Statement执行多语句时应以“;”作为各语句间的分隔符,存储过程、函数、匿名块不支持多语句执行。当preferQueryMode=simple,语句执行不进行解析逻辑,此场景下无法使用";"作为多语句间的分隔符。 “/”可用作创建单个存储过程、函数、匿名块、包体的结束符。当preferQueryMode=simple,语句执行不进行解析逻辑,此场景下无法使用"/"作为结束符。 在prepareThreshold=1时,因为preferQueryMode默认模式不对statement进行缓存淘汰,所以statement执行的每条SQL都会缓存语句,可能导致内存膨胀。需要调整preferQueryMode=extendedCacheEverything,对statement进行缓存淘汰。 关闭语句对象。 1 stmt.close();
  • ifdef、ifndef、else、elif和endif指令 ecpg提供了ifdef、ifndef、else、elif和endif条件编译指令。在预处理时,按照不同的条件去编译程序的不同部分,使用时,需要添加EXEC SQL前缀关键字。 示例如下: EXEC SQL ifndef TZVAR; EXEC SQL SET TIMEZONE TO 'GMT'; EXEC SQL elif TZNAME; EXEC SQL SET TIMEZONE TO TZNAME; EXEC SQL else; EXEC SQL SET TIMEZONE TO TZVAR; EXEC SQL endif; 父主题: 预处理指令
  • 操作步骤 收集SQL中涉及到的所有表的统计信息。在数据库中,统计信息是优化器生成计划的源数据。没有收集统计信息或者统计信息陈旧往往会造成执行计划严重劣化,从而导致性能问题。从经验数据来看,10%左右性能问题是因为没有收集统计信息。具体请参见更新统计信息。 通过查看执行计划来查找原因。如果SQL长时间运行未结束,通过EXPLAIN命令查看执行计划,进行初步定位。如果SQL可以运行出结果来,则推荐使用EXPLAIN ANALYZE或EXPLAIN PERFORMANCE查看执行计划及实际运行情况,以便更精准地定位问题原因。有关执行计划的详细介绍请参见SQL执行计划介绍。 审视和修改表定义。 针对EXPLAIN或EXPLAIN PERFORMANCE信息,定位SQL慢的具体原因以及改进措施,具体参见典型SQL调优点。 通常情况下,有些SQL语句可以通过查询重写转换成等价的,或特定场景下等价的语句。重写后的语句比原语句更简单,且可以简化某些执行步骤达到提升性能的目的。查询重写方法在各个数据库中基本是通用的。经验总结:SQL语句改写规则介绍了几种常用的通过改写SQL进行调优的方法。 如果使用上述常规手段无法分析慢SQL根因的场景,还可以通过使用plan trace特性来分析慢SQL根因,具体请参见PLAN TRACE使用介绍。
  • 语法格式 设置事务的隔离级别、读写模式。 { SET [ LOCAL | SESSION | GLOBAL ] TRANSACTION|SET SESSION CHARACTERIS TICS AS TRANSACTION } { ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE | REPEATABLE READ } | { READ WRITE | READ ONLY } };
  • 参数说明 LOCAL 声明该命令只在当前事务中有效。 SESSION 声明这个命令只对当前会话起作用。 SET SESSION TRANSACTION语句需要在B兼容模式下,设置GUC参数b_format_behavior_compat_options为set_session_transaction后生效。其他情形使用SET SESSION CHARACTERISTI CS 语句。 GLOBAL 声明这个命令对当前数据库的全局会话生效。 作用范围:在集中式的B兼容模式下生效。对后续连接的会话生效。 ISOLATION LEVEL 指定事务隔离级别,该参数决定当一个事务中存在其他并发运行事务时能够看到什么数据。 在事务中第一个数据修改语句(SELECT,INSERT,DELETE,UPDATE,FETCH,COPY)执行之后,当前事务的隔离级别就不能再次设置。 事务块内SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL对当前事务不生效,需要COMMIT之后才生效。 取值范围: READ COMMITTED:读已提交隔离级别,只能读到已经提交的数据,而不会读到未提交的数据。这是缺省值。 REPEATABLE READ:可重复读隔离级别,仅仅能看到事务开始之前提交的数据,不能看到未提交的数据,以及在事务执行期间由其它并发事务提交的修改。 SERIALIZABLE:GaussDB目前功能上不支持此隔离级别,等价于REPEATABLE READ。 READ WRITE | READ ONLY 指定事务访问模式(读/写或者只读)。
  • 示例 --开启一个事务,设置事务的隔离级别为READ COMMITTED,访问模式为READ ONLY。 gaussdb=# START TRANSACTION; gaussdb=# SET LOCAL TRANSACTION ISOLATION LEVEL READ COMMITTED READ ONLY; gaussdb=# COMMIT; --设置当前会话的事务隔离级别、读写模式。 --在sql_compatibility = 'B'场景下,b_format_behavior_compat_options设置为set_session_transaction。 gaussdb=# SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; gaussdb=# SET SESSION TRANSACTION READ ONLY; --设置当前数据库全局会话的事务隔离级别、读写模式(sql_compatibility = 'B'场景下)。 gaussdb=# SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED; gaussdb=# SET GLOBAL TRANSACTION READ ONLY;
共100000条