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