华为云云数据库GaussDB规格约束_云淘科技

自治事务执行时,将会在后台启动自治事务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;
BEGIN
INSERT 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_REFCURSOR
IS
declare
  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_REFCURSOR
IS
declare
  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 
AS
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
perform pg_sleep(1);
END;
/

CREATE OR REPLACE procedure autonomous_test_in_p_117(num1 int ) STABLE AS
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
perform 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) RETURNS
integer LANGUAGE plpgsql AS $$
DECLARE num3 int := 4;
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
update 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)。

父主题: 自治事务

同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851)

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家