EXECUTE ... USING
solo funciona en PL/PgSQL, es decir, dentro de funciones o DO
bloques escritos en lenguaje PL/PgSQL. No funciona en SQL simple; el EXECUTE
en SQL simple es completamente diferente, para ejecutar declaraciones preparadas. No puede usar SQL dinámico directamente en el dialecto SQL de PostgreSQL.
Comparar:
- PL/PgSQL
EXECUTE ... USING
; a EXECUTE
de SQL
Ver el segundo último par en mi respuesta anterior.
Además de no ejecutarse excepto en PL/PgSQL, su instrucción SQL es incorrecta, no hará lo que espera. Si (select id from ids where condition = some_condition)
devuelve decir 42
, la declaración fallaría si id
es un número entero. Si se transmite a texto, obtendrás:
EXECUTE format('SELECT * from result_%s_table', quote_ident('42'));
EXECUTE format('SELECT * from result_%s_table', '"42"');
EXECUTE 'SELECT * from result_"42"_table';
Eso no es válido. En realidad quieres result_42_table
o "result_42_table"
. Tendrías que escribir algo más como:
EXECUTE format('SELECT * from %s', quote_ident('result_'||(select id from ids where condition = some_condition)||'_table'))
... si debe usar quote_ident
.