华为云用户手册

  • 注意事项 序列的所有者或者被授予了序列ALTER权限的用户或者被授予了ALTER ANY SEQUENCE权限的用户才能执行ALTER SEQUENCE命令,三权分立开关关闭时,系统管理员默认拥有该权限。但要修改序列的所有者,当前用户必须是该序列的所有者或者系统管理员,且该用户是新所有者角色的成员。 当前版本仅支持修改拥有者、归属列、最大值和cache缓存值。若要修改其他参数,可以删除重建,并用Setval函数恢复当前值。 ALTER SEQUENCE MAXVALUE不支持在事务、函数和存储过程中使用。 修改序列的最大值后,会清空该序列在所有会话的cache。 如果Sequence被创建时使用了LARGE标识,则ALTER时也需要使用LARGE标识。 ALTER SEQUENCE会阻塞nextval、setval、currval和lastval的调用。
  • 示例 --创建一个名为serial的递增序列,从101开始。 gaussdb=# CREATE SEQUENCE serial START 101; --创建一个表,定义默认值。 gaussdb=# CREATE TABLE t1(c1 bigint default nextval('serial')); --将序列serial的归属列变为t1.c1。 gaussdb=# ALTER SEQUENCE serial OWNED BY t1.c1; --删除序列和表。 gaussdb=# DROP SEQUENCE serial CASCADE; gaussdb=# DROP TABLE t1;
  • 示例 对复合类型的修改。 --创建复合类型。 gaussdb=# CREATE TYPE typ_stu AS (name varchar(10),age int); --创建表并插入数据,其中info字段数据类型为typ_stu。 gaussdb=# CREATE TABLE tbl_test (id int PRIMARY KEY,info typ_stu); gaussdb=# INSERT INTO tbl_test VALUES (1,('Jim',16)); --查看tbl_test数据。 gaussdb=# SELECT * FROM tbl_test; id | info ----+---------- 1 | (Jim,16) (1 row) --为复合类型增加一个新的属性。 gaussdb=# ALTER TYPE typ_stu ADD ATTRIBUTE year int CASCADE; --再次查看tbl_test数据,info多了一个属性。 gaussdb=# SELECT * FROM tbl_test; id | info ----+----------- 1 | (Jim,16,) (1 row) --从复合类型删除一个属性。 gaussdb=# ALTER TYPE typ_stu DROP ATTRIBUTE year; 修改类型所有者。 --创建用户test。 gaussdb=# CREATE ROLE test PASSWORD '********'; --修改typ_stu的所有者为test。 gaussdb=# ALTER TYPE typ_stu OWNER TO test; --查询typ_stu拥有者。 gaussdb=# SELECT t1.typname, t2.rolname AS owner FROM pg_type t1, pg_roles t2 WHERE t1.typname = 'typ_stu' AND t1.typowner = t2.oid; typname | owner ---------+-------- typ_stu | test (1 row) 修改类型或是一个复合类型中的一个属性的名称。 --将typ_stu的其中一个属性age重命名为age1。 gaussdb=# ALTER TYPE typ_stu RENAME ATTRIBUTE age to age1; --通过如下SQL查询tbl_test表中年龄为16的数据。 gaussdb=# SELECT id,(info).name,(info).age1 FROM tbl_test WHERE (info).age1 = 16; id | name | age1 ----+------+------ 1 | Jim | 16 (1 row) 将类型移至一个新的模式中。 --创建模式sctest。 gaussdb=# CREATE SCHEMA sctest; --将typ_stu移至模式sc_test中。 gaussdb=# ALTER TYPE typ_stu SET SCHEMA sctest; --查询typ_stu的所属模式。 gaussdb=# \dT sctest.* List of data types Schema | Name | Description --------+----------------+------------- sctest | sctest.typ_stu | (1 row) -- 删除表。 gaussdb=# DROP TABLE tbl_test; gaussdb=# DROP TYPE sctest.typ_stu; gaussdb=# DROP ROLE test; gaussdb=# DROP SCHEMA sctest; 为枚举类型增加一个新值。 --创建一个枚举类型typ_bugstatus gaussdb=# CREATE TYPE typ_bugstatus AS ENUM ('create', 'modify', 'closed'); --创建表tbl_test1。 gaussdb=# CREATE TABLE tbl_test1 (id serial, bugstat typ_bugstatus); --插入数据时bugstat字段必须是枚举类型中的值,否则报错。 gaussdb=# INSERT INTO tbl_test1 (bugstat) VALUES ('closed'); gaussdb=# INSERT INTO tbl_test1 (bugstat) VALUES ('deleted'); ERROR: invalid input value for enum typ_bugstatus: "deleted" LINE 1: INSERT INTO tbl_test1 (bugstat) VALUES ('deleted'); ^ CONTEXT: referenced column: bugstat --查看tbl_test1数据。 gaussdb=# SELECT * FROM tbl_test1; id | bugstat ----+--------- 1 | closed (1 row) --为枚举类型增加一个标签值。 gaussdb=# ALTER TYPE typ_bugstatus ADD VALUE IF NOT EXISTS 'regress' BEFORE 'closed'; --查询。 gaussdb=# \dT+ typ_bugstatus List of data types Schema | Name | Internal name | Size | Elements | Access privileges | Description --------+---------------+---------------+------+----------+-------------------+------------- public | typ_bugstatus | typ_bugstatus | 4 | create +| | | | | | modify +| | | | | | regress +| | | | | | closed | | (1 row) 重命名枚举类型的一个标签值。 --将类型typ_bugstatus中closed修改为close。 gaussdb=# ALTER TYPE typ_bugstatus RENAME VALUE 'closed' TO 'close'; --查看表tbl_test1数据,其中closed的数据也都改成了close。 gaussdb=# SELECT * FROM tbl_test1; id | bugstat ----+--------- 1 | close (1 row) --查询。 gaussdb=# \dT+ typ_bugstatus; List of data types Schema | Name | Internal name | Size | Elements | Access privileges | Description --------+---------------+---------------+------+----------+-------------------+------------- public | typ_bugstatus | typ_bugstatus | 4 | create +| | | | | | modify +| | | | | | regress +| | | | | | close | | (1 row) --删除。 gaussdb=# DROP TABLE tbl_test1; gaussdb=# DROP TYPE typ_bugstatus;
  • 参数说明 name 一个需要修改的现有类型的名称(可以有模式修饰) 。 new_name 该类型的新名称。 new_owner 新所有者的用户名 。 new_schema 该类型的新模式 。 attribute_name 拟增加、更改或删除的属性的名称。 new_attribute_name 拟改名的属性的新名称。 data_type 拟新增属性的数据类型或是拟更改的属性的新类型名。 new_enum_value 枚举类型新增加的标签值,是一个非空的长度不超过63个字节的字符串。 neighbor_enum_value 一个已有枚举标签值,新值应该增加在紧接着该枚举值之前或者之后的位置上。 existing_enum_value 现有的要重命名的枚举值,是一个非空的长度不超过63个字节的字符串 CASCADE 自动级联更新需更新类型以及相关联的记录和继承它们的子表。 RESTRICT 如果需联动更新类型是已更新类型的关联记录,则拒绝更新,这是缺省选项。 ADD ATTRIBUTE、DROP ATTRIBUTE和ALTER ATTRIBUTE选项可以组合成一个列表同时处理多个属性更改。 例如,在一条命令中同时增加几个属性或是更改几个属性的类型。 要修改一个类型的模式,必须在新模式上拥有CREATE权限。 要修改所有者,必须是新的所有角色的直接或间接成员, 并且该成员必须在此类型的模式上有CREATE权限。 (这些限制了修改所有者不会做任何通过删除和重建类型不能做的事情。 但是,三权分立关闭时系统管理员可以以任何方式修改任意类型的所有权。) 要增加一个属性或是修改一个属性的类型,也必须有该类型的USAGE权限。 CURRENT_USER 当前用户。 SESSION_USER 当前系统用户。 COLLATE collation COLLATE子句为该列(必须是一种可排序数据类型)赋予一个排序规则。 如果没有指定,将使用该列数据类型的默认排序规则。
  • 语法格式 修改类型。 1 ALTER TYPE name action [, ... ]; 其中action对应的子句如下: 给复合类型增加新的属性。 1 ADD ATTRIBUTE attribute_name data_type [ COLLATE collation ] [ CASCADE | RESTRICT ] 从复合类型中删除一个属性。 1 DROP ATTRIBUTE [ IF EXISTS ] attribute_name [ CASCADE | RESTRICT ] 改变一种复合类型中某个属性的类型。 1 ALTER ATTRIBUTE attribute_name [ SET DATA ] TYPE data_type [ COLLATE collation ] [ CASCADE | RESTRICT ] 改变类型的所有者。 1 ALTER TYPE name OWNER TO { new_owner | CURRENT_USER | SESSION_USER }; 改变类型的名称。 ALTER TYPE name RENAME TO new_name; 改变一个复合类型中一个属性的名称。 1 ALTER TYPE name RENAME ATTRIBUTE attribute_name TO new_attribute_name [ CASCADE | RESTRICT ]; 将类型移至一个新的模式中。 1 ALTER TYPE name SET SCHEMA new_schema; 为枚举类型增加一个新值。 1 ALTER TYPE name ADD VALUE [ IF NOT EXISTS ] new_enum_value [ { BEFORE | AFTER } neighbor_enum_value ]; 重命名枚举类型的一个标签值。 1 ALTER TYPE name RENAME VALUE existing_enum_value TO new_enum_value;
  • GLOBAL_AIO_SLOT_USAGE_STATUS GLOBAL_AIO_SLOT_USAGE_STATUS视图显示数据库所有实例中异步I/O提交槽位的相关统计信息,如表1所示。 表1 GLOBAL_AIO_SLOT_USAGE_STATUS字段 名称 类型 描述 node_name text 实例名称。 slot_id int4 槽位id。 slot_type char 槽位类型(r:读,w:写)。 status bool 槽位占用状态。 buffer_id int8 该槽位对应的buffer id。 relfilenode_blocknum text 该槽位对应的buffer所在的物理页面位置。 lsn int8 页面对应的LSN。 submitted_time int8 页面异步提交时的时间。 elapsed_time int8 页面已经等待的时间。 父主题: Utility
  • GS_ILM_JOBDETAIL GS_ILM_JOBDETAIL系统表提供了记录策略动作类型、判定条件等。 表1 GS_ILM_JOBDETAIL字段 名称 类型 描述 taskoid bigint 所属ADO Task的oid。 jobtype "char" 当前Job类型:压缩(‘c’)。 jobstatus smallint 当前Job状态: 1:JOB CREATED 2:COMPLETED SUCCESSFULLY 3:FAILED 4:STOPPED 5:JOB CREATION FAILED jobname text ADO Job名称表内唯一,关联系统表13.2.72 PG_JOB的job_name。 starttime timestamp with time zone 启动时间。 completetime timestamp with time zone 完成时间。 payload text 当前Job的具体执行内容PL/SQL代码。 statistics text 当前Job的统计信息。 comments text 记录当前Job执行的描述信息,如失败原因等。 父主题: OLTP表压缩
  • DB_TAB_HISTOGRAMS DB_TAB_HISTOGRAMS视图显示当前用户可访问的表和视图的直方图统计信息,即表各列数据的分布情况。所有用户都可以访问该视图。该视图同时存在于PG_CATALOG和SYS Schema下。 表1 DB_TAB_HISTOGRAMS字段 名称 类型 描述 owner character varying(128) 表的拥有者。 table_name character varying(128) 表名。 column_name character varying(4000) 列名。 endpoint_number numeric 直方图的桶号。 endpoint_value numeric 暂不支持,值为NULL。 endpoint_actual_value character varying(4000) 桶端点的实际值。 endpoint_actual_value_raw raw 暂不支持,值为NULL。 endpoint_repeat_count numeric 暂不支持,值为NULL。 scope character varying(7) 暂不支持,值为SHARED。 父主题: 其他系统视图
  • DBE_PLDEBUGGER.print_var debug端调试过程中,调用print_var,打印当前存储过程内变量中指定的变量名及其取值,也可在报错断住时,使用此函数来打印变量,如表1所示。该函数入参frameno表示查询遍历的栈层数,支持不加入该参数调用,缺省为查看最上层栈变量。 表1 print_var入参和返回值列表 名称 类型 描述 var_name IN text 变量。 frameno IN integer(可选) 指定的栈层数,缺省为最顶层。 varname OUT text 变量名。 vartype OUT text 变量类型。 value OUT text 变量值。 package_name OUT text 变量对应的package名,预留使用,当前均为空。 isconst OUT boolean 是否为常量。 父主题: DBE_PLDEBUGGER Schema
  • vacuum_freeze_table_age 参数说明:指定VACUUM对全表的扫描冻结元组的时间。如果当前事务号与表pg_class.relfrozenxid64字段的差值已经大于参数指定的时间时,VACUUM对全表进行扫描。 参数类型:整型 参数单位:无 取值范围:0~576 460 752 303 423 487 尽管随时可以将此参数设为上述取值范围之间的值,但是,VACUUM将默认其有效值范围限制在autovacuum_freeze_max_age的95%以内。定期的手动VACUUM可以在对此表的反重叠自动清理启动之前运行。 默认值:4000000000 设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
  • max_compile_functions 参数说明:设置服务器存储的函数编译结果的最大数量。 参数类型:整型 参数单位:无 取值范围:1 ~ 2147483647 默认值:1000(196核CPU/1536G内存,128核CPU/1024G内存,104核CPU/1024G内存,96核CPU/1024G内存,96核CPU/768G内存,80核CPU/640G内存,64核CPU/512G内存,60核CPU/480G内存,32核CPU/256G内存,16核CPU/128G内存,8核CPU/64G内存,4核CPU/32G内存);10(4核CPU/16G内存) 设置方式:该参数属于POSTMASTER类型参数,请参见表1中对应设置方法进行设置。 设置建议:存储过多的函数和存储过程的编译结果可能占用很大内存。将此参数设置为一个合理的值,有助于减少内存占用,提升系统性能。
  • check_function_bodies 参数说明:设置是否在CREATE FUNCTION执行过程中进行函数体字符串的合法性验证。为了避免产生问题(比如避免从转储中恢复函数定义时向前引用的问题),偶尔会禁用验证。开启后主要验证存储过程中PL/SQL的词语法问题,包括数据类型、语句和表达式等,对于其中出现的SQL则在Create阶段不做检查而采用了运行时检查的方式。 该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。 取值范围:布尔型 on表示在CREATE FUNCTION执行过程中进行函数体字符串的合法性验证。 off表示在CREATE FUNCTION执行过程中不进行函数体字符串的合法性验证。 默认值:on
  • session_replication_role 参数说明:控制当前会话与复制相关的触发器和规则的行为。 该参数属于SUSET类型参数,请参见表1中对应设置方法进行设置。 设置此参数会丢弃之前任何缓存的执行计划。 取值范围:枚举类型 origin表示从当前会话中复制插入、删除、更新等操作。 replica表示从其他地方复制插入、删除、更新等操作到当前会话。 local表示函数执行复制时会检测当前登录数据库的角色并采取相应的操作。 默认值:origin
  • temp_tablespaces 参数说明:当一个CREATE命令没有明确指定一个表空间时,temp_tablespaces指定了创建临时对象(临时表和临时表的索引)所在的表空间。在这些表空间中创建临时文件用来做大型数据的排序工作。 其值是一系列表空间名的列表。如果列表中有多个表空间时,每次临时对象的创建,GaussDB会在列表中随机选择一个表空间;如果在事务中,连续创建的临时对象被放置在列表里连续的表空间中。如果选择的列表中的元素是一个空串,GaussDB将自动将当前的数据库设为默认的表空间。 该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。 取值范围:字符串。空字符串表示所有的临时对象仅在当前数据库默认的表空间中创建,请参见default_tablespace。 默认值:空
  • default_transaction_isolation 参数说明:设置默认的事务隔离级别。 该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。 当前版本暂不支持设置默认的事务隔离级别,默认为read committed,请勿自行修改。 取值范围:枚举类型 read committed表示事务读已提交。 repeatable read表示事务可重复读。 serializable,GaussDB目前功能上不支持此隔离级别,等价于repeatable read。 默认值:read committed
  • vacuum_freeze_min_age 参数说明:指定VACUUM在扫描一个表时用于判断是否用FrozenXID替换记录的xmin字段(在同一个事务中)。 参数类型:整型 参数单位:无 取值范围:0 ~ 576 460 752 303 423 487 尽管随时可以将此参数设为上述取值范围之间的任意值,但是,VACUUM将默认其有效值范围限制在autovacuum_freeze_max_age的50%以内。 默认值:2000000000 设置方式:该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。
  • search_path 参数说明:当一个被引用对象没有指定模式时,此参数设置模式搜索顺序。它的值由一个或多个模式名构成,不同的模式名用逗号隔开。 该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。 当前会话如果存放临时表的模式时,可以使用别名pg_temp将它列在搜索路径中,如'pg_temp,public'。存放临时表的模式始终会作为第一个被搜索的对象,排在pg_catalog和search_path中所有模式的前面,即具有第一搜索优先级。建议用户不要在search_path中显示设置pg_temp。如果在search_path中指定了pg_temp,但不是在最前面,系统会提示设置无效,pg_temp仍被优先搜索。通过使用别名pg_temp,系统只会在存放临时表的模式中搜索表、视图和数据类型这样的数据库对象,不会在里面搜索函数或运算符这样的数据库对象。 系统表所在的模式pg_catalog,总是排在search_path中指定的所有模式前面被搜索,即具有第二搜索优先级(pg_temp具有第一搜索优先级)。建议用户不要在search_path中显式设置pg_catalog。如果在search_path中指定了pg_catalog,但不是在最前面,系统会提示设置无效,pg_catalog仍被第二优先搜索。 当没有指定一个特定模式而创建一个对象时,它们被放置到以search_path为命名的第一个有效模式中。当搜索路径为空时,会报错误。 通过SQL函数current_schema可以检测当前搜索路径的有效值。这和检测search_path的值不尽相同,因为current_schema显示search_path中首位有效的模式名称。 取值范围:字符串 设置为"$user",public时,支持共享数据库(没有用户具有私有模式和所有共享使用public),用户私有模式和这些功能的组合使用。可以通过改变默认搜索路径来获得其他效果,无论是全局化的还是私有化的。 设置为空串('')的时候,系统会自动转换成一对双引号。 设置的内容中包含双引号,系统会认为是不安全字符,会将每个双引号转换成一对双引号。 默认值:"$user",public $user表示与当前会话用户名同名的模式名,如果这样的模式不存在,$user将被忽略。
  • default_tablespace 参数说明:当CREATE命令没有明确声明表空间时,所创建对象(表和索引等)的缺省表空间。 值是一个表空间的名称或者一个表示使用当前数据库缺省表空间的空字符串。若指定的是一个非默认表空间,用户必须具有它的CREATE权限,否则尝试创建会失败。 临时表不使用此参数,可以用temp_tablespaces代替。 创建数据库时不使用此参数。默认情况下,一个新的数据库从模板数据库继承表空间配置。 该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。 取值范围:字符串,其中空表示使用默认表空间。 默认值:空
  • current_schema 参数说明:此参数设置当前的模式。 该参数属于USERSET类型参数,请参见表1中对应设置方法进行设置。 取值范围:字符串 默认值:"$user",public $user表示与当前会话用户名同名的模式名,如果这样的模式不存在,$user将被忽略。 内核开发过程中如需要获取schema,请使用search_path对应的值,因为schema是search_path决定的。为了兼容性,current_schema目的只是作为修改search_path的值使用。
  • GLOBAL_THREAD_WAIT_STATUS 通过该视图可以检测所有节点上工作线程(backend thread)以及辅助线程(auxiliary thread)的阻塞等待情况,如表1所示。具体事件信息请参见15.3.67-表2 等待状态列表、15.3.67-表3 轻量级锁等待事件列表、15.3.67-表4 IO等待事件列表和15.3.67-表5 事务锁等待事件列表。 通过GLOBAL_THREAD_WAIT_STATUS视图,可以查看数据库全局各个节点上所有SQL语句产生的线程之间的调用层次关系,以及各个线程的阻塞等待状态,从而更容易定位hang以及类似现象的原因。 GLOBAL_THREAD_WAIT_STATUS视图和THREAD_WAIT_STATUS视图列定义完全相同,这是由于GLOBAL_THREAD_WAIT_STATUS视图本质是到数据库中各个节点上查询THREAD_WAIT_STATUS视图汇总的结果。 表1 GLOBAL_THREAD_WAIT_STATUS字段 名称 类型 描述 node_name text 节点名称。 db_name text 数据库名称。 thread_name text 线程名称。 query_id bigint 查询ID,对应debug_query_id。 tid bigint 当前线程的线程号。 sessionid bigint session的ID。 lwtid integer 当前线程的轻量级线程号。 psessionid bigint streaming线程的父线程。 tlevel integer streaming线程的层级。 smpid integer 并行线程的ID。 wait_status text 当前线程的等待状态。等待状态的详细信息请参见15.3.67-表2 等待状态列表。 wait_event text 如果wait_status是acquire lock、acquire lwlock、wait io三种类型,此列描述具体的锁、轻量级锁、I/O的信息。否则是空。 locktag text 当前线程正在等待锁的信息。 lockmode text 当前线程正等待获取的锁模式。包含表级锁、行级锁、页级锁下的各模式。 block_sessionid bigint 阻塞当前线程获取锁的会话标识。 global_sessionid text 全局会话ID。 父主题: Session/Thread
  • CLASS_VITAL_INFO CLASS_VITAL_INFO视图用于做WDR时校验相同的表或者索引的oid是否一致,如表1所示。 表1 CLASS_VITAL_INFO字段 名称 类型 描述 relid oid 表的oid。 schemaname name schema名称。 relname name 表名。 relkind "char" 表示对象类型,取值范围如下: r:表示普通表。 t:表示toast表。 i:表示索引。 last_updated timestamp with time zone 视图中该对象监控数据最后一次更新的时间。 父主题: Utility
  • 语法格式 SELECT select_expressions INTO [STRICT] target FROM ... SELECT INTO [STRICT] target [FROM ..] EXECUTE [IMMEDIATE] select_expressions BULK COLLECT INTO target ... 对以上语法格式的解释如下: select_expressions:查询的SQL语句。通过基础SQL命令加INTO子句可以将单行或多列的结果赋值给一个变量(记录、行类型、标量变量列表)。 target :目标变量。可以是一个记录变量、一个行变量或一个有逗号分隔的简单变量和记录/行域列表。 STRICT:可选。在开启参数set behavior_compat_options = 'select_into_return_null'的前提下(默认未开启),若指定该选项则该查询必须刚好返回一行不为空的结果集,否则会报错,报错信息可能是NO_DATA_FOUND(没有行)、TOO_MANY_ROWS(多于一行)或QUERY_RETURNED_NO_ROWS (没有数据返回)。若不指定该选项则没有该限定,且支持返回空结果集。 BULK COLLECT INTO只支持批量赋值给数组或集合。集合类型合理使用LIMIT字段避免操作过量数据导致性能下降。 INTO/BULK COLLECT INTO只支持4层以下Record类型直接嵌套。 返回空结果集需要数据库初始化使用PG兼容参数,配置GUC参数set behavior_compat_options = 'select_into_return_null'为开启。配置GUC参数set behavior_compat_options = ''则关闭。 对于数组变量,小括号“()”将优先识别为下标,因此对于带括号的表达式,不支持写在数组变量后面。如对于select (1+3) into va(5),不支持写为select into va(5) (1+3)或select into va[5] (1+3)。 INSERT INTO、UPDATE INTO、DELETE INTO和EXECUTION INTO不支持返回空结果集。 给多个变量赋值时,由于后面的变量存在语法错误,所以均不赋值。 BULK COLLECT INTO只支持在A兼容性数据库下使用。 IMMEDIATE关键字仅用作语法兼容,无实际意义。
  • 变量语法 给变量赋值的语法请参见图1。 图1 assignment_value::= 对以上语法格式的解释如下: variable_name:变量名。 value:可以是值或表达式。值value的类型需要和变量variable_name的类型兼容才能正确赋值。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 DECLARE emp_id INTEGER := 7788;--赋值 BEGIN emp_id := 5;--赋值 DBE_OUTPUT.PRINT_LINE(emp_id); emp_id := 5*7784; DBE_OUTPUT.PRINT_LINE(emp_id); END; / --结果如下: 5 38920 ANONYMOUS BLOCK EXECUTE
  • 嵌套赋值 给变量嵌套赋值的语法请参见图2。 图2 nested_assignment_value::= 对以上语法格式的解释如下:图2 variable_name:变量名。 col_name:列名。 subscript:下标,针对数组变量使用,可以是值或表达式,类型必须为INT。 value:可以是值或表达式。值value的类型需要和变量variable_name的类型兼容才能正确赋值。 示例: 1 2 3 4 5 6 7 8 9 10 11 gaussdb=# CREATE TYPE o1 AS (a int, b int); CREATE TYPE gaussdb=# DECLARE TYPE r1 is VARRAY(10) of o1; emp_id r1; BEGIN emp_id(1).a := 5;--赋值 emp_id(1).b := 5*7784; END; / ANONYMOUS BLOCK EXECUTE
  • 数据类型介绍 DBE_SQL.DESC_REC 该类型是复合类型,用来存储SQL_DESCRIBE_COLUMNS接口中的描述信息。 DBE_SQL.DESC_REC类型的原型为: 1 2 3 4 5 6 7 8 9 10 11 12 13 CREATE TYPE DBE_SQL.DESC_REC AS ( col_type int, col_max_len int, col_name VARCHAR2(32), col_name_len int, col_schema_name VARCHAR2(32), col_schema_name_len int, col_precision int, col_scale int, col_charsetid int, col_charsetform int, col_null_ok BOOLEAN ); DBE_SQL.DESC_TAB 该类型是DESC_REC的TABLE类型,通过TABLE OF语法实现。 DBE_SQL.DESC_TAB类型的原型为: 1 CREATE TYPE DBE_SQL.DESC_TAB AS TABLE OF DBE_SQL.DESC_REC INDEX BY INTEGER; DBE_SQL.DATE_TABLE 该类型是DATE的TABLE类型,通过TABLE OF语法实现。 DBE_SQL.DATE_TABLE类型的原型为: 1 CREATE TYPE DBE_SQL.DATE_TABLE AS TABLE OF DATE INDEX BY INTEGER; DBE_SQL.NUMBER_TABLE 该类型是NUMBER的TABLE类型,通过TABLE OF语法实现。 DBE_SQL.NUMBER_TABLE类型的原型为: 1 CREATE TYPE DBE_SQL.NUMBER_TABLE AS TABLE OF NUMBER INDEX BY INTEGER; DBE_SQL.VARCHAR2_TABLE 该类型是VARCHAR2的TABLE类型,通过TABLE OF语法实现。 DBE_SQL.VARCHAR2_TABLE类型的原型为: 1 CREATE TYPE DBE_SQL.VARCHAR2_TABLE AS TABLE OF VARCHAR2(32767) INDEX BY INTEGER;
  • SUMMARY_FILE_IOSTAT 通过数据库内数据文件I/O统计的汇总结果,反映数据的I/O性能,用以发现I/O操作异常等性能问题,如表1所示。 其中phyrds、phywrts、phyblkrd、phyblkwrt、readtim、writetim字段按照各节点的数据累加求和,avgiotim为各节点的平均值(总时长/总次数),lstiotim、maxiowtm取各节点的最大值,miniotim取各节点的最小值。 表1 SUMMARY_FILE_IOSTAT字段 名称 类型 描述 filenum oid 文件标识。 dbid oid 数据库标识。 spcid oid 表空间标识。 phyrds numeric 读物理文件的数目。 phywrts numeric 写物理文件的数目。 phyblkrd numeric 读物理文件块的数目。 phyblkwrt numeric 写物理文件块的数目。 readtim numeric 读文件的总时长(单位:微秒)。 writetim numeric 写文件的总时长(单位:微秒)。 avgiotim bigint 读写文件的平均时长(单位:微秒)。 lstiotim bigint 最后一次读文件时长(单位:微秒)。 miniotim bigint 读写文件的最小时长(单位:微秒)。 maxiowtm bigint 读写文件的最大时长(单位:微秒)。 父主题: File
  • 参数说明 IF NOT EXISTS 如果已经存在相同名称的资源标签,不会抛出错误,而是发出一个通知,告知此资源标签已存在。 label_name 资源标签名称,创建时要求不能与已有标签重名。 取值范围:字符串,要符合标识符命名规范。 resource_type 指的是要标记的数据库资源的类型。 取值范围:表(TABLE)、列(COLUMN)、模式(SCHEMA)、视图(VIEW)、函数(FUNCTION)。 resource_path 指的是描述具体的数据库资源的路径。
  • 示例 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 --创建一个表tb_for_label。 gaussdb=# CREATE TABLE tb_for_label(col1 text, col2 text, col3 text); --基于表创建资源标签。 gaussdb=# CREATE RESOURCE LABEL IF NOT EXISTS table_label add TABLE(public.tb_for_label); --再次创建已存在的表资源标签,对比加参数IF NOT EXISTS与不加IF NOT EXISTS参数的区别。 gaussdb=# CREATE RESOURCE LABEL IF NOT EXISTS table_label add TABLE(public.tb_for_label); NOTICE: table_label label already defined, skipping CREATE RESOURCE LABEL gaussdb=# CREATE RESOURCE LABEL table_label add TABLE(public.tb_for_label); ERROR: table_label label already defined --基于列创建资源标签。 gaussdb=# CREATE RESOURCE LABEL IF NOT EXISTS column_label add COLUMN(public.tb_for_label.col1); --创建一个模式schema_for_label。 gaussdb=# CREATE SCHEMA schema_for_label; --基于模式创建资源标签。 gaussdb=# CREATE RESOURCE LABEL IF NOT EXISTS schema_label add SCHEMA(schema_for_label); --创建一个视图view_for_label。 gaussdb=# CREATE VIEW view_for_label AS SELECT 1; --基于视图创建资源标签。 gaussdb=# CREATE RESOURCE LABEL IF NOT EXISTS view_label add VIEW(view_for_label); --创建一个函数func_for_label。 gaussdb=# CREATE FUNCTION func_for_label RETURNS TEXT AS $$ SELECT col1 FROM tb_for_label; $$ LANGUAGE SQL; --基于函数创建资源标签。 gaussdb=# CREATE RESOURCE LABEL IF NOT EXISTS func_label add FUNCTION(func_for_label); --删除表资源标签table_label。 gaussdb=# DROP RESOURCE LABEL IF EXISTS table_label; --删除列资源资源标签column_label。 gaussdb=# DROP RESOURCE LABEL IF EXISTS column_label; --删除函数资源标签func_for_label。 gaussdb=# DROP FUNCTION func_for_label; --删除视图资源标签view_for_label。 gaussdb=# DROP VIEW view_for_label; --删除模式资源标签schema_for_label。 gaussdb=# DROP SCHEMA schema_for_label; --删除表tb_for_label。 gaussdb=# DROP TABLE tb_for_label;
  • 语法格式 1 CREATE RESOURCE LABEL [IF NOT EXISTS] label_name ADD label_item_list[, ...]; label_item_list: 1 resource_type(resource_path[, ...]) resource_type: { TABLE | COLUMN | SCHEMA | VIEW | FUNCTION }
  • 列级字符集字符序 每个字符串类型(即类型为CHAR 、VARCHAR、 TEXT等字符串类型)的列都可以设置列的字符集和列的字符序。 CREATE TABLE table_name ( column_name data_type [ CHARACTER SET | CHARSET charset ] [ COLLATE collation ] ); 语法说明: table_name 表名称。 data_type 字段的数据类型,字符串类型支持字符集、字符序语法。 CHARACTER SET | CHARSET charset 指定表字段的字符集,单独指定时会将字段的字符序设置为指定的字符集的默认字符序。 COLLATE collation COLLATE子句指定列的字符序(该列的数据类型必须支持字符序)。如果没有指定,则使用默认的排序规则。 GaussDB通过以下方式选择表字段的字符集和字符序: 如果同时指定了charset和collation ,则使用字符集charset和字符序collation,且charset和collation需要对应,不对应会产生报错。 如果仅指定了charset,则使用字符集charset及其默认字符序。 如果仅指定了collation,则使用与collation关联的字符集和指定的字符序。 如果既不指定charset也不指定collation,则使用表的默认字符集和默认字符序。 default_charset仅支持指定为带有默认字符序的字符集,如果指定的字符集没有默认字符序则报错。 default_collation仅支持指定为B模式下的字符序,指定其他字符序报错。 如果表字段为文本类型且指定的字符序为binary,则文本类型会转换为对应的二进制类型,字符序为指定的binary 字符序。 分区表的分区键的字符集必须与数据库字符集相同。 暂不支持设置表字段的默认字符集与数据库字符集server_encoding不同。 示例: 1 2 3 4 5 6 7 8 -- 仅设置字符集,字符序为字符集的默认字符序。 gaussdb=# CREATE TABLE test(c1 text CHARSET utf8); -- 仅设置字符序,字符集为字符序关联的字符集。 gaussdb=# CREATE TABLE test(c1 text COLLATE utf8_bin); -- 同时设置字符集与字符序,字符集和字符序需对应。 gaussdb=# CREATE TABLE test(c1 text CHARSET utf8 COLLATE utf8_bin); 父主题: 字符集与字符序
共100000条