华为云用户手册

  • GS_MASKING_POLICY_ACTIONS GS_MASKING_POLICY_ACTIONS系统表记录动态数据脱敏策略中相应的脱敏策略包含的脱敏行为,一个脱敏策略对应着该表的一行或多行记录。需要有系统管理员或安全策略管理员权限才可以访问此系统表。 表1 GS_MASKING_POLICY_ACTIONS表字段 名称 类型 描述 oid oid 行标识符(隐含属性,必须明确选择)。 actiontype name 脱敏函数,标识脱敏策略使用的脱敏函数。 actparams name 向脱敏函数中传递的参数信息。 actlabelname name 被脱敏的label名称。 policyoid oid 该条记录所属的脱敏策略的oid,对应GS_MASKING_POLICY中的oid。 actmodifydate timestamp without time zone 该条记录创建或修改的最新时间戳。 父主题: 系统表
  • GS_JOB_ARGUMENT GS_JOB_ARGUMENT系统表提供了DBE_SCHEDULER定时任务和程序的参数属性。 表1 GS_JOB_ARGUMENT字段 名称 类型 描述 oid oid 行标识符(隐含字段)。 argument_position integer 定时任务或程序的参数位置。 argument_type name 定时任务或程序的参数类型。 job_name text 定时任务或程序名。 argument_name text 定时任务或程序的参数名(定时任务继承了程序的参数名,所以为空)。 argument_value text 定时任务的参数值(程序本身无法绑定值)。 default_value text 程序的参数默认值。 父主题: 系统表
  • GS_MASKING_POLICY_FILTERS GS_MASKING_POLICY_FILTERS系统表记录动态数据脱敏策略对应的用户过滤条件,当用户条件满足FILTER条件时,对应的脱敏策略才会生效。需要有系统管理员或安全策略管理员权限才可以访问此系统表。 表1 GS_MASKING_POLICY_FILTERS表字段 名称 类型 描述 oid oid 行标识符(隐含属性,必须明确选择)。 filtertype name 过滤类型。目前值仅为logical_expr。 filterlabelname name 过滤范围。目前值仅为logical_expr。 policyoid oid 该条记录所属的脱敏策略的oid,对应GS_MASKING_POLICY中的oid。 modifydate timestamp without time zone 该条用户过滤条件创建或修改的最新时间戳。 logicaloperator text 过滤条件的波兰表达式。 父主题: 系统表
  • GS_MASKING_POLICY GS_MASKING_POLICY系统表记录动态数据脱敏策略的主体信息,每条记录对应一个脱敏策略。需要有系统管理员或安全策略管理员权限才可以访问此系统表。 表1 GS_MASKING_POLICY表字段 名称 类型 描述 oid oid 行标识符(隐含属性,必须明确选择)。 polname name 策略名称,唯一不可重复。 polcomments name 策略描述字段,记录策略相关的描述信息,通过COMMENTS关键字体现。 modifydate timestamp without time zone 策略创建或修改的最新时间戳。 polenabled boolean 策略启动开关。 t(true):表示策略启动。 f(false):表示策略没有启动。 父主题: 系统表
  • GS_JOB_ATTRIBUTE GS_JOB_ATTRIBUTE系统表提供了DBE_SCHEDULER定时任务的相关属性信息,其中包括定时任务,定时任务类,证书,授权,程序和调度的基本属性。新安装数据库集群普通用户无权限访问。 表1 GS_JOB_ATTRIBUTE字段 名称 类型 描述 oid oid 行标识符(隐含字段)。 job_name text 定时任务,定时任务类,证书,程序和调度的名字,授权的用户名。 attribute_name text 定时任务,定时任务类,证书,程序和调度的属性名,授权的内容。 attribute_value text 定时任务,定时任务类,证书,程序和调度的属性值。 父主题: 系统表
  • GS_GLOBAL_CHAIN GS_GLOBAL_CHAIN系统表记录用户对防篡改用户表(当前特性是实验室特性,使用时请联系华为工程师提供技术支持)的修改操作信息,每条记录对应一次表级修改操作。具有审计管理员权限的用户可以查询此系统表,所有用户均不允许修改此系统表。 表1 GS_GLOBAL_CHAIN字段 名称 类型 描述 blocknum bigint 区块号,当前用户操作在账本中记录的序号。 dbname name 数据库名称,被修改的防篡改用户表所属的database。 username name 用户名,执行用户表修改操作的用户名。 starttime timestamp with time zone 用户执行操作的时间。 relid oid 用户表Oid,被修改的防篡改用户表Oid。 relnsp name 模式名,被修改的防篡改用户表所属的模式名。 relname name 用户表名,被修改的防篡改用户表名。 relhash hash16 操作产生的表级hash变化量。 globalhash hash32 全局摘要,由当前行信息与前一行globalhash计算而来,将整个表串联起来,用于验证GS_GLOBAL_CHAIN数据完整性。 txcommand text 被记录操作的SQL语句。 父主题: 系统表
  • GS_GLOBAL_CONFIG GS_GLOBAL_CONFIG记录了集群初始化时,用户指定的参数值。除此之外,还存放了用户设置的弱口令,支持数据库初始用户通过ALTER和DROP语法对系统表中的参数进行写入、修改和删除。此系统表默认只有初始用户、系统管理员和安全管理员可以访问,其他用户默认无权访问。 表1 GS_GLOBAL_CONFIG字段 名称 类型 描述 name name 集群初始化时系统内置的指定参数名称、弱口令名称、或用户需要使用的参数。 value text 集群初始化时系统内置的指定参数值、弱口令、或用户需要使用的参数值。 父主题: 系统表
  • GS_ENCRYPTED_PROC GS_ENCRYPTED_PROC系统表提供了密态函数/存储过程函数参数、返回值的原始数据类型,加密列等信息。 表1 GS_ENCRYPTED_PROC字段 名称 类型 描述 oid oid 行标识符(隐含字段)。 func_id oid function的oid,对应pg_proc系统表中的oid行标识符。 prorettype_orig integer 返回值的原始数据类型。 last_change timestamp without time zone 密态函数上次修改的时间。 proargcachedcol oidvector 函数INPUT参数对应的加密列的oid,对应gs_encrypted_columns系统表中的oid行标识符。 proallargtypes_orig oid[] 所有函数参数的原始数据类型。 父主题: 系统表
  • GS_DEPENDENCIES_OBJ GS_DEPENDENCIES_OBJ系统表记录对象的被依赖项详细信息 表1 GS_DEPENDENCIES_OBJ字段 名称 类型 描述 schemaname name 名称空间的名称。 packagename name package的名称。 type integer 被依赖体的类型。 1:未知类型。 2:变量。 3:类型。 4:函数。 5:视图。 6:函数头。 name text 被依赖体名称。 objnode pg_node_tree 被依赖体的详细信息。 父主题: 系统表
  • GS_DATABASE_LINK GS_DATABASE_LINK系统表是用于存储DATABASE LINK信息的系统表,主要记录的是DATABASE LINK对象的详细信息。只有具备sysadmin权限的用户才可以对该系统表进行读操作。目前DATABASE LINK功能暂不支持。 表1 GS_DATABASE_LINK字段 名称 类型 描述 oid oid 当前DATABASE LINK对象的唯一id(隐含属性,必须明确选择)。 dlname name 当前DATABASE LINK的名称。 dlowner oid 当前DATABASE LINK的拥有者的id,为public则为0。 dlfdw oid 当前DATABASE LINK的外部数据封装器的OID。 dlcreater oid 当前DATABASE LINK创建者的id。 options text[] 当前DATABASE LINK连接信息,使用"keyword=value"。 useroptions text[] 当前DATABASE LINK连接远端所使用的用户信息,使用"keyword=value"。 dlacl aclitem[] 当前DATABASE LINK访问权限。 父主题: 系统表
  • GS_DEPENDENCIES GS_DEPENDENCIES系统表记录对象的依赖项信息,和GS_DEPENDENCIES_OBJ表是一个一对多的关系。 表1 GS_DEPENDENCIES字段 名称 类型 描述 schemaname name 名称空间的名称。 packagename name package的名称。 refobjpos integer 被依赖体引用的位置。 1:类型。 2:包头。 4:函数头。 8:函数体。 16:包体。 32:视图。 refobjoid oid 被依赖体的oid。 objectname text 依赖体名称。 父主题: 系统表
  • GS_COLUMN_KEYS GS_COLUMN_KEYS系统表记录密态等值特性中列加密密钥相关信息,每条记录对应一个列加密密钥。 表1 GS_COLUMN_KEYS字段 名称 类型 描述 oid oid 行标识符(隐含字段)。 column_key_name name 列加密密钥(cek)名称。 column_key_distributed_id oid 根据加密密钥(cek)全称域名hash值得到的id。 global_key_id oid 外键。客户端加密主密钥(cmk)的OID。 key_namespace oid 包含此列加密密钥(cek)的命名空间OID。 key_owner oid 列加密密钥(cek)的所有者。 create_date timestamp with time zone 创建列加密密钥的时间。 key_acl aclitem[] 创建该列加密密钥时所拥有的访问权限。 父主题: 系统表
  • 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)的元数据信息名称的值。 父主题: 系统表
  • 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:表示不具有。 父主题: 系统表
  • 日期输入 日期和时间的输入几乎可以是任何合理的格式,包括ISO-8601格式、SQL-兼容格式、传统POSTGRES格式或者其它的形式。系统支持按照日、月、年的顺序自定义日期输入。如果把DateStyle参数设置为MDY就按照“月-日-年”解析,设置为DMY就按照“日-月-年”解析,设置为YMD就按照“年-月-日”解析。 日期的文本输入需要加单引号包围,语法如下: type [ ( p ) ] 'value' 可选的精度声明中的p是一个整数,表示在秒域中小数部分的位数。表2显示了date类型的输入方式。 表2 日期输入方式 例子 描述 1999-01-08 ISO 8601格式(建议格式),任何方式下都是1999年1月8号。 January 8, 1999 在任何datestyle输入模式下都无歧义。 1/8/1999 有歧义,在MDY模式下是一月八号,在DMY模式下是八月一号。 1/18/1999 MDY模式下是一月十八日,其它模式下被拒绝。 01/02/03 MDY模式下的2003年1月2日。 DMY模式下的2003年2月1日。 YMD模式下的2001年2月3日。 1999-Jan-08 任何模式下都是1月8日。 Jan-08-1999 任何模式下都是1月8日。 08-Jan-1999 任何模式下都是1月8日。 99-Jan-08 YMD模式下是1月8日,否则错误。 08-Jan-99 一月八日,除了在YMD模式下是错误的之外。 Jan-08-99 一月八日,除了在YMD模式下是错误的之外。 19990108 ISO 8601;任何模式下都是1999年1月8日。 990108 ISO 8601;任何模式下都是1999年1月8日。 1999.008 年和年里的第几天。 J2451187 儒略日。 January 8, 99 BC 公元前99年。 示例: 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031323334353637 --创建表。gaussdb=# CREATE TABLE date_type_tab(coll date);--插入数据。gaussdb=# INSERT INTO date_type_tab VALUES (date '12-10-2010');--查看数据。gaussdb=# SELECT * FROM date_type_tab; coll --------------------- 2010-12-10(1 row)--查看日期格式。gaussdb=# SHOW datestyle; DateStyle ----------- ISO, MDY(1 row)--设置日期格式。gaussdb=# SET datestyle='YMD';SET--插入数据。gaussdb=# INSERT INTO date_type_tab VALUES(date '2010-12-11');--查看数据。gaussdb=# SELECT * FROM date_type_tab; coll --------------------- 2010-12-10 2010-12-11(2 rows)--删除表。gaussdb=# DROP TABLE date_type_tab;
  • 时间段输入 reltime的输入方式可以采用任何合法的时间段文本格式,包括数字形式(含负数和小数)及时间形式,其中时间形式的输入支持SQL标准格式、ISO-8601格式、POSTGRES格式等。另外,文本输入需要加单引号。 时间段输入的详细信息请参考表6 时间段输入。 表6 时间段输入 输入示例 输出结果 描述 60 2 mons 采用数字表示时间段,默认单位是day,可以是小数或负数。特别的,负数时间段,在语义上,可以理解为“早于多久”。 31.25 1 mons 1 days 06:00:00 -365 -12 mons -5 days 1 years 1 mons 8 days 12:00:00 1 years 1 mons 8 days 12:00:00 采用POSTGRES格式表示时间段,可以正负混用,不区分大小写,输出结果为将输入时间段计算并转换得到的简化POSTGRES格式时间段。 -13 months -10 hours -1 years -25 days -04:00:00 -2 YEARS +5 MONTHS 10 DAYS -1 years -6 mons -25 days -06:00:00 P-1.1Y10M -3 mons -5 days -06:00:00 采用ISO-8601格式表示时间段,可以正负混用,不区分大小写,输出结果为将输入时间段计算并转换得到的简化POSTGRES格式时间段。 -12H -12:00:00 示例: 1 2 3 4 5 6 7 8 910111213141516171819202122232425 --创建表。gaussdb=# CREATE TABLE reltime_type_tab(col1 character(30), col2 reltime);--插入数据。gaussdb=# INSERT INTO reltime_type_tab VALUES ('90', '90');gaussdb=# INSERT INTO reltime_type_tab VALUES ('-366', '-366');gaussdb=# INSERT INTO reltime_type_tab VALUES ('1975.25', '1975.25');gaussdb=# INSERT INTO reltime_type_tab VALUES ('-2 YEARS +5 MONTHS 10 DAYS', '-2 YEARS +5 MONTHS 10 DAYS');gaussdb=# INSERT INTO reltime_type_tab VALUES ('30 DAYS 12:00:00', '30 DAYS 12:00:00');gaussdb=# INSERT INTO reltime_type_tab VALUES ('P-1.1Y10M', 'P-1.1Y10M');--查看数据。gaussdb=# SELECT * FROM reltime_type_tab; col1 | col2 --------------------------------+------------------------------------- 1975.25 | 5 years 4 mons 29 days -2 YEARS +5 MONTHS 10 DAYS | -1 years -6 mons -25 days -06:00:00 P-1.1Y10M | -3 mons -5 days -06:00:00 -366 | -1 years -18:00:00 90 | 3 mons 30 DAYS 12:00:00 | 1 mon 12:00:00(6 rows)--删除表。gaussdb=# DROP TABLE reltime_type_tab;
  • GS_CLIENT_GLOBAL_KEYS GS_CLIENT_GLOBAL_KEYS系统表记录密态等值特性中客户端加密主密钥相关信息,每条记录对应一个客户端加密主密钥。 表1 GS_CLIENT_GLOBAL_KEYS字段 名称 类型 描述 oid oid 行标识符(隐含字段)。 global_key_name name 客户端加密主密钥(cmk)名称。 key_namespace oid 包含此客户端加密主密钥(cmk)的命名空间OID。 key_owner oid 客户端加密主密钥(cmk)的所有者。 key_acl aclitem[] 创建该密钥时所拥有的访问权限。 create_date timestamp without time zone 创建密钥的时间。 父主题: 系统表
  • GS_AUDITING_POLICY_FILTERS GS_AUDITING_POLICY_FILTERS系统表记录统一审计相关的过滤策略相关信息,每条记录对应一个设计策略。需要有系统管理员或安全策略管理员权限才可以访问此系统表。 表1 GS_AUDITING_POLICY_FILTERS字段 名称 类型 描述 oid oid 行标识符(隐含属性,必须明确选择)。 filtertype name 过滤类型。目前值仅为logical_expr。 labelname name 名称。目前值仅为logical_expr。 policyoid oid 所属审计策略的oid,对应审计策略系统表GS_AUDITING_POLICY中的oid。 modifydate timestamp without time zone 创建或修改的最新时间戳。 logicaloperator text 过滤条件的逻辑字符串。 父主题: 系统表
  • GS_AUDITING_POLICY_PRIVILEGES GS_AUDITING_POLICY_PRIVILEGES系统表记录统一审计DDL数据库相关操作信息,每条记录对应一个设计策略。需要有系统管理员或安全策略管理员权限才可以访问此系统表。 表1 GS_AUDITING_POLICY_PRIVI字段 名称 类型 描述 oid oid 行标识符(隐含属性,必须明确选择)。 privilegetype name DDL数据库操作相关类型。例如CREATE、ALTER、DROP等。 labelname name 资源标签名称。对应系统表GS_AUDITING_POLICY中的polname字段。 policyoid oid 对应审计策略系统表GS_AUDITING_POLICY中的oid。 modifydate timestamp without time zone 创建或修改的最新时间戳。 父主题: 系统表
  • 字符串操作符 SQL定义了一些字符串函数,在这些函数里使用关键字而不是逗号来分隔参数。 octet_length(string) 描述:二进制字符串中的字节数。 返回值类型:int 示例: 12345 gaussdb=# SELECT octet_length(E'jo\\000se'::bytea) AS RESULT; result-------- 5(1 row) overlay(string placing string from int [for int]) 描述:替换子串。 返回值类型:bytea 示例: 12345 gaussdb=# SELECT overlay(E'Th\\000omas'::bytea placing E'\\002\\003'::bytea from 2 for 3) AS RESULT; result ---------------- \x5402036d6173(1 row) position(substring in string) 描述:特定子字符串的位置。 返回值类型:int 示例: 12345 gaussdb=# SELECT position(E'\\000om'::bytea in E'Th\\000omas'::bytea) AS RESULT; result-------- 3(1 row) substring(string [from int] [for int]) 描述:截取子串。 返回值类型:bytea 示例: 12345 gaussdb=# SELECT substring(E'Th\\000omas'::bytea from 2 for 3) AS RESULT; result ---------- \x68006f(1 row) substr(bytea [from int] [for int]) 描述:截取子串。 返回值类型:bytea 示例: 12345 gaussdb=# select substr(E'Th\\000omas'::bytea,2, 3) as result; result---------- \x68006f(1 row) trim([both] bytes from string) 描述:从string的开头和结尾删除只包含bytes中字节的最长字符串。 返回值类型:bytea 示例: 12345 gaussdb=# SELECT trim(E'\\000'::bytea from E'\\000Tom\\000'::bytea) AS RESULT; result ---------- \x546f6d(1 row)
  • 二进制字符串函数 GaussDB也提供了函数调用所使用的常用语法。 btrim(string bytea,bytes bytea) 描述:从string的开头和结尾删除只包含bytes中字节的最长的字符串。 返回值类型:bytea 示例: 12345 gaussdb=# SELECT btrim(E'\\000trim\\000'::bytea, E'\\000'::bytea) AS RESULT; result ------------ \x7472696d(1 row) get_bit(string, offset) 描述:从字符串中抽取位。 返回值类型:int 示例: 12345 gaussdb=# SELECT get_bit(E'Th\\000omas'::bytea, 45) AS RESULT; result-------- 1(1 row) get_byte(string, offset) 描述:从字符串中抽取字节。 返回值类型:int 示例: 12345 gaussdb=# SELECT get_byte(E'Th\\000omas'::bytea, 4) AS RESULT; result-------- 109(1 row) set_bit(string,offset, newvalue) 描述:设置字符串中的位。 返回值类型:bytea 示例: 12345 gaussdb=# SELECT set_bit(E'Th\\000omas'::bytea, 45, 0) AS RESULT; result ------------------ \x5468006f6d4173(1 row) set_byte(string,offset, newvalue) 描述:设置字符串中的字节。 返回值类型:bytea 示例: 12345 gaussdb=# SELECT set_byte(E'Th\\000omas'::bytea, 4, 64) AS RESULT; result ------------------ \x5468006f406173(1 row) rawcmp 描述:raw数据类型比较函数。 参数:raw, raw 返回值类型:integer raweq 描述:raw数据类型比较函数。 参数:raw, raw 返回值类型:boolean rawge 描述:raw数据类型比较函数。 参数:raw, raw 返回值类型:boolean rawgt 描述:raw数据类型比较函数。 参数:raw, raw 返回值类型:boolean rawin 描述:raw数据类型解析函数。 参数:cstring 返回值类型:bytea rawle 描述:raw数据类型解析函数。 参数:raw, raw 返回值类型:boolean rawlike 描述:raw数据类型解析函数。 参数:raw, raw 返回值类型:boolean rawlt 描述:raw数据类型解析函数。 参数:raw, raw 返回值类型:boolean rawne 描述:比较raw类型是否一样。 参数:raw, raw 返回值类型:boolean rawnlike 描述:比较raw类型与模式是否不匹配。 参数:raw, raw 返回值类型:boolean rawout 描述:RAW类型的输出接口。 参数:bytea 返回值类型:cstring rawsend 描述:转换bytea为二进制类型。 参数:raw 返回值类型:bytea rawtohex 描述:raw格式转换为十六进制。 参数:text 返回值类型:text
  • 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):表示策略没有启动。 父主题: 系统表
  • GS_AUDITING_POLICY_ACCESS GS_AUDITING_POLICY_ACCESS系统表记录与DML数据库相关操作的统一审计信息。需要有系统管理员或安全策略管理员权限才可以访问此系统表。 表1 GS_AUDITING_POLICY_ACCESS字段 名称 类型 描述 oid oid 行标识符(隐含属性,必须明确选择)。 accesstype name DML数据库操作相关类型。例如SELECT、INSERT、DELETE等。 labelname name 资源标签名称。对应系统表GS_AUDITING_POLICY中的polname字段。 policyoid oid 所属审计策略的Oid。对应系统表GS_AUDITING_POLICY中的oid。 modifydate timestamp without time zone 创建或修改的最新时间戳。 父主题: 系统表
  • PACKAGE支持自治事务 自治事务可以在package中的存储过程或者函数中定义,标识符为PRAGMA AUTONOMOUS_TRANSACTION,其余语法与创建package中存储过程或函数语法相同,示例如下: --建表drop table t2;create table t2(a int, b int);insert into t2 values(1,2);select * from t2;--创建包含自治事务的package中的存储过程和函数CREATE OR REPLACE PACKAGE autonomous_pkg AS PROCEDURE autonomous_4(a int, b int); FUNCTION autonomous_32(a int ,b int) RETURN int;END autonomous_pkg;/CREATE OR REPLACE PACKAGE body autonomous_pkg ASPROCEDURE autonomous_4(a int, b int) AS DECLARE num3 int := a; num4 int := b; PRAGMA AUTONOMOUS_TRANSACTION;BEGINinsert into t2 values(num3, num4); END;FUNCTION autonomous_32(a int ,b int) RETURN int AS DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGINinsert into t2 values(a, b);return 1;END;END autonomous_pkg;/--创建调用package自治事务存储过程和函数的普通存储过程CREATE OR REPLACE PROCEDURE autonomous_5(a int, b int) AS DECLAREva int;BEGINinsert into t2 values(666, 666);autonomous_pkg.autonomous_4(a,b); va := autonomous_pkg.autonomous_32(a + 1, b + 1);rollback;END;/--调用普通存储过程select autonomous_5(11,22);--查看表结果select * from t2 order by a; 上述例子,最后在回滚的事务块中执行包含PACKAGE自治事务的存储过程和函数,直接说明了自治事务的特性,即主事务的回滚,不会影响自治事务已经提交的内容。 父主题: 自治事务
  • 系统表和系统视图概述 系统表是GaussDB存放结构元数据的地方,它是GaussDB数据库系统运行控制信息的来源,是数据库系统的核心组成部分。 系统视图提供了查询系统表和访问数据库内部状态的方法。 系统表和系统视图要么只对管理员可见,要么对所有用户可见。下面的系统表和视图有些标识了需要管理员权限,这些系统表和视图只有管理员可以查询。 用户可以删除后重新创建这些表、增加列、插入和更新数值,但是用户修改系统表会导致系统信息的不一致,从而导致系统控制紊乱。正常情况下不应该由用户手工修改系统表或系统视图,或者手工重命名系统表或系统视图所在的模式,而是由SQL语句关联的系统表操作自动维护系统表信息。 不建议用户修改系统表和系统视图的权限。 用户应该禁止对系统表进行增删改等操作,人为对系统表的修改或破坏可能会导致系统各种异常情况甚至集群不可用。 系统表和系统视图中与外键相关的字段暂不支持。 系统表和系统视图中的字段类型详见数据类型章节介绍。 父主题: 系统表和系统视图
  • 规格约束 自治事务执行时,将会在后台启动自治事务session,我们可以通过max_concurrent_autonomous_transactions设置自治事务执行的最大并行数量,取值范围:0~10000,默认值:10。 当max_concurrent_autonomous_transactions参数设置为0时,自治事务将无法执行。 自治事务新启session后,将使用默认session参数,不共享主session下对象(包括session级别变量,本地临时变量,全局临时表的数据等)。 自治事务理论上限为10000,实际上限为动态值,参考GUC参数max_concurrent_autonomous_transactions描述。 自治事务受通信缓冲区影响,返回给客户端的信息大小受限于通信缓冲区长度,超过通信缓冲区长度时报错。 触发器函数不支持自治事务。 CREATE TABLE test_trigger_des_tbl(id1 INT, id2 INT, id3 INT);CREATE OR REPLACE FUNCTION tri_insert_func() RETURNS TRIGGER AS$$DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGININSERT INTO test_trigger_des_tbl VALUES(NEW.id1, NEW.id2, NEW.id3);RETURN NEW;END$$ LANGUAGE PLPGSQL; 自治事务不支持非顶层匿名块调用(仅支持顶层自治事务,包括存储过程、函数、匿名块)。 create table t1(a int ,b text);DECLARE --PRAGMA AUTONOMOUS_TRANSACTION;BEGIN DECLARE PRAGMA AUTONOMOUS_TRANSACTION; BEGIN dbe_output.print_line('just use call.'); insert into t1 values(1,'can you rollback!'); END; insert into t1 values(2,'I will rollback!'); rollback;END;/select * from t1; 自治事务不支持ref_cursor参数传递。 create table sections(section_ID int);insert into sections values(1);insert into sections values(1);insert into sections values(1);insert into sections values(1);CREATE OR REPLACE function proc_sys_ref()return SYS_REFCURSORISdeclare PRAGMA AUTONOMOUS_TRANSACTION; C1 SYS_REFCURSOR;BEGIN OPEN C1 FOR SELECT section_ID FROM sections ORDER BY section_ID; return C1;END;/CREATE OR REPLACE function proc_sys_ref(OUT C2 SYS_REFCURSOR, OUT a int)return SYS_REFCURSORISdeclare PRAGMA AUTONOMOUS_TRANSACTION; C1 SYS_REFCURSOR;BEGIN OPEN C1 FOR SELECT section_ID FROM sections ORDER BY section_ID; return C1;END;/ 分布式自治事务不支持下推(IMMUTABLE,STABLE类型)。 CREATE OR REPLACE procedure autonomous_test_in_p_116(num1 int ) IMMUTABLE ASDECLAREPRAGMA AUTONOMOUS_TRANSACTION;BEGINperform pg_sleep(1);END;/CREATE OR REPLACE procedure autonomous_test_in_p_117(num1 int ) STABLE ASDECLAREPRAGMA AUTONOMOUS_TRANSACTION;BEGINperform pg_sleep(1);END;/ 分布式不支持检测(死锁时,有锁等待超时报错)。 create table test_lock (id int,a date);insert into test_lock values (10,sysdate),(11,sysdate),(12,sysdate);CREATE OR REPLACE FUNCTION autonomous_test_lock(num1 int,num2 int) RETURNSinteger LANGUAGE plpgsql AS $$DECLARE num3 int := 4;PRAGMA AUTONOMOUS_TRANSACTION;BEGINupdate test_lock set a=sysdate where id =11;RETURN num1+num2+num3;END;$$;start transaction;update test_lock set a=sysdate where id =11;call autonomous_test_lock(1,1);END; 自治事务函数不支持直接返回record类型和out出参与record类型同时返回。 不支持修改自治事务的隔离级别。 不支持自治事务返回集合类型(setof)。 父主题: 自治事务
  • 匿名块支持自治事务 自治事务可以在匿名块中定义,标识符为PRAGMA AUTONOMOUS_TRANSACTION,其余语法与创建匿名块语法相同,示例如下。 create table t1(a int ,b text);START TRANSACTION;DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGINdbe_output.print_line('just use call.');insert into t1 values(1,'you are so cute,will commit!');END;/insert into t1 values(1,'you will rollback!');rollback;select * from t1; 上述例子,最后在回滚的事务块前执行包含自治事务的匿名块,也能直接说明了自治事务的特性,即主事务的回滚,不会影响自治事务已经提交的内容。 父主题: 自治事务
  • 函数支持自治事务 自治事务可以在函数中定义,标识符为PRAGMA AUTONOMOUS_TRANSACTION,其余语法与函数语法相同,示例如下。 create table t4(a int, b int, c text);CREATE OR REPLACE function autonomous_32(a int ,b int ,c text) RETURN int AS DECLARE PRAGMA AUTONOMOUS_TRANSACTION;BEGINinsert into t4 values(a, b, c);return 1;END;/CREATE OR REPLACE function autonomous_33(num1 int) RETURN int AS DECLARE num3 int := 220;tmp int;PRAGMA AUTONOMOUS_TRANSACTION;BEGINnum3 := num3/num1;return num3;EXCEPTIONWHEN division_by_zero THENselect autonomous_32(num3, num1, sqlerrm) into tmp;return 0;END;/select autonomous_33(0);select * from t4; 父主题: 自治事务
  • 存储过程支持自治事务 自治事务可以在存储过程中定义,标识符为PRAGMA AUTONOMOUS_TRANSACTION,其余语法与创建存储过程语法相同,示例如下。 --建表create table t2(a int, b int);insert into t2 values(1,2);select * from t2;--创建包含自治事务的存储过程CREATE OR REPLACE PROCEDURE autonomous_4(a int, b int) AS DECLARE num3 int := a;num4 int := b;PRAGMA AUTONOMOUS_TRANSACTION;BEGINinsert into t2 values(num3, num4); dbe_output.print_line('just use call.');END;/--创建调用自治事务存储过程的普通存储过程CREATE OR REPLACE PROCEDURE autonomous_5(a int, b int) AS DECLARE BEGINdbe_output.print_line('just no use call.');insert into t2 values(666, 666);autonomous_4(a,b);rollback;END;/--调用普通存储过程select autonomous_5(11,22);--查看表结果select * from t2 order by a; 上述例子,最后在回滚的事务块中执行包含自治事务的存储过程,直接说明了自治事务的特性,即主事务的回滚,不会影响自治事务已经提交的内容。 父主题: 自治事务
  • 常量与宏 GaussDB支持的常量和宏请参见表1。 表1 常量和宏 参数 描述 示例 CURRENT_CATALOG 当前数据库 12345 gaussdb=# SELECT CURRENT_CATALOG;current_database------------------testdb(1 row) CURRENT_ROLE 当前用户 12345 gaussdb=# SELECT CURRENT_ROLE;current_user--------------omm(1 row) CURRENT_SCHEMA 当前数据库模式 12345 gaussdb=# SELECT CURRENT_SCHEMA;current_schema----------------public(1 row) CURRENT_USER 当前用户 12345 gaussdb=# SELECT CURRENT_USER;current_user--------------omm(1 row) LOCALTIMESTAMP 当前会话时间(无时区) 12345 gaussdb=# SELECT LOCALTIMESTAMP; timestamp----------------------------2015-10-10 15:37:30.968538(1 row) NULL 空值 - SESSION_USER 当前系统用户 12345 gaussdb=# SELECT SESSION_USER;session_user--------------omm(1 row) SYSDATE 当前系统日期 12345 gaussdb=# SELECT SYSDATE;sysdate---------------------2015-10-10 15:48:53(1 row) USER 当前用户,此用户为CURRENT_USER的别名。 12345 gaussdb=# SELECT USER;current_user--------------omm(1 row) 父主题: SQL参考
共100000条