EXECUTE ... USING só funciona em PL/PgSQL - ou seja, dentro de funções ou DO blocos escritos na linguagem PL/PgSQL. Não funciona em SQL simples; o EXECUTE em SQL simples é completamente diferente, para executar instruções preparadas. Você não pode usar SQL dinâmico diretamente no dialeto SQL do PostgreSQL. Comparar:
- PL/PgSQL's
EXECUTE ... USING; para - SQL's
EXECUTE
Veja o 2º último par na minha resposta anterior.
Além de não rodar exceto em PL/PgSQL sua instrução SQL está errada, ela não fará o que você espera. Se
(select id from ids where condition = some_condition) retorna, digamos, 42 , a instrução falharia se id é um número inteiro. Se for convertido em texto, você obterá:EXECUTE format('SELECT * from result_%s_table', quote_ident('42'));
EXECUTE format('SELECT * from result_%s_table', '"42"');
EXECUTE 'SELECT * from result_"42"_table';
Isso é inválido. Você realmente quer
result_42_table ou "result_42_table" . Você teria que escrever algo mais como:EXECUTE format('SELECT * from %s', quote_ident('result_'||(select id from ids where condition = some_condition)||'_table'))
... se você deve usar
quote_ident .