PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Chamar a função ou procedimento armazenado não inserirá e persistirá as alterações


Este caso de uso específico é destacado em "Entendendo o Autocommit":

O controle total do comportamento de “autocommit” está disponível usando o generativo Connection.execution_options() método fornecido em Connection , Engine , Executable , usando o sinalizador “autocommit” que ativará ou desativará o autocommit para o escopo selecionado. Por exemplo, um text() A construção que representa um procedimento armazenado que confirma pode usá-lo para que uma instrução SELECT emita um COMMIT:
engine.execute(text("SELECT my_mutating_procedure()").execution_options(autocommit=True))

A maneira como o SQLAlchemy autocommit detecta as operações de alteração de dados é que ele corresponde à instrução com um padrão, procurando por coisas como UPDATE, DELETE e similares. É impossível detectar se uma função/procedimento armazenado executa mutações e, portanto, é fornecido um controle explícito sobre o autocommit.

A sequência é incrementada mesmo em caso de falha porque nextval() e setval() chamadas nunca são revertidas.