Hello, I find default values confusing when a function is overloaded, below is an example.
CREATE OR REPLACE FUNCTION default_test (a INT DEFAULT 1, b INT DEFAULT 1, C INT DEFAULT 1) RETURNS INT AS $$ BEGIN RETURN a+b+c; END; $$ LANGUAGE 'plpgsql'; CREATE OR REPLACE FUNCTION default_test (a INT DEFAULT 1, b INT DEFAULT 1) RETURNS INT AS $$ BEGIN RETURN a+b; END; $$ LANGUAGE 'plpgsql'; -- this will fail --SELECT default_test(1,3); --SELECT default_test(1); test=# \df default_test List of functions Schema | Name | Result data type | Argument data types | Type --------+--------------+------------------+---------------------------------------------------------------+-------- public | default_test | integer | a integer DEFAULT 1, b integer DEFAULT 1 | normal public | default_test | integer | a integer DEFAULT 1, b integer DEFAULT 1, c integer DEFAULT 1 | normal (2 rows) I think, there is a difference between optional parameters and default parameter values. So, my suggestion would be something like this. SELECT default_test(1,3, DEFAULT); -- match function number 1 SELECT default_test(1,3); -- match the function number 2 SELECT default_test(1); -- ERROR Regards