Postgresql:事务-异常过程问题

Postgresql:事务-异常过程问题,postgresql,exception,transactions,commit,rollback,Postgresql,Exception,Transactions,Commit,Rollback,我试图用一个过程控制一个事务,但我遇到了一个无法解决的错误 代码如下: drop table if exists cuentas; create table cuentas ( id serial, nombre varchar(100) not null, saldo dec(15,2) not null, primary key(id), constraint saldo CHECK(saldo > 5000) ); insert into

我试图用一个过程控制一个事务,但我遇到了一个无法解决的错误

代码如下:

drop table if exists cuentas;

create table cuentas (
    id serial,
    nombre varchar(100) not null,
    saldo dec(15,2) not null,
    primary key(id),
    constraint saldo CHECK(saldo > 5000)
);


insert into cuentas(nombre, saldo)
values('Carlos',10000);

insert into cuentas(nombre, saldo)
values('Cesar',10000);

SELECT * FROM cuentas;

drop procedure if exists transferir;

create or replace procedure transferir(id_emisor int,id_receptor int,cantidad dec)
language plpgsql    
as $$
begin
-- adding the amount from the recievers's account 
update cuentas 
set saldo = saldo + cantidad 
where id = id_receptor;
-- substracting the amount to the sender's account
update cuentas 
set saldo = saldo - cantidad 
where id = id_emisor;
commit;

EXCEPTION
    WHEN check_violation THEN
        RAISE NOTICE 'Violación de saldo.';
        rollback;
        commit;
end;$$
当我尝试执行时:

call transferir(1,2,1000);
我得到:

ERROR:  no se puede comprometer mientras hay una subtransacción activa
CONTEXT:  función PL/pgSQL transferir(integer,integer,numeric) en la línea 13 en COMMIT
Estado SQL: 2D000


有人知道我做错了什么吗?

你好,一匹没有名字的马和论坛管理员, 很抱歉,我知道这部分的位置不正确,但我无法回答没有名字的马,也无法评论他的建议。
我使用的是Postgresql 12.4版。 此外,我取消选择自动提交。 但是Postgresql抛出了错误。
谢谢

你的Posgres版本是什么?(
select version();
会告诉您)。你在调用程序之前打开了自动提交吗?嗯,你可以尝试只使用一个帐户。如果你使用了你开始提问时使用的帐户,你可以简单地编辑它并添加要求你提供的信息。。。