From: | Alain Benard <alain(dot)benard(at)inrae(dot)fr> |
---|---|
To: | |
Cc: | "pgsql-fr-generale(at)lists(dot)postgresql(dot)org" <pgsql-fr-generale(at)lists(dot)postgresql(dot)org> |
Subject: | RE: incidence update neutre. |
Date: | 2020-03-27 13:55:19 |
Message-ID: | 4051f454f55c48e4911034f6c9ae489b@IDFDCPRIPEXMU06.inra.local |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-fr-generale |
Un grand merci à Thomas et Olivier pour cet éclaircissement limpide.
De : Olivier Gautherot <ogautherot(at)gautherot(dot)net>
Envoyé : vendredi 27 mars 2020 12:53
À : Thomas Reiss <thomas(dot)reiss(at)sector1(dot)fr>
Cc : pgsql-fr-generale(at)lists(dot)postgresql(dot)org
Objet : Re: incidence update neutre.
Bonjour Alain,
Comme le dit Thomas, l'opération se fait de toutes façons, c'est-à-dire tu vas voir, au niveau du moteur, un INSERT suivi d'un DELETE (qui est l'opération normale d'un UPDATE). J'ai eu l'occasion de faire ce genre d'opération sur des tables ayant quelques dizaines de millions de files.
Si ton update est massif et qu'une portion significative de la table contient déjà la valeur, je te suggère de faire un:
update matable set monchamp=6 where monchamp <> 6
Si tu as un indice sur "monchamp", le gain de temps sera encore plus significatif.
J'espère que ça t'aidera
--
Olivier Gautherot
Tel: +33 6 02 71 92 23
https://www.linkedin.com/in/ogautherot/
On Fri, Mar 27, 2020 at 10:59 AM Thomas Reiss <thomas(dot)reiss(at)sector1(dot)fr<mailto:thomas(dot)reiss(at)sector1(dot)fr>> wrote:
Bonjour Alain,
Pour vous en rendre compte :
SELECT xmin, * FROM matable;
UPDATE matable SET monchamp=6;
SELECT xmin, * FROM matable;
Si xmin bouge après l'UPDATE, c'est que PostgreSQL a créé une nouvelle version de ligne et vous aurez votre réponse. Si tel est le cas, la ligne sera également verrouillée tant que la transaction qui réalise l'UPDATE n'aura pas fait de COMMIT ou de ROLLBACK.
Et pour répondre plus directement, PostgreSQL réalise bien la modification.
Cordialement
Le 27/03/2020 à 10:32, Alain Benard a écrit :
Bonjour,
Je voudrai savoir quelle est l’incidence d’un update qui ne change rien comme ‘update matable set monchamp=6’ alors que le champ comporte déjà la valeur 6. Ma question ne porte pas sur le résultat attendu mais sur le fonctionnement du cœur de postgres (verrouillage, copie de l’enregistrement pendant la transaction …). En gros est-ce que postgres détecte qu’il n’y a pas de changement (ce qui pourrait être très couteux) ou bien se comporte comme s’il y avait une véritable modification de l’enregistrement …
Merci par avance.
Alain.
[INRA]<http://www.inra.fr/>
Alain BENARD
Administrateur Systèmes d’Information
alain(dot)benard(at)inra(dot)fr<mailto:alain(dot)benard(at)inra(dot)fr>
Unité SILVA
Tél. : +33 3 83 39 40 84
Route d’amance
54 280 Champenoux
inra.fr<http://www.inra.fr>
[INRA]<https://youtu.be/xUHmi6JxDI4>
--
Thomas Reiss
From | Date | Subject | |
---|---|---|---|
Next Message | Damien Clochard | 2020-04-13 13:28:28 | Report du PG Day France au 16-17 juin 2021 |
Previous Message | Olivier Gautherot | 2020-03-27 11:53:09 | Re: incidence update neutre. |