暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL 12 preview - 事务特征继承 - commit | rollback and CHAIN

digoal 2019-03-30
759

作者

digoal

日期

2019-03-30

标签

PostgreSQL , rollback , commit , chain , 继承事务特性


背景

事务启动特性如下:

```
SET TRANSACTION transaction_mode [, ...]
SET TRANSACTION SNAPSHOT snapshot_id
SET SESSION CHARACTERISTICS AS TRANSACTION transaction_mode [, ...]

where transaction_mode is one of:

ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED }  
READ WRITE | READ ONLY  
[ NOT ] DEFERRABLE
复制

```

当事务结束时,如果立即需要开启一个新事务,这个新事务可以继承之前事务的特性(例如rr隔离级别)。

https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=280a408b48d5ee42969f981bceb9e9426c3a344c

https://www.postgresql.org/docs/devel/sql-commit.html

COMMIT [ WORK | TRANSACTION ] [ AND [ NO ] CHAIN ]

AND CHAIN

If AND CHAIN is specified, a new transaction is immediately started with the same transaction characteristics
(see SET TRANSACTION) as the just finished one.

Otherwise, no new transaction is started.

例子

当事务结束时,立即启动一个新事务,并且继承上一个事务的特性。

+-- transaction chain +TRUNCATE test1; +DO LANGUAGE plpgsql $$ +BEGIN + ROLLBACK; + SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; + FOR i IN 0..3 LOOP + RAISE INFO 'transaction_isolation = %', current_setting('transaction_isolation'); + INSERT INTO test1 (a) VALUES (i); + IF i % 2 = 0 THEN + COMMIT AND CHAIN; + ELSE + ROLLBACK AND CHAIN; + END IF; + END LOOP; +END +$$; +INFO: transaction_isolation = repeatable read +INFO: transaction_isolation = repeatable read +INFO: transaction_isolation = repeatable read +INFO: transaction_isolation = repeatable read +SELECT * FROM test1; + a | b +---+--- + 0 | + 2 | +(2 rows)

参考

https://www.postgresql.org/docs/devel/sql-set-transaction.html

https://www.postgresql.org/docs/devel/sql-commit.html

PostgreSQL 许愿链接

您的愿望将传达给PG kernel hacker、数据库厂商等, 帮助提高数据库产品质量和功能, 说不定下一个PG版本就有您提出的功能点. 针对非常好的提议,奖励限量版PG文化衫、纪念品、贴纸、PG热门书籍等,奖品丰富,快来许愿。开不开森.

9.9元购买3个月阿里云RDS PostgreSQL实例

PostgreSQL 解决方案集合

德哥 / digoal's github - 公益是一辈子的事.

digoal's wechat

文章转载自digoal,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论