Re: Problem close curser after rollback

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Matthias Apitz <guru(at)unixarea(dot)de>
Cc: pgsql-general(at)lists(dot)postgresql(dot)org
Subject: Re: Problem close curser after rollback
Date: 2020-09-30 18:37:23
Message-ID: 891496.1601491043@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Matthias Apitz <guru(at)unixarea(dot)de> writes:
> El día miércoles, septiembre 30, 2020 a las 05:26:39p. m. +0200, Laurenz Albe escribió:
>> On Wed, 2020-09-30 at 13:32 +0000, Wiltsch,Sigrid wrote:
>>> What can I do so that the cursor is retained despite rollback?

>> You cannot start a transaction while you are reading a cursor; you probably
>> get a warning "there is already a transaction in progress".

> I think we will prepare the ten-liner in ESQL/C for further discussion.

I don't think you really need to: the point seems clear enough.

I don't especially like the idea you are suggesting though. The general
principle in SQL is that a rolled-back transaction should have no effect
after it's been rolled back. Allowing a cursor it creates to survive
the rollback would fly in the face of that principle.

Quite aside from that, there are technical issues. As a perhaps
egregious case, what if the cursor's output depends on objects that
will disappear in the rollback?

begin;
create type rainbow as enum ('red', 'green', 'blue');
create table r (f1 rainbow);
insert into r values ('red');
declare c cursor with hold for select * from r;
rollback;

fetch all from c;

Even if we surmount the implementation issues around holding onto the
bits emitted by the cursor, the FETCH is going to fail to return data
to the application, because it doesn't know how to interpret those bits
anymore.

So the short answer is you can't have that. Find another way to design
your application.

regards, tom lane

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Matthias Apitz 2020-09-30 19:06:13 Re: Problem close curser after rollback
Previous Message Maria Elba Salerno 2020-09-30 17:23:13 Procedure to install and configure pgadmin4 in desktop mode in Red Hat Linux 8 and other Linux distributions