Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 07/12/2018 09:27:26
- trainvapeur
- Membre
fonction et transaction
Bonjour à tous,
j'ai l'impression qu'une transaction entoure chaque fonction. Est-ce vrai ?
A priori, cela ne me génerait pas trop sauf pour une table. Cette table est un mouchard dans lequel j'enregistre tout ce qu'il se passe dans l'application (pendant les tests cela devrait me permettre de savoir ce qu'il s'est passé juste avant un plantage). Or, si la fonction se plante alors que des enregistrements auraient du être créés dans le mouchard, ils n'y sont pas. Comment corriger ce problème ?
D'avance merci
Jean
Hors ligne
#2 07/12/2018 11:07:38
- rjuju
- Administrateur
Re : fonction et transaction
Oui chaque requête effectuée, appel de fonction ou pas, est forcément dans une transaction, même implicite. Le problème est connu depuis longtemps. Il y a trois solutions possibles:
- logger dans la table via une connexion externe (par exemple avec l'extension dblink, ou pg_background)
- utiliser les transactions autonomes disponibles avec pg11 et CALL (procédure plutôt que fonction), mais je ne crois pas qu'on puisse mixer des procédures avec d'autres types de requête
- tracer les actions ailleurs, par exemple avec pg_audit
Julien.
https://rjuju.github.io/
Hors ligne
#3 10/12/2018 10:20:24
- trainvapeur
- Membre
Re : fonction et transaction
Merci rjuju pour ces précisions. Pour le mouchard, je vais effectivement m'interesser aux traces (chapitre 19.8 du manuel) et à pg_audit. Ce point est très important pour nous puisque nous sommes en train d'évaluer Postgre en testant différentes options dans le but de remplacer les bases Oracle que nous avons en production.
Mais ta réponse m'inquiète beaucoup. L'application que je développe récupère règulièrement des données sur une base Oracle (3 mois de données, 50go) pour les historiser sur 5 ans (500go). Il y a une vingtaine de tables à traiter. J'avais pensé faire une boucle 'infinie' en plpgsql mais cela ne va pas fonctionner parce que les tables Postgre ne seront pas mises à jour à chaque itération. Vrai? Il faut donc lancer une fonction qui fait l'import des données et qui sera lancée par le planificateur des tâches sous windows, idem pour Linux. Vrai ?
La sueur perle sur mon front !!
Merci d'avance
Jean
Hors ligne
#4 11/12/2018 16:08:23
- trainvapeur
- Membre
Re : fonction et transaction
Bonjour à tous,
est-ce que, si je crée ma table mouchard comme UNLOGGED, je vais pouvoir la mettre à jour à l'intérieur d'une transaction ?
Je vais essayer mais j'aimerai une confirmation !
Cordialement,
J. MAURICE
Hors ligne
#5 11/12/2018 16:47:24
- gleu
- Administrateur
Re : fonction et transaction
Oui, c'est possible mais cette mise à jour ne sera visible par les autres sessions qu'une fois la transaction validée (comme pour toute mise à jour).
Guillaume.
Hors ligne
Pages : 1