sql >> Database teknologi >  >> RDS >> PostgreSQL

Kaldning af lagret funktion eller procedure vil ikke indsætte og fortsætte ændringer

Denne særlige use case er fremhævet i "Forstå Autocommit":

Fuld kontrol over "autocommit"-adfærden er tilgængelig ved at bruge den generative Connection.execution_options() metode tilvejebragt på Connection , Engine , Executable , ved hjælp af "autocommit"-flaget, som vil tænde eller slukke for autocommit for det valgte omfang. For eksempel en text() konstruktion, der repræsenterer en lagret procedure, der begår, kan bruge den, så en SELECT-sætning vil udstede en COMMIT:

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

Den måde, SQLAlchemy autocommit registrerer dataændringsoperationer på, er, at den matcher sætningen mod et mønster og leder efter ting som UPDATE, DELETE og lignende. Det er umuligt for den at detektere, om en lagret funktion/procedure udfører mutationer, og derfor er der eksplicit kontrol over autocommit.

Sekvensen øges selv ved fejl, fordi nextval() og setval() opkald bliver aldrig rullet tilbage.




  1. Vis SQLite-data i RecyclerView

  2. DROP TABEL HVIS FINNES i SQLite

  3. Svarende til strftime i Postgres

  4. Hvordan ser man CREATE VIEW-koden for en visning i PostgreSQL?