postgresql 可序列化隔离级别会阻止Postgres中的读查询吗

im9ewurl  于 12个月前  发布在  PostgreSQL
关注(0)|答案(1)|浏览(128)

我有表“交易”,在客户帐户交易将举行。所以我想设置交易级别序列化,以防止所有类型的异常。
让我们假设交易是这样进行的:

BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;
INSERT INTO transaction_test (sum, currency) VALUES (333, '820');

字符串
我怀疑这个表是否可以供用户读取,因为我们的应用程序需要从这个表中运行多个SELECT来进行统计?
在Google搜索之后,我有点困惑:

2jcobegt

2jcobegt1#

PostgreSQL并不通过锁定每个潜在冲突的事务来保证SERIALIZABLE。相反,它采用特殊的 * predicate 锁 *,它不会阻止任何东西,但会跟踪事务读取的数据。如果出现可能违反可串行化性的情况,PostgreSQL将以 * 串行化错误 * 中止其中一个事务。
不会阻塞并发的只读事务。根据文档的建议,您应该将只读查询 Package 在SERIALIZABLE READ ONLY事务中以获得最佳性能。

相关问题