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