パラメータを識別子(=列名)として使用することはできません。そのためには動的SQLが必要です。そして、それには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()は、動的SQLを構築するときに識別子を適切に処理します。 $1
はパラメータプレースホルダーであり、その値はusing p_id
で渡されます execute
の句 ステートメント。