postgresql 事务

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了postgresql 事务相关的知识,希望对你有一定的参考价值。

参考技术A https://blog.csdn.net/weixin_41790552/article/details/90443762

杀列进程

以上idle in transaction ,是由于dbeaver 默认开启了事务,dbeaver 上相关数据操作,java程序上再执行相关数据的 update ,可能会产生锁。

dbeaver 不启用事务

Postgresql:事务 - 异常程序问题

【中文标题】Postgresql:事务 - 异常程序问题【英文标题】:Postgresql: transaction - exception procedure problem 【发布时间】:2021-05-28 21:11:42 【问题描述】:

我正在尝试使用过程控制事务,但遇到无法解决的错误。

这是代码:

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

Error:

谁能看出我做错了什么?

【问题讨论】:

您的 Posgres 版本是什么? (select version(); 会告诉你)。你在调用过程之前打开了自动提交吗? 【参考方案1】:

您好“a_horse_with_no_name”和论坛管理员, 很抱歉使用这个部分,我知道这不是正确的地方,但我不能回答 a_horse_with_no_name 也不能评论他的建议。 我正在使用 Postgresql 12.4 版。 我也取消选择自动提交。 但是 Postgresql 抛出错误。 谢谢

【讨论】:

嗯,你可以尝试只使用一个帐户。如果您使用的是您开始提问时使用的帐户,则可以简单地对其进行编辑并添加您被要求提供的信息...

以上是关于postgresql 事务的主要内容,如果未能解决你的问题,请参考以下文章

postgresql事务处理与并发控制

PostgreSQL数据库日志事务

Postgresql:事务 - 异常程序问题

Django,Ajax 长轮询,Postgresql:空闲事务

不支持 postgresql 事务隔离级别 4

为啥 PostgreSQL 可序列化事务认为这是冲突?