Équivalent PostgreSQL de L'indice de NoLock de SQLServer

dans SQLServer, vous pouvez utiliser la syntaxe "(nolock)" pour vous assurer que la requête ne ferme pas la table ou n'est pas bloquée par d'autres requêtes verrouillant la même table. par exemple,

SELECT * FROM mytable (nolock) WHERE id = blah

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

33
demandé sur Cerin 2010-03-07 02:56:12

2 réponses

d'UNE sélection à ne pas verrouiller n'importe quel tableau dans PostgreSQL, sauf si vous voulez un lock:

SELECT * FROM tablename FOR UPDATE;

PostgreSQL utilise MVCC réduire au minimum la tension de verrouillage afin de permettre une performance raisonnable dans les environnements multi-utilisateurs. Les lecteurs n'entrent pas en conflit avec les écrivains ni avec les autres lecteurs.

44
répondu Frank Heikens 2010-03-07 00:13:12

j'ai fait quelques recherches et il semble que L'indice NOLOCK dans SQL Server est à peu près le même que le niveau D'isolement de transaction non engagé. Dans PostgreSQL, vous pouvez définir lire non engagé, mais il améliore silencieusement le niveau de lire engagé. READ UNCOMMITTED n'est pas supporté.

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

5
répondu Matthew Wood 2010-03-07 17:33:22