PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

consulta sql dinâmica no postgres


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 .