Question

Dans SQLServer, vous pouvez utiliser la syntaxe « (nolock) » pour assurer la requête ne se verrouille pas la table ou non bloquée par d'autres requêtes de verrouillage de la même table. par exemple.

SELECT * FROM mytable (nolock) WHERE id = blah

Quelle est la syntaxe équivalente à Postgres? J'ai trouvé une documentation sur le verrouillage de la table dans PG ( http: //www.postgresql .org / docs / 8.1 / interactif / sql-lock.html ), mais tout semble adapté à la façon de verrouillage une table, pas assurez-vous qu'il est pas verrouillé .

Était-ce utile?

La solution

SELECT ne se verrouille pas une table dans PostgreSQL, sauf si vous voulez un verrou:

SELECT * FROM tablename FOR UPDATE;

PostgreSQL utilise MVCC pour minimiser les conflits de verrouillage afin de pour une performance raisonnable dans des environnements multi-utilisateurs. Les lecteurs ne sont pas en conflit avec des écrivains, ni d'autres lecteurs.

Autres conseils

Je l'ai fait quelques recherches et il semble que l'indice de NOLOCK dans SQL Server est à peu près le même que le niveau d'isolation des transactions READ UNCOMMITTED. Dans PostgreSQL, vous pouvez définir READ UNCOMMITTED, mais il met à niveau en silence le niveau READ COMMITTED. READ UNCOMMITTED n'est pas pris en charge.

Documentation PostgreSQL 8.4 pour l'isolement de la transaction: http: // www. postgresql.org/docs/8.4/static/transaction-iso.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top