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