CREATE OR REPLACE FUNCTION get_gallery(GalleryId INTEGER) RETURNS SETOF record AS $$ DECLARE ft record; BEGIN IF GalleryId = 0 THEN FOR ft IN SELECT * FROM Galleries WHERE isDefault=true LOOP RETURN NEXT ft; END LOOP; RETURN; ELSE FOR ft IN SELECT * FROM Galleries WHERE Id=$1 LOOP RETURN NEXT ft; END LOOP; RETURN; END IF; END; $$ LANGUAGE "plpgsql"; select * from get_gallery(0) as (id int, isdefault bool);