Вопрос

В 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top