PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

L'appel d'une fonction ou d'une procédure stockée n'insérera pas et ne conservera pas les modifications

Ce cas d'utilisation particulier est mis en évidence dans "Comprendre Autocommit" :

Le contrôle total du comportement "autocommit" est disponible en utilisant le générateur Connection.execution_options() méthode fournie sur Connection , Engine , Executable , en utilisant le drapeau "autocommit" qui activera ou désactivera l'autocommit pour la portée sélectionnée. Par exemple, un text() construction représentant une procédure stockée qui s'engage peut l'utiliser pour qu'une instruction SELECT émette un COMMIT :

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

La façon dont SQLAlchemy autocommit détecte les opérations de modification de données est qu'il compare l'instruction à un modèle, en recherchant des éléments tels que UPDATE, DELETE, etc. Il lui est impossible de détecter si une fonction/procédure stockée effectue des mutations, et un contrôle explicite sur la validation automatique est donc fourni.

La séquence est incrémentée même en cas d'échec car nextval() et setval() les appels ne sont jamais annulés.