PnX-SI / GeoNature

Application de saisie et de synthèse des observations faune et flore
GNU General Public License v3.0
100 stars 102 forks source link

Volatilités des fonctions PG #829

Open jbdesbas opened 4 years ago

jbdesbas commented 4 years ago

Bonjour,

Les plupart des fonctions postgres de GeoNature sont définies comme IMMUTABLE (dans _refnomenclatures et taxonomie notamment). D'après la doc, il semble que les fonctions IMMUTABLE ne doivent pas contenir de requête, et que le retour de la fonction doit dépendre uniquement des paramètres. Il serait donc plus correct de qualifier ces fonctions en STABLE.

Dans la pratique, je ne sais pas si ça change grand chose (peut être un risque d'utilisation de valeurs erronées après la mise à jour d'un référentiel ?). Vous pensez que ça devrait être corrigé ? (ALTER FUNCTION xxxxx STABLE; )

gildeluermoz commented 4 years ago

Merci. Il faut effectivement se pencher sur le sujet et faire des tests. Je ne maitrise pas tout. Notamment je ne connaissais pas la définition en STABLE. Je sais qu'il peut y avoir un impact important sur les perfs avec des fonctions en VOLATILE.

jbdesbas commented 4 years ago

Salut,

Je remonte cette issue car je viens de résoudre un problème en lien avec ça. Curieusement, le trigger _tri_insert_synthese_cor_countingocctax ne fonctionnait plus correctement depuis quelques temps (pas d'insertion dans _cor_observersynthese ). En debuggant un peu, il s'est avéré que la fonction _pr_occtax.id_releve_from_idcounting appelé dans _fct_tri_synthese_insertcounting retournait NULL au lieu de retourner l'id du relevé.

:heavy_check_mark: Tout est rentré dans l'ordre lorsque j'ai modifié la fonction _pr_occtax.id_releve_from_idcounting en STABLE (au lieu de IMMUTABLE). Je ne sais pas s'il n'y a que moi qui ait eu ce genre de problème un peu pénible à détecter, mais si ca apparaît de manière un peu aléatoire dans la base ca peut être assez problématique.

Si ca vous va, je propose une PR avec un correctif (IMMUTABLE --> STABLE) pour les fonctions contenant des appels dans la BDD