Обсуждение: We have to close the cursor or rollback the transaction in case offailure?

Поиск
Список
Период
Сортировка

We have to close the cursor or rollback the transaction in case offailure?

От
M Tarkeshwar Rao
Дата:

Hi all,

 

I am using cursors to fetch the data from table using  C++. Initially were errors as highlighted  as “current transaction isaborted” in /var/logs during full vacuum.

 

We are little bit confused in failure handling. In case of any failure of following function.

PQexec(connection, myFetchSql)

 

We have to close the cursor or rollback the transaction?

 

postgres[10709]: [6-1] < 2019-10-29 11:24:22.550 CET > ERROR:  canceling statement due to conflict with recovery

postgres[10709]: [6-2] < 2019-10-29 11:24:22.550 CET > DETAIL:  User query might have needed to see row versions that must be removed.

postgres[10709]: [6-3] < 2019-10-29 11:24:22.550 CET > STATEMENT:  FETCH 1000 IN mycursor_3461662464_1572368715367985819

postgres[10709]: [7-1] < 2019-10-29 11:24:22.550 CET > ERROR:  current transaction is aborted, commands ignored until end of transaction block

postgres[10709]: [7-2] < 2019-10-29 11:24:22.550 CET > STATEMENT:  CLOSE mycursor_3461662464_1572368715367985819

O

 

 

Regards

Tarkeshwar

Re: We have to close the cursor or rollback the transaction in case of failure?

От
Tom Lane
Дата:
M Tarkeshwar Rao <m.tarkeshwar.rao@ericsson.com> writes:
> I am using cursors to fetch the data from table using  C++. Initially were errors as highlighted  as "current
transactionisaborted" in /var/logs during full vacuum. 
> We are little bit confused in failure handling. In case of any failure of following function.
> PQexec(connection, myFetchSql)
> We have to close the cursor or rollback the transaction?

Once the transaction has had an error, you have to issue ROLLBACK
before you can do anything else.  That will automatically close
any cursors opened in the current transaction.  There's no point
in issuing an explicit CLOSE (and indeed, if you try, it'll just
produce the same "current transaction is aborted" error).

            regards, tom lane