Подтвердить что ты не робот

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), но все это похоже на то, как заблокировать таблицу, а не гарантировать ее заперта.

4b9b3361

Ответ 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