Je kunt geen parameters gebruiken als identifiers (=kolomnaam), daar heb je dynamische SQL voor nodig. En dat vereist 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() gaat op de juiste manier om met id's bij het bouwen van dynamische SQL. De $1
is een tijdelijke aanduiding voor een parameter en de waarde daarvoor wordt doorgegeven met de using p_id
clausule van de execute
verklaring.