PostgreSQL Equivalent von SQLServer der NOLOCK-Hinweis
-
25-09-2019 - |
Frage
In SQLServer können Sie Syntax „(nolock)“, um sicherzustellen, die Abfrage die Tabelle nicht sperren oder nicht durch andere Abfragen Sperren der gleichen Tabelle gesperrt. z.
SELECT * FROM mytable (nolock) WHERE id = blah
Was ist die äquivalente Syntax in Postgres? Ich fand eine Dokumentation auf Tabellensperren in PG ( http: //www.postgresql .org / docs / 8.1 / interactive / sQL-lock.html ), aber es ist alles darauf ausgerichtet scheint, wie zu Sperre ein Tisch, es ist nicht sicher, nicht gesperrt .
Lösung
Eine SELECT-Sperre keine Tabelle in PostgreSQL, es sei denn, Sie eine Sperre wollen:
SELECT * FROM tablename FOR UPDATE;
PostgreSQL verwendet MVCC Sperrenkonflikte zu minimieren, um zu für eine angemessene Leistung in Mehrbenutzerumgebungen ermöglichen. Leser nicht in Konflikt steht mit den Autoren noch anderen Lesern.
Andere Tipps
Ich habe einige die Forschung getan und es scheint, dass der NOLOCK
Hinweis in SQL Server ist in etwa die gleichen wie READ UNCOMMITTED
Transaktionsisolationsstufe. In PostgreSQL können Sie einstellen, READ UNCOMMITTED
, aber es wertet still um das Niveau zu READ COMMITTED
. READ UNCOMMITTED
wird nicht unterstützt.
PostgreSQL 8.4 Dokumentation zur Transaktion Isolation: http: // www. postgresql.org/docs/8.4/static/transaction-iso.html