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@xxxxxxxxx> wrote:
the above call log_debug show that t is NULL. am i doing something wrong ? thanks!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:and this is the caller code:
ereport(ERROR,(errcode(ERRCODE_SQL_ROUTINE_EXCEPTION),errmsg("Plan with id %s does not allow balance with id %s",plan_id,in_balanceid)));
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);
}On 19 February 2015 at 16:27, Juan Pablo L <jpablolorenzetti@xxxxxxxxx> 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@xxxxxxxxxxxx> 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@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general