gpt4 book ai didi

django - 在 Postgres 中锁定表以允许其他事务读取,但不允许写入

转载 作者:行者123 更新时间:2023-12-03 23:18:17 25 4
gpt4 key购买 nike

我正在开发一个 Django 应用程序。有一个功能,我想通过读取、计算和插入到许多表来更改数据库状态。这是一个原子过程,它不能只是“单线程”,因为结果状态取决于执行这些过程的顺序。

为此,我将 Celery 与一个 worker 一起使用。我想到了 Postgres 中的 SERIALIZED 隔离级别,直到我读到:

Serializable transactions is guaranteed to produce the same effect as running them one at a time in some order



但是我不需要一些,我需要确切的顺序,这就是我选择消息队列的原因。

在此过程中,我想完全禁止写入我操作的表,但仍允许读取。哪种限制最少的锁定模式适合我的情况?

最佳答案

如果我理解你的问题是正确的,你想要:

lock table_name in exclusive mode;

https://www.postgresql.org/docs/current/static/sql-lock.html
https://www.postgresql.org/docs/current/static/explicit-locking.html

EXCLUSIVE

Conflicts with the ROW SHARE, ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE, and ACCESS EXCLUSIVE lock modes. This mode allows only concurrent ACCESS SHARE locks, i.e., only reads from the table can proceed in parallel with a transaction holding this lock mode.



其他 session 将在您开始事务并锁定表之前的状态下读取表。尝试写入表将使 session 等待您的事务完成

关于django - 在 Postgres 中锁定表以允许其他事务读取,但不允许写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44241032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com