Markus Wagner wrote:
> Hi,
>
> if I do a SELECT on a non-existing table, SPI_exec won't return.
> I get, e. g. in pgaccess, an error message "<table> does not exist",
> and my code below the function call is never reached.
Right, the SPI_exec() call in turn calls the PostgreSQL parser and that raises an elog(ERROR) which
longjmp()'s back into the backends main loop waiting for the next client query.
>
> So why return error codes for SPI_exec when you cannot evaluate them?
What do you want here? No error, just an empty result of unspecified format? If the parser cannot
determine(due to nonexistance of a table) which datatype the columns of the result set at least should have,
whatelse could he do than trowing an ERROR?
>
> The background:
>
> I need to distinguish different client connections within a trigger
> function.
> To do this, I create a temporary table within a "login" function.
> My trigger must check for the existence of this function.
> I cannot think of any other method, since there is no "connection id" or
> something like that!
Unfortunately PL/pgSQL doesn't have global variables. PL/Tcl can have. If you cannot code a part of the login
mechanism in PL/Tcl, setting a global variable and returning that in another PL/Tcl function, you could create
atemp table with the same name in every connection and fill the connection-ID into that.
Jan
--
#======================================================================#
# It's easier to get forgiveness for being wrong than for being right. #
# Let's break this rule - forgive me. #
#================================================== JanWieck@Yahoo.com #
_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com