WITH HOLD Cursor

Bisher haben Sie Cursor gesehen, die nur innerhalb einer Transaktion leben. Es gibt in PostgreSQL allerdings auch die Möglichkeit, Cursor über Transaktionsgrenzen hinweg am Leben zu halten. Um das zu bewerkstelligen, müssen Sie einen Cursor als WITH HOLD definieren:

test=# BEGIN;
BEGIN
test=# DECLARE mycursor CURSOR WITH HOLD FOR SELECT * FROM t_passwd;
DECLARE CURSOR
test=# FETCH NEXT FROM mycursor;
 account | passwd | uid | gid | gecos | directory |   shell
---------+--------+-----+-----+-------+-----------+-----------
 root    | x      |   0 |   0 | root  | /root     | /bin/bash
(1 row)

Obwohl wir ein COMMIT machen, ist der Cursor noch am Leben:

test=# COMMIT;
COMMIT
test=# FETCH NEXT FROM mycursor;
 account | passwd | uid | gid | gecos | directory |     shell
---------+--------+-----+-----+-------+-----------+---------------
 bin     | x      |   1 |   1 | bin   | /bin      | /sbin/nologin
(1 row)

test=# CLOSE mycursor;
CLOSE CURSOR

Das explizite Schließen des Cursors ist vor allem für das Cleanup von entscheidender Bedeutung.




Cybertec Schönig & Schönig GmbH
PostgreSQL support, training, consulting
www.postgresql-support.de