Argumento opcional na função PL / pgSQL
Eu estou tentando escrever uma função PL / pgSQL com argumentos opcionais. Ele realiza uma consulta com base em um conjunto filtrado de registros (se especificado), caso contrário, executa uma consulta em todo o conjunto de dados em uma tabela.
Por exemplo(PSEUDO-CÓDIGO):
CREATE OR REPLACE FUNCTION foofunc(param1 integer, param2 date, param2 date, optional_list_of_ids=[]) RETURNS SETOF RECORD AS $
IF len(optional_list_of_ids) > 0 THEN
RETURN QUERY (SELECT * from foobar where f1=param1 AND f2=param2 AND id in optional_list_of_ids);
ELSE
RETURN QUERY (SELECT * from foobar where f1=param1 AND f2=param2);
ENDIF
$ LANGUAGE SQL;
Qual seria a maneira correta de implementar essa função?
Como um aparte, gostaria de saber como eu poderia chamar tal função em outra função externa. É assim que eu faria - está correto ou há uma maneira melhor?
CREATE FUNCTION foofuncwrapper(param1 integer, param2 date, param2 date) RETURNS SETOF RECORD AS $
BEGIN
CREATE TABLE ids AS SELECT id from foobar where id < 100;
RETURN QUERY (SELECT * FROM foofunc(param1, param2, ids));
END
$ LANGUAGE SQL