В SQLServer можно использовать синтаксис" (nolock)", чтобы гарантировать, что запрос не блокирует таблицу или не заблокирован другими запросами, блокирующими ту же таблицу. например.
SELECT * FROM mytable (nolock) WHERE id = blah
Каков эквивалентный синтаксис в Пост-ГРЭС? Я нашел некоторую документацию относительно таблицы, привязывающей PG (http://www.postgresql.org/docs/8.1/interactive/sql-lock.html), но кажется приспособленным в том, как заблокировать таблицу, не удостовериться, что это не заблокировано.
SELECT не блокирует никакую таблицу в PostgreSQL, если вам не нужна блокировка:
SELECT * FROM tablename FOR UPDATE;
PostgreSQL использует MVCC для минимизации блокировки конкуренция, чтобы обеспечить разумную производительность в многопользовательских средах. Читатели не конфликтуют ни с писателями, ни с другими читателями.
Я провел некоторое исследование, и оказалось, что подсказка NOLOCK
в SQL Server примерно соответствует уровню изоляции транзакции READ UNCOMMITTED
. В PostgreSQL вы можете установить READ UNCOMMITTED
, но он молча повышает уровень до READ COMMITTED
. READ UNCOMMITTED
не поддерживается.
Документация PostgreSQL 8.4 по изоляции транзакций: http://www.postgresql.org/docs/8.4/static/transaction-iso.html