Обсуждение: cannot get error message after dblink_exec execution

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

cannot get error message after dblink_exec execution

От
"Sofer, Yuval"
Дата:

Hi,

 

I am using DBLink contrib module.

I cannot catch the dblink_exec error messages.

On the other hand, the pgadmin gui shows the error message under “DETAIL” section:

 

The test function :

 

CREATE OR REPLACE FUNCTION test_func1()                                   

RETURNS integer AS

$$

DECLARE

stmt text;

conn text;

err text ;

last_message text default 'aaa';

BEGIN

                      

          conn := 'dbname=postgres user=postgres password=manager';

          stmt := 'drop table not_existing_table';

         

          err := dblink_exec(conn, stmt,false);         

          last_message := dblink_error_message('dbname=postgres user=postgres password=manager') ;

          raise notice ' err is %',err; 

          raise notice ' last_message is %',last_message; 

          return 0;

 

END;

$$

LANGUAGE 'plpgsql' VOLATILE;

 

When I execute select test_func1(); I get the error message from the gui (table “not_existing table” does not exist):

 

NOTICE:  sql error

DETAIL:  ERROR:  table "not_existing_table" does not exist

 

CONTEXT:  PL/pgSQL function "test_func1" line 11 at assignment

NOTICE:   err is ERROR

NOTICE:   last_message is

 

Total query runtime: 100 ms.

1 rows retrieved.

 

My questions :

How can catch this error into the stored procedure parameter?

Am I not using dblink_error_message correctly?

I don’t mind retrieving the error message as the gui does, but how can I do it?

 

Thanks

Yuval

DBA team

BMC Software

 

 

 

Re: cannot get error message after dblink_exec execution

От
Joe Conway
Дата:
Sofer, Yuval wrote:
>           last_message := dblink_error_message('dbname=postgres
> user=postgres password=manager') ;


> Am I not using dblink_error_message correctly?

Yes, you are not using dblink_error_message correctly. From the docs:

==================================================================
Name

dblink_error_message -- gets last error message on the named connection

Synopsis

dblink_error_message(text connname) RETURNS text

Inputs

   connname
     The specific connection name to use.

Outputs

   Returns last error message.

Example usage

   SELECT dblink_error_message('dtest1');
==================================================================

It requires a named connection, you are trying to use an anonymous one.

HTH,

Joe