テーブルをロックして、他のユーザーが挿入を実行できないようにしたいと考えています。他のユーザーが行を更新できなくなるため、テーブル全体をロックしたくありません。別のかなり洗練された解決策がありますが、別のユーザーが行を挿入するのを防ぐためだけにテーブルをロックできれば、それがより良い解決策になります。すなわち。INSERT を試行する前のユーザーは、このロックを取得しようとし、既に使用されている場合は待機します。
質問する
332 次
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;
LOCK に関する Postgres のドキュメントを参照してください。
残念ながら、ロックせずに挿入を行っているコードを変更する必要があります。もう 1 つのオプションは、私が何度も行って大きな成功を収めたある種のメッセージ キューを使用することです。
于 2013-05-06T18:40:04.877 に答える