CREATEPROCEDURE transaction_test1()
LANGUAGE pltcl AS $$ for {set i 0} {$i < 10} {incr i} {
spi_exec "INSERT INTO test1 (a) VALUES ($i)" if {$i % 2 == 0} { commit
} else {
rollback
}
}
$$;
CALL transaction_test1();
SELECT * FROM test1;
TRUNCATE test1;
-- not allowed in a function CREATE FUNCTION transaction_test2() RETURNS int
LANGUAGE pltcl AS $$ for {set i 0} {$i < 10} {incr i} {
spi_exec "INSERT INTO test1 (a) VALUES ($i)" if {$i % 2 == 0} { commit
} else {
rollback
}
} return1
$$;
SELECT transaction_test2();
SELECT * FROM test1;
-- also not allowed if procedure is called from a function CREATE FUNCTION transaction_test3() RETURNS int
LANGUAGE pltcl AS $$
spi_exec "CALL transaction_test1()" return1
$$;
CREATEPROCEDURE transaction_test4a()
LANGUAGE pltcl AS $$
spi_exec -array row "SELECT * FROM test2 ORDER BY x" {
spi_exec "INSERT INTO test1 (a) VALUES ($row(x))" commit
}
$$;
CALL transaction_test4a();
SELECT * FROM test1;
-- rollback inside cursor loop
TRUNCATE test1;
CREATEPROCEDURE transaction_test4b()
LANGUAGE pltcl AS $$
spi_exec -array row "SELECT * FROM test2 ORDER BY x" {
spi_exec "INSERT INTO test1 (a) VALUES ($row(x))"
rollback
}
$$;
CALL transaction_test4b();
SELECT * FROM test1;
-- check handling of an error during COMMIT CREATETABLE testpk (id intPRIMARYKEY); CREATETABLE testfk(f1 intREFERENCES testpk DEFERRABLE INITIALLY DEFERRED);
CREATEPROCEDURE transaction_testfk()
LANGUAGE pltcl AS $$
# this insert will fail during commit:
spi_exec "INSERT INTO testfk VALUES (0)" commit
elog WARNING "should not get here"
$$;
CALL transaction_testfk();
SELECT * FROM testpk; SELECT * FROM testfk;
CREATEORREPLACEPROCEDURE transaction_testfk()
LANGUAGE pltcl AS $$
# this insert will fail during commit:
spi_exec "INSERT INTO testfk VALUES (0)" if [catch {commit} msg] {
elog INFO $msg
}
# these inserts should work:
spi_exec "INSERT INTO testpk VALUES (1)"
spi_exec "INSERT INTO testfk VALUES (1)"
$$;
CALL transaction_testfk();
SELECT * FROM testpk; SELECT * FROM testfk;
DROPTABLE test1; DROPTABLE test2;
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.1 Sekunden
(vorverarbeitet am 2026-08-07)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.