Thread: plpgsql, Exception handling: catching the message ?

plpgsql, Exception handling: catching the message ?

From
"Marc Mamin"
Date:
Hello,

In an exception block, we can check the error code.
Is there a way to get the message and possibly the detail too ?



ereport(ERROR, \
    (errcode(ERRCODE_SQLCLIENT_UNABLE_TO_ESTABLISH_SQLCONNECTION), \
=>     errmsg("could not establish connection"), \
=>     errdetail("%s", msg))); \



background:  (Version 8.3.12)
dblink seems to sometimes only provides information of the remote
exception in the message, with a misleading errcode:


    select * from dblink_send_query ('c', 'create table my_share4( a
int)');
    select * from dblink_get_result('c') as t1(f1 text);


    ERROR:  sql error
    DETAIL:  ERROR:  relation "my_share4" already exists

    ********** Error **********

    ERROR: sql error
    SQL state: 42601     (<= SYNTAX ERROR)
    Detail: ERROR:  relation "my_share4" already exists  (=>
DUPLICATE TABLE)



best regards,

Marc Mamin



Re: plpgsql, Exception handling: catching the message ?

From
Pavel Stehule
Date:
Hello

2010/11/18 Marc Mamin <M.Mamin@intershop.de>:
>
> Hello,
>
> In an exception block, we can check the error code.
> Is there a way to get the message and possibly the detail too ?
>

yes, but you need a 8.4 as minimum

http://www.postgresql.org/docs/8.4/interactive/plpgsql-errors-and-messages.html

Regards

Pavel Stehule

>
>
> ereport(ERROR, \
>        (errcode(ERRCODE_SQLCLIENT_UNABLE_TO_ESTABLISH_SQLCONNECTION), \
> =>       errmsg("could not establish connection"), \
> =>       errdetail("%s", msg))); \
>
>
>
> background:  (Version 8.3.12)
> dblink seems to sometimes only provides information of the remote
> exception in the message, with a misleading errcode:
>
>
>        select * from dblink_send_query ('c', 'create table my_share4( a
> int)');
>        select * from dblink_get_result('c') as t1(f1 text);
>
>
>        ERROR:  sql error
>        DETAIL:  ERROR:  relation "my_share4" already exists
>
>        ********** Error **********
>
>        ERROR: sql error
>        SQL state: 42601     (<= SYNTAX ERROR)
>        Detail: ERROR:  relation "my_share4" already exists  (=>
> DUPLICATE TABLE)
>
>
>
> best regards,
>
> Marc Mamin
>
>
>
> --
> Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-general
>