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

Usando el parámetro como nombre de columna en la función de Postgres

No puede usar parámetros como identificadores (=nombre de columna), necesita SQL dinámico para eso. Y eso requiere PL/pgSQL:

CREATE OR REPLACE FUNCTION day_entries(p_id int, p_column text) 
  RETURNS BIGINT[] 
AS
$$
declare 
  l_result bigint[];
begin
  execute format('SELECT %I FROM days WHERE id = $1', p_column) 
     using p_id
     into l_result;
  return l_result;
end;     
$$
LANGUAGE plpgsql;

format() trata correctamente los identificadores al crear SQL dinámico. El $1 es un marcador de posición de parámetro y el valor para eso se pasa con using p_id cláusula del execute declaración.