В 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