0

我希望能够锁定一个表以防止其他用户进行插入。我不想锁定整个表,因为这会阻止其他用户更新行。我确实有另一个相当优雅的解决方案,但是如果我可以锁定表以防止其他用户插入行,那将是一个更好的解决方案。IE。任何用户在尝试 INSERT 之前都会尝试获取此锁,如果已在使用中则等待。

4

1 回答 1

0

我不确定您为什么要这样做,但我相信您可以通过锁定虚拟桌子来完成您的工作。

对于所有插入,您实际上不会锁定在要插入的表上,而是锁定在仅用于锁定的不同表上:

BEGIN WORK;
LOCK TABLE insert_locks IN EXCLUSIVE;
INSERT INTO real_table VALUES
    (_id_, 'GREAT! I was waiting for it for so long!');
COMMIT WORK;

请参阅 Postgres 的关于 LOCK 的文档

不幸的是,您将不得不更改任何在没有锁定的情况下进行插入的代码。另一种选择是使用某种消息队列,我已经做了很多次并取得了巨大的成功。

于 2013-05-06T18:40:04.877 回答