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

Is JSON type in PostgreSQL part of transactions?

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


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

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

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

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