RE: incidence update neutre.

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

In response to

Browse pgsql-fr-generale by date

  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.