PL/pgSQL EXECUTE '..' USING with unknown - Mailing list pgsql-hackers

From Heikki Linnakangas
Subject PL/pgSQL EXECUTE '..' USING with unknown
Date
Msg-id 4C5B2397.8000504@enterprisedb.com
Whole thread Raw
Responses Re: PL/pgSQL EXECUTE '..' USING with unknown  (Pavel Stehule <pavel.stehule@gmail.com>)
Re: PL/pgSQL EXECUTE '..' USING with unknown  (Tom Lane <tgl@sss.pgh.pa.us>)
Re: PL/pgSQL EXECUTE '..' USING with unknown  (Cédric Villemain <cedric.villemain.debian@gmail.com>)
List pgsql-hackers
There's a little problem with EXECUTE USING when the parameters are of 
type unknown (going back to 8.4 where EXECUTE USING was introduced):

do $$
BEGIN  EXECUTE 'SELECT to_date($1, $2)' USING '17-DEC-80', 'DD-MON-YY';
END;
$$;
ERROR:  failed to find conversion function from unknown to text
CONTEXT:  SQL statement "SELECT to_date($1, $2)"
PL/pgSQL function "inline_code_block" line 2 at EXECUTE statement

The corresponding case works fine when used with PREPARE/EXECUTE:

postgres=# PREPARE foostmt AS SELECT to_date($1, $2);
PREPARE
postgres=# EXECUTE foostmt ('17-DEC-80', 'DD-MON-YY');  to_date
------------ 1980-12-17
(1 row)

With PREPARE/EXECUTE, the query is analyzed with 
parse_analyze_varparams() which allows unknown param types to be deduced 
from the context. Seems we should use that for EXECUTE USING as well, 
but there's no SPI interface for that.

Thoughts? Should we add an SPI_prepare_varparams() function and use that?

--   Heikki Linnakangas  EnterpriseDB   http://www.enterprisedb.com


pgsql-hackers by date:

Previous
From: Josh Berkus
Date:
Subject: Re: Concurrent MERGE
Next
From: Pavel Stehule
Date:
Subject: Re: PL/pgSQL EXECUTE '..' USING with unknown