SQLServerでは、構文 "(nolock)"を使用して、クエリがテーブルをロックしないか、同じテーブルをロックしている他のクエリによってブロックされないようにすることができます。例えば.
SELECT * FROM mytable (nolock) WHERE id = blah
Postgresの同等の構文は何ですか?私はPGのテーブルロックに関するドキュメントをいくつか見つけました( http://www.postgresql.org/docs/8.1/interactive/sql-lock.html )が、それはすべてlockテーブル、それがロックされていないことを確認しません。
ロックが必要でない限り、SELECTはPostgreSQLのどのテーブルもロックしません。
SELECT * FROM tablename FOR UPDATE;
PostgreSQLは [〜#〜] mvcc [〜#〜] を使用して、ロックの競合を最小限に抑え、マルチユーザー環境で適切なパフォーマンスを実現します。リーダーはライターや他のリーダーと競合しません。
いくつかの調査を行ったところ、SQL ServerのNOLOCK
ヒントはREAD UNCOMMITTED
トランザクション分離レベルとほぼ同じであるようです。 PostgreSQLではREAD UNCOMMITTED
を設定できますが、レベルがREAD COMMITTED
に自動的にアップグレードされます。 READ UNCOMMITTED
はサポートされていません。
トランザクションの分離に関するPostgreSQL 8.4のドキュメント: http://www.postgresql.org/docs/8.4/static/transaction-iso.html