事务控制 create table trowlock(id int,mc text,primary key (id)) distribute by shard(id); CREATE TABLE teledb insert into trowlock values(1,'teledb'),(2,'pgxz'); COPY 2 teledb select from trowlock; id mc + 1 teledb 2 pgxz (2 rows) 直接update 获取 会话1 plaintext teledb begin; BEGIN teledb set locktimeout to 1; SET teledb update trowlock set mc'teledb' where mc'pgxz'; UPDATE 1 会话2 plaintext teledb begin; BEGIN teledb set locktimeout to 1; SET teledb update trowlock set mc'teledb' where mc'pgxz'; UPDATE 1 teledb update trowlock set mc'postgresql' where mc'pgxz'; ERROR: node:dn01, backendpid:10158, nodename:dn01,backendpid:10158,message:canceling statement due to lock timeout 上面session1与session2分别持有mcpgxz行和mcteledb的行锁 会话1提交事务 plaintext teledb commit; COMMIT 会话2重新更新 plaintext teledb commit; ROLLBACK teledb update trowlock set mc'postgresql' where mc'pgxz'; UPDATE 0 teledb update trowlock set mc'postgresql' where mc'teledb'; UPDATE 1 select...for update 获取 会话1 plaintext teledb begin; BEGIN teledb set locktimeout to 1; SET teledb select from trowlock where mc'postgresql' for update; id mc + 2 postgresql (1 row) 会话2 plaintext teledb