J'ai une table qui contient environ 50M lignes. Je veux exécuter une simple requête UPDATE:Postgres - Pas de mise à jour, a-t-il des effets secondaires?
UPDATE the_table SET flag = true;
Pour 99% de ces lignes, le drapeau est déjà défini sur true. Donc, seulement 1% des lignes doivent être changées.
Ma question est: est-ce que Postgres est assez intelligent pour le savoir? Ou Postgres changera quand même ces 99% de lignes, ce qui se traduira par des processus typiques tels que WAL, auto-vacuum, réindexation, synchronisation avec les esclaves, ... pour toute la table, au lieu de seulement pour ces lignes de 1%. En d'autres termes, la requête suivante est-elle une approche plus sûre?
UPDATE the_table SET flag = true WHERE flag = false;
il va mettre à jour autant de lignes que le dire. Dans votre cas sans 'where' il va mettre à jour toutes les lignes, alors bien sûr aller pour la deuxième déclaration –
Obligatory use where clause, sinon toutes les lignes seront affectées. – klin