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 ... USINGdi PL/PgSQL; a EXECUTEdi 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 .