2017-08-24 38 views
0

私はPostgresを初めて使っているので、これは明らかかもしれません(または、難しい、わかりません)。PostgresとGOで "ロック"を強制する

一度に少なくとも数秒間テーブルや行を「ロック」させたいと思います。これは、第2の操作が「待機」する原因となる。

"github.com/lib/pq"とgolangを使用してデータベースとやりとりしています。

私がこれを必要とするのは、postgresqlを監視するプロジェクトに取り組んでいるからです。助けてくれてありがとう。

+0

SERIALIZABLEするトランザクション分離レベルを設定しhttps://www.postgresql.org/docs/9.1/static/sql-set-transaction.html – Hackerman

+0

[この](https://でのstackoverflow .com/a/31845051/6069012)答えはあなたが望むものと非常に似ています。必要な分離レベルを使用してください。 – Gavin

+0

@Hackermanうーん、うまくいった。 – Gavin

答えて

0

トランザクションの長さの行をロックするために、更新のために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

関連する問題