Ihre Funktion ergibt keinen Sinn, sie gibt nichts zurück. Es sieht aus wie eine ANSICHT, warum erstellen Sie also keine Ansicht?
Bearbeiten:Sie müssen die OUT-Parameter oder RETURN TABLE() mit den Parametern verwenden:
CREATE OR REPLACE FUNCTION my_func(OUT o_id INT, OUT o_bar TEXT)
RETURNS SETOF RECORD AS
$$
BEGIN
RETURN QUERY SELECT id, bar FROM foo;
END;
$$
LANGUAGE plpgsql;
SELECT * FROM my_func();