sql >> Base de Datos >  >> RDS >> PostgreSQL

Llamar a la función o procedimiento almacenado no insertará ni conservará los cambios

Este caso de uso particular se destaca en "Comprender la confirmación automática":

El control total del comportamiento de "compromiso automático" está disponible mediante el Connection.execution_options() generativo método proporcionado en Connection , Engine , Executable , usando el indicador de "autocommit" que activará o desactivará la autocommit para el alcance seleccionado. Por ejemplo, un text() construcción que representa un procedimiento almacenado que confirma podría usarlo para que una declaración SELECT emita un COMMIT:

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

La forma en que la confirmación automática de SQLAlchemy detecta las operaciones de cambio de datos es que compara la declaración con un patrón, buscando cosas como ACTUALIZAR, ELIMINAR y similares. Es imposible que detecte si una función/procedimiento almacenado realiza mutaciones, por lo que se proporciona un control explícito sobre la confirmación automática.

La secuencia se incrementa incluso en caso de falla porque nextval() y setval() las llamadas nunca se revierten.