Hi, Just noted an interesting behaviour when using a cursor in a function in an UPDATE RETURNING (note that INSERT RETURNING has no problem).
I have seen this problem in all versions I tested (9.4 thru master). Steps to reproduce: prepare the test ``` create table t1 as select random() * foo i from generate_series(1, 100) foo; create table t2 as select random() * foo i from generate_series(1, 100) foo; CREATE OR REPLACE FUNCTION cursor_bug() RETURNS integer LANGUAGE plpgsql AS $function$ declare c1 cursor (p1 int) for select count(*) from t1 where i = p1; n int4; begin open c1 (77); fetch c1 into n; return n; end $function$ ; ``` -- this ends fine insert into t2 values(5) returning cursor_bug() as c1; c1 ---- 0 (1 row) -- this fails update t2 set i = 5 returning cursor_bug() as c1; ERROR: cursor "c1" already in use CONTEXT: PL/pgSQL function cursor_bug() line 6 at OPEN -- Jaime Casanova Director de Servicios Profesionales SYSTEMGUARDS - Consultores de PostgreSQL