La table entière UPDATE
(sans spécifier de WHERE
clause) 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 t1
pendant l' UPDATE
exécution?
Si non, puis-je m'attendre à ce que la UPDATE
mise à jour des lignes apparaisse même après son démarrage? (la clé n'a pas DEFAULT 'value'
de définition)
postgresql
locking
origaminal
la source
la source
UPDATE
d'être implémenté de cette manière pour mettre à jour les lignes nouvellement insérées.Réponses:
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.
la source
UPDATE
sansWHERE
.