Puoi farlo in casa prendendo un LOCK
su un tavolo, impostando le transazioni, quindi rilasciando il blocco eseguendo il rollback della transazione che ha ottenuto il blocco. Vedi questa risposta precedente
e i relativi collegamenti per i dettagli su questo approccio. Mentre l'ho dimostrato usando tre psql
sessioni è ugualmente possibile farlo con i co-processi bash, uno script Python che utilizza psycopg2
e il multiprocessing
o threading
moduli, ecc. Abbastanza semplice da fare. Aggiorna :Infatti ecco un esempio che ho appena scritto in python3 .
Per test più sofisticati, prendi il codice sorgente di PostgreSQL e usa lo strumento "isolationtester" in src/test/isolation
che ti consente di scrivere ricette che eseguono ordinamenti complessi di comandi. Non supporta la compilazione con PGXS
(sebbene tale supporto sarebbe probabilmente piuttosto banale da aggiungere) quindi devi compilare l'intero albero dei sorgenti di PostgreSQL, ma è abbastanza veloce. Verrà eseguito sul tuo PostgreSQL esistente, quindi non è necessario installare quello che hai compilato.
Vedi src/test/isolation/README
per ulteriori informazioni sullo strumento Isolationtester. I documenti sono un po' scarsi sul campo poiché si tratta di uno strumento di test interno, ma i casi di test esistenti dovrebbero aiutarti a iniziare. Sentiti libero di migliorarlo per soddisfare le tue esigenze e inviare le patch :)