PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Utilisation du paramètre comme nom de colonne dans la fonction Postgres

Vous ne pouvez pas utiliser de paramètres comme identifiants (=nom de colonne), vous avez besoin de SQL dynamique pour cela. Et cela nécessite 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() gère correctement les identifiants lors de la construction de SQL dynamique. Le $1 est un espace réservé de paramètre et la valeur de celui-ci est transmise avec le using p_id clause de execute déclaration.