在lightdb/pg中,事务是自动提交的,也就是除非明确通过BEGIN;开启事务,否则任何语句都是独立事务。在ltsql客户端,可以通过\echo :AUTOCOMMIT查看自动提交模式,如下:
因为ltsql是客户端工具,不是libpq/ltjdbc实现,所以它不具典型意义。
强制自动提交,无参数控制有个缺点,对于一些oracle/mysql不会提交的场景也会自动提交,而我们认为它不会提交。如explain analyze,如下:
explain analyze实际上被提交了,而如果数据被修改后和原来的数据不唯一,就可能无法恢复。这是非常麻烦的。
要正确执行更新,需要先BEGIN,然后rollback,如下:
因为这很难控制,因此lightdb在内核中基于隐藏字段实现自动更新时间戳,能够记录行最后更新时间,这样能够做到恢复。如下:
Original: https://www.cnblogs.com/zhjh256/p/16366789.html
Author: zhjh256
Title: lightdb关闭事务自动提交