PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Parameter als Spaltennamen in der Postgres-Funktion verwenden

Sie können keine Parameter als Bezeichner (=Spaltennamen) verwenden, dafür benötigen Sie dynamisches SQL. Und das erfordert 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() geht beim Erstellen von dynamischem SQL richtig mit Bezeichnern um. Der $1 ist ein Parameterplatzhalter und der Wert dafür wird mit using p_id übergeben -Klausel von execute Aussage.