只想知道JSON类型是否也属于交易。对于例如如果我已经启动了一个为列JSON类型和其他类型插入数据的事务,如果发生了错误,它是否会回滚json的东西?
答案 0 :(得分:10)
Everything 在PostgreSQL中是事务性和崩溃安全的,除非明确记录不是。
PostgreSQL的交易在元组上运行,而非单个字段。数据类型无关紧要。实际上,在PostgreSQL中实现不事务性的数据类型是不可能的。 (SERIAL
“数据类型”只是具有integer
的{{1}}类型的包装,并且有点特殊情况。)
只有少数事情对交易有特殊的行为 - 序列,咨询锁等 - 而且在这种情况下,它们的描述非常明确。
请注意,这会带来一些您可能不会立即期望的限制。最重要的是,because PostgreSQL relies on MVCC for concurrency control它必须在修改该值时复制一个值(或者,有时,当修改同一元组中的其他值时)。它不能就地改变字段。因此,如果您在一个字段中有一个5MB DEFAULT
文档并且您更改了一个整数值,那么必须使用更改后的值复制和写出整个json文档。然后PostgreSQL会出现,并将旧副本标记为可以重复使用的可用空间。