EXECUTE ... USING работи само в PL/PgSQL - т.е. в рамките на функции или DO блокове, написани на езика PL/PgSQL. Не работи в обикновен SQL; EXECUTE в обикновен SQL е напълно различен за изпълнение на подготвени оператори. Не можете да използвате динамичен SQL директно в SQL диалекта на PostgreSQL.
Сравнете:
- PL/PgSQL
EXECUTE ... USING; до EXECUTEна SQL
Вижте 2-ри последен параграф в предишния ми отговор.
Освен че не работи освен в PL/PgSQL, вашият SQL израз е грешен, той няма да направи това, което очаквате. Ако (select id from ids where condition = some_condition) връща, кажете 42 , изразът ще се провали, ако id е цяло число. Ако е прехвърлен към текст, ще получите:
EXECUTE format('SELECT * from result_%s_table', quote_ident('42'));
EXECUTE format('SELECT * from result_%s_table', '"42"');
EXECUTE 'SELECT * from result_"42"_table';
Това е невалидно. Всъщност искате result_42_table или "result_42_table" . Трябва да напишете нещо повече като:
EXECUTE format('SELECT * from %s', quote_ident('result_'||(select id from ids where condition = some_condition)||'_table'))
... ако трябва да използвате quote_ident .