Em 24/10/2023 13:27, Carlos Alves escreveu:

> Hi! 
> 
> I need some help to understand why a transaction wiht a row delete aquire a 
> AccessExclusiveLock and a row update a ExclusiveLock. 
> 
> To ilustrate, a made this scenario: 
> 
> create table tblock 
> 
> ( 
> 
> id int primary key, 
> 
> value text 
> 
> ); 
> 
> insert into tblock values (1, 'somevalue'); 
> 
> First start Transaction 1: 
> 
> begin; 
> 
> update tblock set value = 'othervalue' where id = 1; 
> 
> -- keep this transaction opened 
> 
> After, start Transaction 2: 
> 
> begin; 
> 
> update tblock set value = 'onemorevalue' where id = 1; 
> 
> -- at this point, this transaction assumes a ExclusiveLock in the tuple; 
> 
> -- keep this transaction opend 
> 
> Then, start Transaction 3: 
> 
> begin; 
> 
> update tblock set value = 'lastofthevalues' where id = 1; 
> 
> -- here i can see this transaction trying to aquire a AccessExclusiveLock in 
> this tuple 
> 
> So, my question is: why a delete row requires a AccessExclusiveLock in the 
> tuple insteead of ExclusiveLock? 
> 
> Bellow, a image of a query over pg_locks: 
> 
> PostgreSQL version: 13 
> 
> OS: Centos 7 
> 
> Thanks in advance.

I typed the last command wrong. Should be:

Transaction 3: 

begin; 

delete from tblock where id = 1; 

Sorry!

Reply via email to