华为云用户手册

  • data_sync_retry 参数说明:控制当fsync到磁盘失败后是否继续运行数据库。由于在某些操作系统的场景下,fsync失败后重试阶段即使再次fsync失败也不会报错,从而导致数据丢失。 该参数属于POSTMASTER类型参数,请参见表2中对应设置方法进行设置。 取值范围:布尔型 on表示当fsync同步到磁盘失败后采取重试机制,数据库继续运行。 off表示当fsync同步到磁盘失败后直接报panic,停止数据库。 默认值:off
  • omit_encoding_error 参数说明:设置为on,数据库的客户端字符集编码为UTF-8时,出现的字符编码转换错误将打印在日志中,有转换错误的被转换字符会被忽略,以"?"代替。 该参数属于USERSET类型参数,请参见表2中对应设置方法进行设置。 取值范围:布尔型 on表示有转换错误的字符将被忽略,以"?"代替,打印错误信息到日志中。 off表示有转换错误的字符不能被转换,打印错误信息到终端。 默认值:off
  • restart_after_crash 参数说明:设置为on,后端进程崩溃时,GaussDB将自动重新初始化此后端进程。 该参数属于SIGHUP类型参数,请参见表2中对应设置方法进行设置。 取值范围:布尔型 on表示能够最大限度地提高数据库的可用性。 在某些情况(比如当采用管理工具(例如xCAT)管理GaussDB时),能够最大限度地提高数据库的可用性。 off表示能够使得管理工具在后端进程崩溃时获取控制权并采取适当的措施进行处理。 默认值:on
  • MY_SOURCE MY_SOURCE视图显示当前用户拥有的存储过程、函数、触发器、包的定义信息。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 MY_SOURCE字段 名称 类型 描述 owner name 对象的所有者。 name name 对象名字。 type name 对象类型:function、package、package body、procedure、trigger。 line numeric 此行来源的行号。 text text 存储对象的文本来源。 origin_con_id character varying(256) 暂不支持,值为0。 父主题: 其他系统视图
  • GLOBAL_STAT_DATABASE_CONFLICTS 显示数据库各节点冲突状态的统计信息(不同节点下,每个数据库状态信息不汇总求和),如表1所示。 表1 GLOBAL_STAT_DATABASE_CONFLICTS字段 名称 类型 描述 node_name name 节点名称。 datid oid 数据库标识。 datname name 数据库名称。 confl_tablespace bigint 冲突的表空间的数目。 confl_lock bigint 冲突的锁数目。 confl_snapshot bigint 冲突的快照数目。 confl_bufferpin bigint 冲突的缓冲区数目。 confl_deadlock bigint 冲突的死锁数目。 父主题: Object
  • GS_AUDITING_POLICY GS_AUDITING_POLICY系统表记录统一审计的主体信息,每条记录对应一个设计策略。需要有系统管理员或安全策略管理员权限才可以访问此系统表。 表1 GS_AUDITING_POLICY字段 名称 类型 描述 oid oid 行标识符(隐含属性,必须明确选择)。 polname name 策略名称,需要唯一,不可重复。 polcomments name 策略描述字段,记录策略相关的描述信息,通过COMMENTS关键字体现。 modifydate timestamp without time zone 策略创建或修改的最新时间戳。 polenabled boolean 用来表示策略启动开关。 t(true):表示策略启动。 f(false):表示策略没有启动。 父主题: 审计
  • REPLICATION_SLOTS REPLICATION_SLOTS视图用于查看复制槽的信息,如表1所示。 表1 REPLICATION_SLOTS字段 名称 类型 描述 slot_name text 复制槽的名称。 plugin text 逻辑复制槽对应的输出插件名称。 slot_type text 复制槽的类型。 physical:物理复制槽。 logical:逻辑复制槽。 datoid oid 复制槽所在的数据库OID。 database name 复制槽所在的数据库名称。 active boolean 复制槽是否为激活状态。 t(true):表示是。 f(false):表示不是。 xmin xid 数据库须为复制槽保留的最早事务的事务号。 catalog_xmin xid 数据库须为逻辑复制槽保留的最早的涉及系统表的事务的事务号。 restart_lsn text 复制槽需要的最早xlog的物理位置。 dummy_standby boolean 预留参数。 父主题: Utility
  • 示例 创建一个名为seq1的递增序列,从101开始,步长为10。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 gaussdb=# CREATE SEQUENCE seq1 START 101 INCREMENT 10; --从序列中选出下一个数字: gaussdb=# SELECT nextval('seq1'); nextval --------- 101 (1 row) gaussdb=# SELECT nextval('seq1'); nextval --------- 111 --删除序列。 gaussdb=# DROP SEQUENCE seq1; 表自增列的一种实现。 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 --创建表。 gaussdb=# CREATE TABLE test1(id int PRIMARY KEY, name varchar(20)); --创建与表关联的序列。 gaussdb=# CREATE SEQUENCE test_seq2 START 1 NO CYCLE OWNED BY test1.id; --设置字段的默认值。 gaussdb=# ALTER TABLE test1 ALTER COLUMN id SET DEFAULT nextval('test_seq2'::regclass); -- 插入数据。 gaussdb=# INSERT INTO test1 (name) values ('Joe'),('Scott'),('Ben'); --查询表的数据。 gaussdb=# SELECT * FROM test1; id | name ----+------- 1 | Joe 2 | Scott 3 | Ben (3 rows) --删除序列和表。 gaussdb=# DROP SEQUENCE test_seq2 CASCADE; gaussdb=# DROP TABLE test1;
  • 语法格式 CREATE [ LARGE | TEMPORARY | TEMP ] SEQUENCE [ IF NOT EXISTS ] name [ INCREMENT [ BY ] increment ] [ MINVALUE minvalue | NO MINVALUE | NOMINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE | NOMAXVALUE] [ START [ WITH ] start ] [ CACHE cache ] [ [ NO ] CYCLE | NOCYCLE ] [ OWNED BY { table_name.column_name | NONE } ];
  • 参数说明 LARGE | TEMPORARY | TEMP 临时序列关键字。 创建临时序列需要数据库启用PG兼容。 临时序列的生命周期是会话级的,临时序列对象是会话隔离的。序列在会话退出后会自动删除清理。 临时序列存在于一个特殊的模式中,每个会话有且仅有一个临时模式,若提前创建了临时模式,则在创建临时序列时可给出模式名,若未提前创建,则在创建临时序列时不能给出模式名,并且每个会话只能访问自己的临时模式中的对象,无法访问其他会话的临时模式中的对象。如果访问的临时模式不属于本会话,会报告错误。 当临时序列存在时,已有的同名永久序列(在这个会话中) 会变得不可见,不过可以用模式限定的名称来引用同名永久序列。 IF NOT EXISTS 如果指定IF NOT EXISTS关键字,创建序列前会在当前SCHEMA中查找是否已有名字相同的relation。若已有同名relation存在,则不会新建,返回NOTICE提示。未指定IF NOT EXISTS关键字时,若SCHEMA中存在同名relation,返回ERROR告警。 name 将要创建的序列名称。 取值范围: 仅可以使用小写字母(a~z)、 大写字母(A~Z)、数字和特殊字符“#” 、“_”、“$”的组合。 increment 可选。指定序列的步长。一个正数将生成一个递增的序列,一个负数将生成一个递减的序列。 缺省值为1。 在B兼容模式下,步长为浮点数时会自动转为整型。其他模式下,该参数不支持输入浮点数。 MINVALUE minvalue | NO MINVALUE| NOMINVALUE 可选。执行序列的最小值。如果没有声明minvalue或者声明了NO MINVALUE,则递增序列的缺省值为1,递减序列的缺省值为-263-1。NOMINVALUE等价于NO MINVALUE。 MAXVALUE maxvalue | NO MAXVALUE| NOMAXVALUE 可选。执行序列的最大值。如果没有声明maxvalue或者声明了NO MAXVALUE,则递增序列的缺省值为263-1,递减序列的缺省值为-1。NOMAXVALUE等价于NO MAXVALUE。 start 可选。指定序列的起始值。缺省值:对于递增序列为minvalue,递减序列为maxvalue。 cache 可选。为了快速访问,而在内存中预先存储序列号的个数。 缺省值为1,表示一次只能生成一个值,也就是没有缓存。 不建议同时定义cache和maxvalue或minvalue。因为定义cache后不能保证序列的连续性,可能会产生空洞,造成序列号段浪费。 [ NO ] CYCLE | NOCYCLE 可选。用于使序列达到maxvalue或者minvalue后可循环并继续下去。 如果声明了NO CYCLE,则在序列达到其最大值后任何对nextval的调用都会返回一个错误。 NOCYCLE的作用等价于NO CYCLE。缺省值为NO CYCLE。 若定义序列为CYCLE,则不能保证序列的唯一性。 OWNED BY 可选。将序列和一个表的指定字段进行关联。这样,在删除该字段或其所在表的时候会自动删除已关联的序列。关联的表和序列的所有者必须是同一个用户,并且在同一个模式中。需要注意的是,通过指定OWNED BY,仅仅是建立了表的对应列和SEQUENCE之间关联关系,并不会在插入数据时在该列上产生自增序列。 缺省值为OWNED BY NONE,表示不存在这样的关联。 通过OWNED BY创建的SEQUENCE不建议用于其他表,如果希望多个表共享SEQUENCE,该SEQUENCE不应该从属于特定表。
  • 注意事项 SEQUENCE是一个存放等差数列的特殊表。这个表没有实际意义,通常用于为行或者表生成唯一的标识符。 如果给出一个模式名,则该序列就在给定的模式中创建,否则会在当前模式中创建。序列名必须和同一个模式中的其他序列、表、索引、视图或外表的名称不同。 创建序列后,在表中使用序列的nextval()函数和generate_series(1,N)函数对表插入数据,请保证nextval的可调用次数大于等于N+1次,否则会因为generate_series()函数会调用N+1次而导致报错。 SEQUENCE默认最大值为2^63-1,如果使用了Large标识则最大值可以支持到2^127-1。 被授予CREATE ANY SEQUENCE权限的用户,可以在public模式和用户模式下创建序列。
  • WDR Snapshot Schema WDR Snapshot在启动后(打开GUC参数enable_wdr_snapshot),会在用户表空间"pg_default",数据库"postgres"下的Snapshot Schema中创建对象,用于持久化WDR快照数据。默认初始化用户或monadmin用户可以访问和操作Snapshot Schema下的对象。 根据GUC参数wdr_snapshot_retention_days来自动管理快照的生命周期。 用户应该禁止对Snapshot Schema下的表进行增删改等操作,人为对这些表的修改或破坏可能会导致WDR各种异常情况甚至WDR不可用。 WDR Snapshot原信息 WDR Snapshot 数据表 父主题: Schema
  • 层次递归查询函数 层次递归查询语句中可使用以下函数返回连接路径上的相关信息。 sys_connect_by_path(col, separator) 描述:仅在层次递归查询中适用,用于返回从根节点到当前行的连接路径。 参数col为在路径中显示的列的名称,只支持类型为CHAR/VARCHAR/NVARCHAR2/TEXT/INT1/INT2/INT4/INT8/FLOAT4/FLOAT8/NUMERIC的列,参数separator为路径节点之间的分隔符。当前该函数col输入不支持表达式输入。 返回值类型:text 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 --建表导数。 gaussdb=# CREATE TABLE connect_by_table(id int,pid int,name text); CREATE TABLE gaussdb=# INSERT INTO connect_by_table VALUES(1,0,'a'),(2,1,'b'),(3,2,'c'),(4,1,'d'); INSERT 0 4 --查询。 gaussdb=# SELECT *, sys_connect_by_path(name, '-') FROM connect_by_table START WITH id = 1 CONNECT BY prior id = pid ORDER BY pid, id; id | pid | name | sys_connect_by_path ----+-----+------+--------------------- 1 | 0 | a | -a 2 | 1 | b | -a-b 4 | 1 | d | -a-d 3 | 2 | c | -a-b-c (4 rows) --恢复环境。 gaussdb=# DROP TABLE IF EXISTS connect_by_table; DROP TABLE connect_by_root(col) 描述:仅在层次递归查询中适用,用于返回当前行最顶层父亲行中某列的值。 参数col为输出列的名称。 返回值类型:即为所指定列col的数据类型。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 --建表导数。 gaussdb=# CREATE TABLE connect_by_table(id int,pid int,name text); CREATE TABLE gaussdb=# INSERT INTO connect_by_table VALUES(1,0,'a'),(2,1,'b'),(3,2,'c'),(4,1,'d'); INSERT 0 4 --查询。 gaussdb=# SELECT *, connect_by_root(name) FROM connect_by_table START WITH id = 1 CONNECT BY prior id = pid ORDER BY pid, id; id | pid | name | connect_by_root ----+-----+------+----------------- 1 | 0 | a | a 2 | 1 | b | a 4 | 1 | d | a 3 | 2 | c | a (4 rows) --恢复环境。 gaussdb=# drop table if exists connect_by_table; DROP TABLE 父主题: 函数和操作符
  • WLM_USER_RESOURCE_CONFIG WLM_USER_RESOURCE_CONFIG视图显示用户的资源配置信息,如表1所示。 表1 WLM_USER_RESOURCE_CONFIG字段 名称 类型 描述 userid oid 用户oid。 username name 用户名称。 sysadmin boolean 是否是sysadmin。 rpoid oid 资源池的oid。 respool name 资源池的名称。 parentid oid 父用户的oid。 totalspace bigint 占用总空间大小。 spacelimit bigint 空间大上限。 childcount integer 子用户数量。 childlist text 子用户的列表。 父主题: Workload Manager
  • SESSION_MEMORY 统计Session级别的内存使用情况,包含执行作业在当前节点上GaussDB线程和Stream线程分配的所有内存,单位为MB,如表1所示。 表1 SESSION_MEMORY字段 名称 类型 描述 sessid text 线程启动时间+线程标识。 init_mem integer 当前正在执行作业进入执行器前已分配的内存。 used_mem integer 当前正在执行作业已分配的内存。 peak_mem integer 当前正在执行作业已分配的内存峰值。 父主题: Session/Thread
  • PG_ENUM PG_ENUM系统表包含显示每个枚举类型值和标签的记录。给定枚举类型的内部表示实际上是PG_ENUM里面相关行的OID。 表1 PG_ENUM字段 名称 类型 引用 描述 oid oid - 行标识符(隐含属性,必须明确选择)。 enumtypid oid PG_TYPE.oid 拥有这个枚举值的13.2.15.77 PG_TYPE记录的OID。 enumsortorder real - 这个枚举值在它的枚举类型中的排序位置。 enumlabel name - 这个枚举值的文本标签。 PG_ENUM行的OID跟着一个特殊规则:偶数的OID保证用和它们的枚举类型一样的排序顺序排序。也就是,如果两个偶数OID属于相同的枚举类型,那么较小的OID必须有较小enumsortorder值。奇数OID需要毫无关系的排序顺序。这个规则允许枚举比较例程在许多常见情况下避开目录查找。创建和修改枚举类型的例程只要可能就尝试分配偶数OID给枚举值。 当创建了一个枚举类型时,它的成员赋予了排序顺序位置1到n。但是随后添加的成员可能会分配enumsortorder的负值或分数值。对这些值的唯一要求是它们要正确的排序和在每个枚举类型中唯一。 父主题: 其他系统表
  • 通用标识符函数 sys_guid() 描述:产生并返回一个全球唯一的标识符,由16个字节组成,生成的标识符有当前机器IP,生成时间戳,随机数生成一个全局唯一的uuid。 参数:无。 返回值类型:raw 示例: 1 2 3 4 5 6 7 8 9 gaussdb=# SET a_format_version='10c'; SET gaussdb=# SET a_format_dev_version='s5'; SET gaussdb=# SELECT sys_guid(); sys_guid ---------------------------------- 9010675E560CB33C1BDAFA163E378F87 (1 row) uuid() 描述:返回一个根据RFC 4122、ISO/IEF 9834-8:2005以及相关标准定义的通用唯一标识符(UUID)。这个标识符是一个小写十六进制数字的字符串,由分字符分成几组,一组8位数字+三组4位数字+一组12位数字,总共32个数字代表128位。 参数:无。 返回值类型:varchar 示例: 1 2 3 4 5 gaussdb=# SELECT uuid(); uuid -------------------------------------- dd8cbe92-1a25-013c-a514-e435c87e9182 (1 row) uuid_short() 描述:返回一个在一定条件下具有唯一性的短通用标识符。这个标识符是一个64位无符号类型的整数。 在满足下列条件时,返回的值是唯一的。 当前集群下的服务节点数不能超过256个。 不能在节点重新启动之间设置服务器主机的系统时间。 在节点重新启动之间平均每秒调用uuid_short() 少于1600万次。 参数:无。 返回值类型:uint64 示例: 1 2 3 4 5 gaussdb=# SELECT uuid_short(); uuid_short -------------------- 100440026956955649 (1 row) 从505.0.0之前的版本升级至最新版本,升级未提交情况下不能使用uuid_short()函数。 父主题: 函数和操作符
  • 语法 语法请参见图1。 图1 noselect::= using_clause子句的语法参见图2。 图2 using_clause::= 对以上语法格式的解释如下: USING IN bind_argument用于指定存放传递给动态SQL值的变量,在dynamic_noselect_string中存在占位符时使用,即动态SQL语句执行时,bind_argument将替换相对应的占位符。要注意的是,bind_argument只能是值、变量或表达式,不能是表名、列名和数据类型等数据库对象。如果存储过程需要通过声明参数传递数据库对象来构造动态SQL语句(常见于执行DDL语句时),建议采用连接运算符“||”拼接dynamic_select_clause。另外,动态语句允许出现重复的占位符,相同占位符只能与唯一一个bind_argument按位置一一对应。当设置guc参数behavior_compat_options值为dynamic_sql_compat时,会按照占位符的顺序依次匹配USING子句bind_argument,重复的占位符不会再识别为同一个占位符。
  • 示例 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 --创建表 gaussdb=# CREATE TABLE sections_t1 ( section NUMBER(4) , section_name VARCHAR2(30), manager_id NUMBER(6), place_id NUMBER(4) ); CREATE TABLE --声明变量 gaussdb=# DECLARE section NUMBER(4) := 280; section_name VARCHAR2(30) := 'Info support'; manager_id NUMBER(6) := 103; place_id NUMBER(4) := 1400; new_colname VARCHAR2(10) := 'sec_name'; BEGIN --执行查询 EXECUTE IMMEDIATE 'insert into sections_t1 values(:1, :2, :3, :4)' USING section, section_name, manager_id,place_id; --执行查询(重复占位符) EXECUTE IMMEDIATE 'insert into sections_t1 values(:1, :2, :3, :1)' USING section, section_name, manager_id; --执行ALTER语句(建议采用“||”拼接数据库对象构造DDL语句) EXECUTE IMMEDIATE 'alter table sections_t1 rename section_name to ' || new_colname; END; / ANONYMOUS BLOCK EXECUTE --查询数据 gaussdb=# SELECT * FROM sections_t1; section | sec_name | manager_id | place_id ---------+--------------+------------+---------- 280 | Info support | 103 | 1400 280 | Info support | 103 | 280 (2 rows) --删除表 gaussdb=# DROP TABLE sections_t1; DROP TABLE
  • MY_TAB_STATS_HISTORY MY_TAB_STATS_HISTORY视图提供当前用户所拥有的表的表统计信息历史。所有用户都可以访问该视图。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 MY_TAB_STATS_HISTORY字段 名称 类型 描述 table_name character varying(128) 表名。 partition_name character varying(128) 暂不支持,值为NULL。 subpartition_name character varying(128) 暂不支持,值为NULL。 stats_update_time timestamp(6) with time zone 统计信息更新的时间,数据库重启后,数据会丢失。 父主题: 其他系统视图
  • PG_TRIGGER PG_TRIGGER系统表存储触发器信息。 表1 PG_TRIGGER字段 名称 类型 描述 oid oid 行标识符(隐含属性,必须明确选择)。 tgrelid oid 触发器所在表的OID。 tgname name 触发器名。 tgfoid oid 要被触发器调用的函数。 tgtype smallint 触发器类型。 tgenabled "char" O:表示触发器在“origin”和“local”模式下触发。 D:表示触发器被禁用。 R:表示触发器在“replica”模式下触发。 A:表示触发器始终触发。 tgisinternal boolean 内部触发器标识,如果为true表示内部触发器。 tgconstrrelid oid 完整性约束引用的表。 tgconstrindid oid 完整性约束的索引。 tgconstraint oid 约束触发器在12.2.15.30 PG_CONSTRAINT中的OID。 tgdeferrable boolean 约束触发器是否为DEFERRABLE类型。 t(true):表示是。 f(false):表示不是。 tginitdeferred boolean 约束触发器是否为INITIALLY DEFERRED类型。 t(true):表示是。 f(false):表示不是。 tgnargs smallint 触发器函数入参个数。 tgattr int2vector 当触发器指定列时的列号,未指定则为空数组。 tgargs bytea 传递给触发器的参数。 tgqual pg_node_tree 表示触发器的WHEN条件,如果没有则为null。 tgowner oid 触发器的所有者。 父主题: 其他系统表
  • GS_SEG_SPC_SEGMENTS GS_SEG_SPC_SEGMENTS获取所有表空间已使用的段信息。只支持管理员权限用户查询。 表1 GS_SEG_SPC_SEGMENTS字段 名称 类型 描述 node_name text 节点名称。 tablespace_name name 表空间名称。 file_id integer 数据文件标识。 bucketnode integer 0~1023表示hashbucket表的bucketnode。 1024表示段页式普通表的bucketnode。 1025表示段页式全局临时表的bucketnode。 1026表示段页式unlogged表的bucketnode。 1027表示段页式本地临时表的bucketnode。 forknum integer 段对象的分支类型,取值范围: 0表示main fork。 1表示fsm fork。 2表示vm fork。 block_id bigint 数据扩展的起始页面号。 blocks integer 数据扩展大小,取值:1,8,128,1024,4096。 contents text 数据文件的存储内容,取值范围: permanent:永久。 unlogged:不记录日志。 temporary:全局临时。 temporary2:本地临时。 in_used text 是否已分配,取值Y/N。 mapblock_location text 扩展在map block中的位置,格式:(page_id, offset)。 head_file_id integer 段头文件标识。 head_block_id bigint 段头页面号。 usage_type text 扩展的使用类型,取值范围: segment head表示段头。 fork head表示分支头。 level1 page表示level页面。 data extent表示数据扩展。 remain_flag text 是否为shrink残留扩展,取值Y/N。 special_data integer 扩展对应反向指针的特殊数据区。 ipblock_location text 扩展反向指针位置,格式:(block_id, offset)。 父主题: 段页式存储
  • 示例:从MY迁移数据 下面示例演示如何通过CopyManager从MY向GaussDB进行数据迁移。执行示例前,需要加载驱动,驱动的获取和加载方法请参见JDBC包、驱动类和环境类。 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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 // 认证用的用户名和密码直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中存放(密码应密文存放,使用时解密),确保安全。 // 本示例以用户名和密码保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量(环境变量名称请根据自身情况进行设置)EXAMPLE_USERNAME_ENV和EXAMPLE_PASSWORD_ENV。 import java.io.StringReader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import com.huawei.gaussdb.jdbc.copy.CopyManager; import com.huawei.gaussdb.jdbc.core.BaseConnection; public class Migration{ public static void main(String[] args) { String url = new String("jdbc:gaussdb://$ip:$port/database"); //数据库URL String user = System.getenv("EXAMPLE_USERNAME_ENV"); //GaussDB用户名 String pass = System.getenv("EXAMPLE_PASSWORD_ENV"); //GaussDB密码 String tablename = new String("migration_table"); //定义表信息 String delimiter = new String("|"); //定义分隔符 String encoding = new String("UTF8"); //定义字符集 String driver = "com.huawei.gaussdb.jdbc.Driver"; StringBuffer buffer = new StringBuffer(); //定义存放格式化数据的缓存 try { //获取源数据库查询结果集 ResultSet rs = getDataSet(); //遍历结果集,逐行获取记录 //将每条记录中各字段值,按指定分隔符分割,由换行符结束,拼成一个字符串 //把拼成的字符串,添加到缓存buffer while (rs.next()) { buffer.append(rs.getString(1) + delimiter + rs.getString(2) + delimiter + rs.getString(3) + delimiter + rs.getString(4) + "\n"); } rs.close(); try { //建立目标数据库连接 Class.forName(driver); Connection conn = DriverManager.getConnection(url, user, pass); BaseConnection baseConn = (BaseConnection) conn; baseConn.setAutoCommit(false); //初始化表信息 String sql = "Copy " + tablename + " from STDIN DELIMITER " + "'" + delimiter + "'" + " ENCODING " + "'" + encoding + "'"; //提交缓存buffer中的数据 CopyManager cp = new CopyManager(baseConn); StringReader reader = new StringReader(buffer.toString()); cp.copyIn(sql, reader); baseConn.commit(); reader.close(); baseConn.close(); } catch (ClassNotFoundException e) { e.printStackTrace(System.out); } catch (SQLException e) { e.printStackTrace(System.out); } } catch (Exception e) { e.printStackTrace(); } } //******************************** // 从源数据库返回查询结果集 //********************************* private static ResultSet getDataSet() { ResultSet rs = null; try { Class.forName("com.MySQL.jdbc.Driver").newInstance(); String userName = System.getenv("EXAMPLE_USERNAME_ENV"); String password = System.getenv("EXAMPLE_PASSWORD_ENV"); Connection conn = DriverManager.getConnection("jdbc:MySQL://$ip:$port/database?useSSL=false&allowPublicKeyRetrieval=true", userName, password); Statement stmt = conn.createStatement(); rs = stmt.executeQuery("select * from migration_table"); } catch (SQLException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return rs; } } 父主题: 基于JDBC开发
  • java.sql.Statement java.sql.Statement是SQL语句接口。 表1 对java.sql.Statement的支持情况 方法名 返回值类型 支持JDBC4 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 enableStreamingResults() void Yes 通过setFetchSize可以减少结果集在客户端的内存占用情况。它的原理是通过将结果集打包成游标,然后分段处理,所以会加大数据库与客户端的通信量,但会有性能损耗。 由于数据库游标是事务内有效,所以,在设置setFetchSize的同时,需要将连接设置为非自动提交模式,setAutoCommit(false)。同时在业务数据需要持久化到数据库中时,在连接上执行提交操作。 LargeUpdate相关方法必须在JDBC4.2及以上版本使用。 enableStreamingResults()是开启流式读的一个自定义接口,该接口间接调用setFetchSize(Integer.MIN_VALUE)。若要开启流式读功能,需要将url中的enableStreamingQuery设置为true,同时调用setFetchSize(Integer.MIN_VALUE)或者enableStreamingResults()。除开启流式读功能外,setFetchSize()的入参只能为正数或者0。 父主题: JDBC接口参考
  • 修改表示例 单表修改名称 gaussdb=# CREATE TABLE aa(c1 int, c2 int); gaussdb=# RENAME TABLE aa TO test_alt1; gaussdb=# DROP TABLE test_alt1; 多个表修改名称 gaussdb=# CREATE TABLE aa(c1 int, c2 int); gaussdb=# CREATE TABLE bb(c1 int, c2 int); gaussdb=# RENAME TABLE aa TO test_alt1, bb TO test_alt2; gaussdb=# DROP TABLE test_alt1,test_alt2;
  • 参数说明 TABLE | TABLES TABLE和TABLES可以互相替换使用,与语句中操作表的个数无关。 table_name TO new_table_name [, table_name2 TO new_table_name2, ...] table_name、table_name2等为需要修改的表名。 new_table_name、new_table_name2等为修改后的新表名。 TO为中间连接词。
  • ADM_COL_PRIVS ADM_COL_PRIVS视图显示所有的列权限授予信息。默认只有系统管理员权限才可以访问此系统视图,普通用户需要授权才可以访问。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 ADM_COL_PRIVS字段 名称 类型 描述 grantor character varying(128) 执行授权的用户名。 owner character varying(128) 对象的所有者。 grantee character varying(128) 被授予权限的用户或角色的名称。 table_schema character varying(128) 对象的schema。 table_name character varying(128) 对象的名称。 column_name character varying(128) 列的名称。 privilege character varying(40) 列的权限。 grantable character varying(3) 是否授予特权。 YES:授予。 NO:不授予。 common character varying(3) 暂不支持,值为NULL。 inherited character varying(3) 暂不支持,值为NULL。 父主题: 用户和权限管理
  • GS_DB_PRIVILEGE GS_DB_PRIVILEGE系统表记录ANY权限的授予情况,每条记录对应一条授权信息。 表1 GS_DB_PRIVILEGE字段 名称 类型 描述 oid oid 行标识符(隐含字段,必须明确选择)。 roleid oid 用户标识。 privilege_type text 用户拥有的ANY权限,取值参考表1。 admin_option boolean 是否具有privilege_type列记录的ANY权限的再授权权限。 t:表示具有。 f:表示不具有。 父主题: 用户和权限管理
  • DB4AI Schema DB4AI模式在AI特性中主要是用来存储和管理数据集版本。模式中保存数据表的原始视图快照,以及每一个数据版本的更改记录和版本快照的管理信息。模式面向普通用户,用户可在该模式下查找特性DB4AI.SNAPSHOT创建的快照版本信息。 DB4AI.SNAPSHOT DB4AI.CREATE_SNAPSHOT DB4AI.CREATE_SNAPSHOT_INTERNAL DB4AI.PREPARE_SNAPSHOT DB4AI.PREPARE_SNAPSHOT_INTERNAL DB4AI.ARCHIVE_SNAPSHOT DB4AI.PUBLISH_SNAPSHOT DB4AI.MANAGE_SNAPSHOT_INTERNAL DB4AI.SAMPLE_SNAPSHOT DB4AI.PURGE_SNAPSHOT DB4AI.PURGE_SNAPSHOT_INTERNAL 父主题: Schema
  • PG_AM PG_AM系统表存储有关索引访问方法的信息。系统支持的每种索引访问方法都有一行。 表1 PG_AM字段 名称 类型 引用 描述 oid oid - 行标识符(隐含属性,必须明确选择)。 amname name - 访问方法的名称。 amstrategies smallint - 访问方法的操作符策略个数,或者如果访问方法没有一个固定的操作符策略集则为0。 amsupport smallint - 访问方法的支持过程个数。 amcanorder boolean - 这种访问方式是否支持通过索引字段值的命令扫描排序。 t(true):表示支持。 f(false):表示不支持。 amcanorderbyop boolean - 这种访问方式是否支持通过索引字段上操作符的结果的命令扫描排序。 t(true):表示支持。 f(false):表示不支持。 amcanbackward boolean - 访问方式是否支持向后扫描。 t(true):表示支持。 f(false):表示不支持。 amcanunique boolean - 访问方式是否支持唯一索引。 t(true):表示支持。 f(false):表示不支持。 amcanmulticol boolean - 访问方式是否支持多字段索引。 t(true):表示支持。 f(false):表示不支持。 amoptionalkey boolean - 访问方式是否支持第一个索引字段上没有任何约束的扫描。 t(true):表示支持。 f(false):表示不支持。 amsearcharray boolean - 访问方式是否支持ScalarArrayOpExpr搜索。 t(true):表示支持。 f(false):表示不支持。 amsearchnulls boolean - 访问方式是否支持IS NULL/NOT NULL搜索。 t(true):表示支持。 f(false):表示不支持。 amstorage boolean - 是否允许索引存储的数据类型与列的数据类型不同。 t(true):表示允许。 f(false):表示不允许。 amclusterable boolean - 是否允许在一个这种类型的索引上聚簇。 t(true):表示允许。 f(false):表示不允许。 ampredlocks boolean - 是否允许这种类型的一个索引管理细粒度的谓词锁定。 t(true):表示允许。 f(false):表示不允许。 amkeytype oid PG_TYPE.oid 存储在索引里数据的类型,如果不是一个固定的类型则为0。 aminsert regproc PG_PROC.proname “插入这个行”函数。 ambeginscan regproc PG_PROC.proname “准备索引扫描”函数。 amgettuple regproc PG_PROC.proname “下一个有效行”函数,如果没有则为0。 amgetbitmap regproc PG_PROC.proname “抓取所有的有效行” 函数,如果没有则为0。 amrescan regproc PG_PROC.proname “(重新)开始索引扫描”函数。 amendscan regproc PG_PROC.proname “索引扫描后清理” 函数。 ammarkpos regproc PG_PROC.proname “标记当前扫描位置”函数。 amrestrpos regproc PG_PROC.proname “恢复已标记的扫描位置”函数。 ammerge regproc PG_PROC.proname “归并多个索引对象”函数。 ambuild regproc PG_PROC.proname “建立新索引”函数。 ambuildempty regproc PG_PROC.proname “建立空索引”函数。 ambulkdelete regproc PG_PROC.proname 批量删除函数。 amvacuumcleanup regproc PG_PROC.proname VACUUM后的清理函数。 amcanreturn regproc PG_PROC.proname 检查是否索引支持唯一索引扫描的函数,如果没有则为0。 amcostestimate regproc PG_PROC.proname 估计一个索引扫描开销的函数。 amoptions regproc PG_PROC.proname 为一个索引分析和确认reloptions的函数。 父主题: 其他系统表
共100000条