PostgreSQL中的JSON类型是交易的一部分吗?

use*_*450 3 postgresql json transactions postgresql-9.3

只想知道JSON类型是否也属于交易.例如,如果我已经启动了为列JSON类型和其他类型插入数据的事务,并且如果发生错误,它是否也会回滚json的东西?

Cra*_*ger 10

除非明确记录,否则PostgreSQL中的所有内容都是事务性和崩溃安全的.

PostgreSQL的事务在元组上运行,而不是单个字段.数据类型无关紧要.实际上不可能在PostgreSQL中实现事务性的数据类型.(SERIAL"数据类型"只是integer带有a 的类型的包装器DEFAULT,并且有点特殊情况).

只有少数事情对交易有特殊的行为 - 序列,咨询锁等 - 并且在这种情况下,它们已经清楚地记录在案.

请注意,这会带来一些您可能不会立即期望的限制.最重要的是,因为PostgreSQL依赖于MVCC进行并发控制,所以它必须在修改该值时复制一个值(或者,有时,当修改同一元组中的其他值时).它不能就地改变字段.因此,如果json字段中有5MB 文档并且您更改了单个整数值,则必须使用更改的值复制和写出整个json文档.PostgreSQL稍后会出现并将旧副本标记为可以重复使用的可用空间.