postgresql - Postgres:为单个表或单个读取选择较弱的事务隔离保证?
问题描述
我正在编写一个以 Postgres 13 作为后端的网络应用程序。大多数请求都使用SERIALIZABLE
隔离级别包装在事务中。
对于大多数事情,这很有效。但是,在某些情况下,我希望事务中的某些读取具有不那么严格的隔离。
例如,我要介绍一个global_flags
表,用于显示任何请求都可能使用的不经常更改的设置:
await sqlAsync(`BEGIN; SET TRANSACTION ISOLATION LEVEL SERIALIZABLE`);
const batchSize = await sqlAsync(
`SELECT value FROM global_flags WHERE name = 'batch_size'`);
// ... a bunch more work ...
await sqlAsync('COMMIT');
我有点担心,当我们手动更改global_flags
条目时,我们可能会导致进行中事务的“序列化失败”错误增加。有没有办法告诉 Postgres 我不需要为读取global_flags
表提供那么强的一致性保证?
解决方案
你不必担心。
如果一个事务除了更改该标志之外什么都不做,而另一个只是读取表(并且不尝试写入它!),则两个事务将具有简单的 RW 或 WR 相互依赖,并且会有没有导致序列化错误的周期。
推荐阅读
- python - 脆皮错误 |as_crispy_field 传递了一个无效或不存在的字段
- typescript - `/// 是什么意思
`是什么意思?我们可以在 *.d.ts 中使用哪些其他类似 xml 的语法? - google-app-engine - Cron Job 在谷歌云上运行多次
- javascript - 尝试将符号包装对象显式转换为字符串时出错
- javascript - Ionic Creator - 重新排序在firebase中持续存在的列表项?
- android - 如何知道使用 Retrofit 时调用了请求超时?
- python - 计算列表中元素的出现次数,直到出现不同的元素
- devexpress - Devexpress:如何在代码中设置 BarEditItem 的 EditValue
- c++ - 在 C++ 中循环读取 QML 对象(CheckBox)属性:总是相同的值
- python - 如何合并两个数据帧,其中一个数据帧具有开始时间/结束时间,另一个数据帧具有时间戳数据