<br><font size=2 face="sans-serif">Hi community,</font>
<br>
<br><font size=2 face="sans-serif">I would like using savepoints in my
stored functions but I always get the error</font>
<br>
<br><font size=2 face="sans-serif"><b><i>ERROR: SPI_execute_plan
failed executing query "SAVEPOINT my_savepoint": SPI_ERROR_TRANSACTION</i></b></font>
<br><font size=2 face="sans-serif"><b><i>CONTEXT: PL/pgSQL function
"savepoint_test" line 3 at SQL statement</i></b></font>
<br>
<br><font size=2 face="sans-serif">My test function can be found below.
I would be very grateful for any hint which brings progress to my developments
...</font>
<br>
<br><font size=2 face="sans-serif">-- create table</font>
<br><font size=2 face="sans-serif">CREATE TABLE testtable</font>
<br><font size=2 face="sans-serif">(</font>
<br><font size=2 face="sans-serif"> name varchar(256),</font>
<br><font size=2 face="sans-serif"> number int4 DEFAULT 1,</font>
<br><font size=2 face="sans-serif"> id varchar(64) NOT NULL,</font>
<br><font size=2 face="sans-serif"> CONSTRAINT pk_id PRIMARY KEY
(id)</font>
<br><font size=2 face="sans-serif">) </font>
<br><font size=2 face="sans-serif">WITHOUT OIDS;</font>
<br><font size=2 face="sans-serif">ALTER TABLE testtable OWNER TO postgres;</font>
<br>
<br><font size=2 face="sans-serif">-- insert dummy record</font>
<br><font size=2 face="sans-serif">insert into testtable (id,number) values
('id_1', 1);</font>
<br>
<br><font size=2 face="sans-serif">-- create test function</font>
<br><font size=2 face="sans-serif">CREATE OR REPLACE FUNCTION savepoint_test</font>
<br><font size=2 face="sans-serif">(</font>
<br><font size=2 face="sans-serif">
in_no integer, </font>
<br><font size=2 face="sans-serif">
in_name varchar,</font>
<br><font size=2 face="sans-serif">
in_id varchar</font>
<br><font size=2 face="sans-serif">) RETURNS void</font>
<br><font size=2 face="sans-serif">AS $$</font>
<br><font size=2 face="sans-serif">BEGIN</font>
<br><font size=2 face="sans-serif"> BEGIN</font>
<br><font size=2 face="sans-serif">
SAVEPOINT my_savepoint;</font>
<br><font size=2 face="sans-serif">
DELETE FROM testtable WHERE number = in_no;</font>
<br><font size=2 face="sans-serif">
insert into testtable (id,number) values ('id_2',
2);</font>
<br><font size=2 face="sans-serif">--
COMMIT;</font>
<br><font size=2 face="sans-serif">
RELEASE SAVEPOINT my_savepoint;</font>
<br><font size=2 face="sans-serif"> EXCEPTION</font>
<br><font size=2 face="sans-serif">
WHEN unique_violation THEN</font>
<br><font size=2 face="sans-serif">
ROLLBACK TO my_savepoint;</font>
<br><font size=2 face="sans-serif"> END;</font>
<br><font size=2 face="sans-serif">END</font>
<br><font size=2 face="sans-serif">$$ LANGUAGE plpgsql;</font>
<br>
<br><font size=2 face="sans-serif">-- call test function</font>
<br><font size=2 face="sans-serif">select * from savepoint_test(1, CAST('test-1'
AS VARCHAR), CAST('id_1' AS VARCHAR));</font>
<br>
<br>
<br><font size=2 face="sans-serif">regards,</font>
<br>
<br><font size=2 face="sans-serif">frank</font>
<br>
<br>