sql >> Database >  >> RDS >> PostgreSQL

Als u een opgeslagen functie of procedure aanroept, worden wijzigingen niet ingevoegd en behouden

Deze specifieke use case wordt uitgelicht in "Understanding Autocommit":

Volledige controle over het "autocommit"-gedrag is beschikbaar met behulp van de generatieve Connection.execution_options() methode geleverd op Connection , Engine , Executable , met behulp van de vlag "autocommit" die de autocommit voor het geselecteerde bereik in- of uitschakelt. Bijvoorbeeld een text() constructie die een opgeslagen procedure vertegenwoordigt die commits zou kunnen gebruiken, zodat een SELECT-instructie een COMMIT afgeeft:

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

De manier waarop SQLAlchemy automatisch gegevensveranderende bewerkingen detecteert, is dat het de instructie vergelijkt met een patroon, op zoek naar dingen als UPDATE, DELETE en dergelijke. Het is onmogelijk om te detecteren of een opgeslagen functie/procedure mutaties uitvoert, en dus wordt expliciete controle over autocommit geboden.

De reeks wordt zelfs bij een fout verhoogd, omdat nextval() en setval() oproepen worden nooit teruggedraaid.




  1. Hernoem het SA-account in SQL Server (T-SQL-voorbeeld)

  2. Creëer een unieke beperking met null-kolommen

  3. Wat is het verschil tussen =null en IS NULL?

  4. Kunt u profiteren van een aangepaste databasetoepassing?