sql >> Databasteknik >  >> RDS >> PostgreSQL

Att anropa lagrad funktion eller procedur kommer inte att infogas och kvarstår ändringar

Detta specifika användningsfall pekas ut i "Understanding Autocommit":

Full kontroll över "autocommit"-beteendet är tillgängligt med den generativa Connection.execution_options() metod som tillhandahålls på Connection , Engine , Executable , med "autocommit"-flaggan som slår på eller av autocommit för det valda omfånget. Till exempel en text() konstruktion som representerar en lagrad procedur som commits kan använda den så att en SELECT-sats kommer att utfärda en COMMIT:

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

Sättet som SQLAlchemy autocommit upptäcker dataändringsoperationer är att det matchar uttalandet mot ett mönster, letar efter saker som UPPDATERA, DELETE och liknande. Det är omöjligt för den att upptäcka om en lagrad funktion/procedur utför mutationer, och därför tillhandahålls explicit kontroll över autocommit.

Sekvensen ökas även vid misslyckande eftersom nextval() och setval() samtal återställs aldrig.




  1. Distribuera ett mycket tillgängligt Nextcloud med MySQL Galera Cluster och GlusterFS

  2. FEL 1148:Det använda kommandot är inte tillåtet med denna MySQL-version

  3. Hur man installerar SQL Server på Red Hat 8

  4. Lista alla temporära tabeller i SQLite