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

Er PostgreSQL-funktioner transaktionelle?

PostgreSQL 12-opdatering :der er begrænset understøttelse af PROCEDURE på øverste niveau s, der kan udføre transaktionskontrol. Du kan stadig ikke administrere transaktioner i almindelige SQL-kaldbare funktioner, så nedenstående forbliver sandt, undtagen når du bruger de nye procedurer på øverste niveau.

Funktioner er en del af den transaktion, de kaldes fra. Deres virkninger rulles tilbage, hvis transaktionen ruller tilbage. Deres arbejde forpligter, hvis transaktionen forpligter. Enhver BEGIN ... EXCEPT blokke i funktionen fungerer som (og under emhætten brug) sparepunkter som SAVEPOINT og ROLLBACK TO SAVEPOINT SQL-sætninger.

Funktionen lykkes enten i sin helhed eller fejler i sin helhed, med spærring af BEGIN ... EXCEPT fejlhåndtering. Hvis en fejl opstår i funktionen og ikke håndteres, afbrydes transaktionen, der kalder funktionen. Afbrudte transaktioner kan ikke commit, og hvis de forsøger at begå COMMIT behandles som ROLLBACK , samme som for enhver anden fejlagtig transaktion. Bemærk:

regress=# BEGIN;
BEGIN
regress=# SELECT 1/0;
ERROR:  division by zero
regress=# COMMIT;
ROLLBACK

Se hvordan transaktionen, som er i fejltilstanden på grund af nuldelingen, ruller tilbage på COMMIT ?

Hvis du kalder en funktion uden en eksplicit omgivende transaktion, er reglerne nøjagtig de samme som for enhver anden Pg-sætning:

BEGIN;
SELECT refresh_materialized_view(name);
COMMIT;

(hvor COMMIT mislykkes, hvis SELECT rejste en fejl).

PostgreSQL understøtter (endnu) ikke autonome transaktioner i funktioner, hvor proceduren/funktionen kunne commite/rulle tilbage uafhængigt af den kaldende transaktion. Dette kan simuleres ved hjælp af en ny session via dblink.

MEN , ting, der ikke er transaktionelle eller er ufuldkommen transaktionelle, findes i PostgreSQL. Hvis den har ikke-transaktionel adfærd i en normal BEGIN; do stuff; COMMIT; blok, har den også ikke-transaktionel adfærd i en funktion. For eksempel nextval og setval , TRUNCATE osv.



  1. Opret en midlertidig tabel i SQLite

  2. Hvordan STRCMP() virker i MariaDB

  3. SQL Server Resumable Index:Er det godt for dig?

  4. Implementering af Switchover/Switchback i PostgreSQL 9.3.