私はPostgresを初めて使っているので、これは明らかかもしれません(または、難しい、わかりません)。PostgresとGOで "ロック"を強制する
一度に少なくとも数秒間テーブルや行を「ロック」させたいと思います。これは、第2の操作が「待機」する原因となる。
"github.com/lib/pq"とgolangを使用してデータベースとやりとりしています。
私がこれを必要とするのは、postgresqlを監視するプロジェクトに取り組んでいるからです。助けてくれてありがとう。
私はPostgresを初めて使っているので、これは明らかかもしれません(または、難しい、わかりません)。PostgresとGOで "ロック"を強制する
一度に少なくとも数秒間テーブルや行を「ロック」させたいと思います。これは、第2の操作が「待機」する原因となる。
"github.com/lib/pq"とgolangを使用してデータベースとやりとりしています。
私がこれを必要とするのは、postgresqlを監視するプロジェクトに取り組んでいるからです。助けてくれてありがとう。
トランザクションの長さの行をロックするために、更新のためにselect ...を使用することもできます。
begin;
select * from foo where quatloos = 100 for update;
update foo set feens = feens + 1 where quatloos = 100;
commit;
これは、コミットまたはロールバックが持っているまで、これらの行にアクセスしようとしてquatloos = 100の任意の他のトランザクションはブロックされますfooのテーブルの行に排他行レベルロックを実行します:
基本的に、それはようなものです更新の選択が実行されると発行されます。
理想的には、これらのロックは可能な限り短く存続する必要があります。
参照:https://www.postgresql.org/docs/current/static/explicit-locking.html
SERIALIZABLEするトランザクション分離レベルを設定しhttps://www.postgresql.org/docs/9.1/static/sql-set-transaction.html – Hackerman
[この](https://でのstackoverflow .com/a/31845051/6069012)答えはあなたが望むものと非常に似ています。必要な分離レベルを使用してください。 – Gavin
@Hackermanうーん、うまくいった。 – Gavin