PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

La chiamata della funzione o della procedura memorizzata non inserirà e persisterà le modifiche

Questo particolare caso d'uso è individuato in "Capire l'Autocommit":

Il controllo completo del comportamento di "autocommit" è disponibile utilizzando il generativo Connection.execution_options() metodo fornito su Connection , Engine , Executable , utilizzando il flag "autocommit" che attiva o disattiva l'autocommit per l'ambito selezionato. Ad esempio, un text() il costrutto che rappresenta una procedura memorizzata che esegue il commit potrebbe utilizzarlo in modo che un'istruzione SELECT emetta un COMMIT:

engine.execute(text("SELECT my_mutating_procedure()").execution_options(autocommit=True))

Il modo in cui SQLAlchemy autocommit rileva le operazioni di modifica dei dati è che confronta l'istruzione con un modello, cercando cose come UPDATE, DELETE e simili. È impossibile che rilevi se una funzione/procedura memorizzata esegue mutazioni, quindi viene fornito un controllo esplicito sull'autocommit.

La sequenza viene incrementata anche in caso di errore perché nextval() e setval() le chiamate non vengono mai annullate.