[postgresql-it] Problema con trigger e funzioni simultanee

  • From: Riccardo Penco <riccardo.penco@xxxxxxxxx>
  • To: postgresql-it@xxxxxxxxxxxxx
  • Date: Thu, 9 Sep 2021 00:41:01 +0200

ciao a tutti,

scrivo perché ho un problema nel garantire la correttezza dei dati di una
tabella su un server CentosOS con PostgreSQL 12.

Mi spiego meglio.
La tabella in questione ha un trigger (before insert or update for each
row) che effettua dei controlli sui dati che vengono inseriti (o
modificati) e solleva un'eccezione in caso di dati non coerenti.
Capita che il front end lanci più volte contemporaneamente la funzione di
inserimento massivo in questa tabella e, da quello che ho capito, succede
questo:

   1. viene eseguita la funzione che inserisce i dati (transazione A)
   2. prima che termini la transazione A, viene eseguita una seconda volta
   la funzione che inserisce gli stessi dati (transazione B)
   3. la transazione B *non vede* i dati inseriti dalla transazione A (e
   viceversa), quindi per lei è tutto OK e non ha problemi ad inserire (e
   viceversa)
   4. le transazioni effettuano il commit ma i dati sono sporchi.

Per ovviare il problema per ora non ho trovato niente di meglio che mettere
un lock esclusivo sulla tabella a inizio funzione.

Che voi sappiate ci sono soluzioni migliori?
Se serve posso dare maggiori dettagli.
Grazie e buona giornata a tutti!
ciao
riki

Other related posts: