Re: rollback in C functions

Поиск
Список
Период
Сортировка
От Juan Pablo L
Тема Re: rollback in C functions
Дата
Msg-id CABSYDaYVD2sMat_fFzPq1064b-=QbYKbKOFOJF9pYHT82Kc3cg@mail.gmail.com
обсуждение исходный текст
Ответ на Re: rollback in C functions  (Juan Pablo L <jpablolorenzetti@gmail.com>)
Список pgsql-general
Just an update, it was making a mistake, the execution of PQexecute, to execute the query, was wrapped in a function called "PGresult *db_execute(....)" that was returning the PGresult as NULL, i completely forgot this, inside that function the exception was being caught and discarded so by the time i got the PGresult pointer back in the caller it contained nothing so trying to read any error from it at that point was useless.

Just to clarify and for future reference, the proposal to use ereport worked perfectly as proposed by the all members.

thank you very much!!  

On 19 February 2015 at 16:42, Juan Pablo L <jpablolorenzetti@gmail.com> wrote:
i tried this but the call to PQresultErrorField(PGresult, PG_DIAG_SQLSTATE) is returning NULL, this is what trigger the exception in the function code:

ereport(ERROR,(errcode(ERRCODE_SQL_ROUTINE_EXCEPTION),errmsg("Plan with id %s does not allow balance with id %s",plan_id,in_balanceid)));

and this is the caller code:

if(PQresultStatus(pg_res) == PGRES_FATAL_ERROR)
    {
        char *t = PQresultErrorField(pg_res,PG_DIAG_SQLSTATE);
        log_debug("[C%03dH%03d] PQres returned NULL: %s",handler->my_connection->id,handler->id,t);
     }

the  above call log_debug show that t is NULL. am i doing something wrong ? thanks!

On 19 February 2015 at 16:27, Juan Pablo L <jpablolorenzetti@gmail.com> wrote:
Thank you, i will try this, honestly i was checking if PGResult is NULL, when i trigger the exception i always get NULL so i did not any further but i will try this .....

On 19 February 2015 at 16:22, John R Pierce <pierce@hogranch.com> wrote:
On 2/19/2015 2:02 PM, Juan Pablo L wrote:
Thank you Alvaro, i m afraid ereport seems to be the way, that it is complicated to catch this error code in the code of the caller. cause you have to use a callback etc etc

a query that triggers ereport(ERROR,....) should return a PGresult* that you pass to PQresultStatus(), which should indicate PGRES_FATAL_ERROR, so you then call PQresultErrorField(PGresult, PG_DIAG_SQLSTATE) to get back the SQLSTATE code.



--
john r pierce                                      37N 122W
somewhere on the middle of the left coast



--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general



В списке pgsql-general по дате отправления:

Предыдущее
От: sridhar bamandlapally
Дата:
Сообщение: Oracle to PostgreSQL migration
Следующее
От: Melvin Davidson
Дата:
Сообщение: Re: PL/PgSQL and pg_temp pseudo-schema