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

Usando parâmetro como nome de coluna na função Postgres


Você não pode usar parâmetros como identificadores (=nome da coluna), você precisa de SQL dinâmico para isso. E isso requer 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() lida adequadamente com identificadores ao construir SQL dinâmico. O $1 é um espaço reservado de parâmetro e o valor para isso é passado com o using p_id cláusula do execute demonstração.