UPDATE sans clause WHERE verrouille-t-il une table dans PostgreSQL?

9

La table entière UPDATE(sans spécifier de WHEREclause) verrouille-t-elle une table dans PostgreSQL? Par exemple, cela empêche-t-il la suppression / l'insertion de lignes?

Par exemple, si je lance UPDATE t1 SET key = 'value' Puis-je m'attendre à ce qu'aucune nouvelle ligne ne soit insérée t1pendant l' UPDATEexécution?

Si non, puis-je m'attendre à ce que la UPDATEmise à jour des lignes apparaisse même après son démarrage? (la clé n'a pas DEFAULT 'value'de définition)

origaminal
la source
S'il mettait à jour des lignes insérées après le démarrage et qu'il y avait un processus qui insérait continuellement des lignes, cela ne signifierait-il pas que l'instruction de mise à jour ne se terminerait jamais?
Joe W
bon point! Oui, il est à peine possible UPDATEd'être implémenté de cette manière pour mettre à jour les lignes nouvellement insérées.
origaminal
Non, seules les lignes modifiées seront verrouillées. Une MISE À JOUR ne verrouille jamais la table entière.
a_horse_with_no_name

Réponses:

15

Un UPDATE sans clause WHERE verrouille toutes les lignes de la table, mais ne verrouille pas la table elle-même pour DML.

Les lignes ne peuvent pas être supprimées d'une autre transaction car elles sont verrouillées.

Mais vous pouvez insérer de nouvelles lignes sans problème (en supposant qu'elles ne violent aucune contrainte).

Toute ligne insérée après UPDATE ne sera pas vue par l'instruction UPDATE et ne sera donc pas modifiée.

un cheval sans nom
la source
pouvez-vous s'il vous plaît partager les liens sur les documents. Je n'ai pas trouvé grand-chose dans la documentation officielle disant exactement à propos de UPDATEsans WHERE.
origaminal
Et les lignes MISES À JOUR d'une autre transaction échoueront également en raison des verrous de ligne, n'est-ce pas?
tale852150
1
@origaminal Le document en question se trouve sur postgresql.org/docs/current/explicit-locking.html , les quatre derniers sont ce que vous appelez des `` verrous de table '' - bien que même les verrous permissifs soient toujours une forme de verrou de table qui empêcher les tentatives de verrouillage exclusif.
SilverbackNet