EXECUTE ... USING
funziona solo in PL/PgSQL, cioè all'interno di funzioni o DO
blocchi scritti nel linguaggio PL/PgSQL. Non funziona in semplice SQL; il EXECUTE
in chiaro SQL è completamente diverso, per l'esecuzione di istruzioni preparate. Non puoi usare l'SQL dinamico direttamente nel dialetto SQL di PostgreSQL.
Confronta:
-
EXECUTE ... USING
di PL/PgSQL; a EXECUTE
di SQL
Vedi il 2° ultimo par nella mia risposta precedente.
Oltre a non essere in esecuzione se non in PL/PgSQL, la tua istruzione SQL è sbagliata, non farà ciò che ti aspetti. Se (select id from ids where condition = some_condition)
restituisce dire 42
, l'istruzione fallirebbe se id
è un numero intero. Se viene trasmesso al messaggio di testo, otterrai:
EXECUTE format('SELECT * from result_%s_table', quote_ident('42'));
EXECUTE format('SELECT * from result_%s_table', '"42"');
EXECUTE 'SELECT * from result_"42"_table';
Non è valido. In realtà vuoi result_42_table
o "result_42_table"
. Dovresti scrivere qualcosa di più come:
EXECUTE format('SELECT * from %s', quote_ident('result_'||(select id from ids where condition = some_condition)||'_table'))
... se devi usare quote_ident
.