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
.