sql >> Base de Datos >  >> RDS >> PostgreSQL

consulta sql dinámica en postgres

EXECUTE ... USING solo funciona en PL/PgSQL, es decir, dentro de funciones o DO bloques escritos en lenguaje PL/PgSQL. No funciona en SQL simple; el EXECUTE en SQL simple es completamente diferente, para ejecutar declaraciones preparadas. No puede usar SQL dinámico directamente en el dialecto SQL de PostgreSQL.

Comparar:

  • PL/PgSQL EXECUTE ... USING; a
  • EXECUTE de SQL

Ver el segundo último par en mi respuesta anterior.

Además de no ejecutarse excepto en PL/PgSQL, su instrucción SQL es incorrecta, no hará lo que espera. Si (select id from ids where condition = some_condition) devuelve decir 42 , la declaración fallaría si id es un número entero. Si se transmite a texto, obtendrás:

EXECUTE format('SELECT * from result_%s_table', quote_ident('42'));
EXECUTE format('SELECT * from result_%s_table', '"42"');
EXECUTE 'SELECT * from result_"42"_table';

Eso no es válido. En realidad quieres result_42_table o "result_42_table" . Tendrías que escribir algo más como:

EXECUTE format('SELECT * from %s', quote_ident('result_'||(select id from ids where condition = some_condition)||'_table'))

... si debe usar quote_ident .