I am trying to create a function that takes a table and a variable number of columns as arguments, and then returns a table without rows that have duplicates on all of those columns. I am trying to figure out how to have a variable number of columns as arguments, and I have gathered that I will probably need a VARIADIC
argument, but I am not sure how to implement it. What I have so far:
CREATE FUNCTION remove_duplicates(orig_table, VARIADIC sel_columns column)
RETURNS table AS $$
SELECT * FROM
(SELECT *,
count(*) over (partition by sel_columns) AS count
FROM orig_table)
WHERE count = 1;
$$ LANGUAGE SQL;
As an example, if I had a table like this:
cola | colb | colc
-------------------
a | b | 1
a | b | 2
a | c | 3
a | d | 4
I would like to run SELECT * FROM remove_duplicates(mytable, cola, colb)
and get this result:
cola | colb | colc
-------------------
a | c | 3
a | d | 4
Thank you for the help. I'm using postgresql 9.4.9