Bạn không thể sử dụng các tham số làm số nhận dạng (=tên cột), bạn cần SQL động cho điều đó. Và điều đó yêu cầu 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 () xử lý đúng cách với các số nhận dạng khi xây dựng SQL động. $1
là một trình giữ chỗ tham số và giá trị cho giá trị đó được chuyển với using p_id
mệnh đề của execute
tuyên bố.