Search Postgresql Archives

Re: Problem close curser after rollback

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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:
> > we use the following statements in our applications, as described on the site: 
> > 
> > https://www.postgresql.org/docs/11/ecpg-commands.html#ECPG-TRANSACTIONS
> > 
> > EXEC SQL PREPARE stmt1 FROM "SELECT oid,datname FROM pg_database WHERE oid > ?";
> > EXEC SQL DECLARE foo_bar CURSOR FOR stmt1;
> > 
> > /* when end of result set reached, break out of while loop */
> > EXEC SQL WHENEVER NOT FOUND DO BREAK;
> > 
> > EXEC SQL OPEN foo_bar USING 100;
> > ...
> > while (1)
> > {
> >     EXEC SQL FETCH NEXT FROM foo_bar INTO :dboid, :dbname;
> >     ...
> > }
> > 
> > EXEC SQL CLOSE foo_bar;
> > 
> > After every fetch we open a transaction which is terminated with a rollback in the event of an error.
> > 
> > The problem we now have with this is,  that the cursor is obviously closed with the rollback,
> >  so the next fetch ends with the error that the cursor no longer exists (sqlcode -400
> > 
> > What can I do so that the cursor is retained despite rollback?
> > 
> > The procedure described is very often found in our applications, which have been ported from sybase to postgreSQL.
> 
> You cannot start a transaction while you are reading a cursor; you probably
> get a warning "there is already a transaction in progress".

Sigrid was not fully correct saying 'After every fetch we open a transaction...'

Our layer between application and ESQL/C has a function call DB_strT()
to start a transaction. But this does nothing for PostgreSQL because in
PostgreSQL' ESQL/C there is no method "START TRANSACTION", see

https://www.postgresql.org/docs/11/ecpg-commands.html#ECPG-TRANSACTIONS

There are only COMMIT and ROLLBACK.

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

	matthias


-- 
Matthias Apitz, ✉ guru@xxxxxxxxxxx, http://www.unixarea.de/ +49-176-38902045
Public GnuPG key: http://www.unixarea.de/key.pub
Без книги нет знания, без знания нет коммунизма (Влaдимир Ильич Ленин)
Without books no knowledge - without knowledge no communism (Vladimir Ilyich Lenin)
Sin libros no hay saber - sin saber no hay comunismo. (Vladimir Ilich Lenin)





[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]

  Powered by Linux