Is it possible to create a function like this:
CREATE FUNCTION Testing(p_1 INTEGER DEFAULT NULL, p_2 INTEGER DEFAULT NULL, p_3 DATE DEFAULT current_date)
RETURNS TABLE
(
column_a INTEGER,
column_b INTEGER,
column_c INTEGER,
column_d DATE
)
LANGUAGE plpgsql
AS
$f$
BEGIN
RETURN QUERY
SELECT column_a, column_b, column_c, column_d
FROM table_test
WHERE column_d <= p_3
AND CASE WHEN NOT p_1 IS NULL THEN column_a = p_1 ELSE TRUE END
AND CASE WHEN NOT p_2 IS NULL THEN column_b = p_2 ELSE TRUE END;
END;
$f$;
And then call it specifying the parameter name, like:
SELECT * FROM Testing(p_2 = 23)
(If I try that, for instance, PostgreSQL returns "column "p_2" does not exist")