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.