Me gustaría dar crédito a la respuesta de @robin-salih, la he usado y la implementación de min para int, para construir el siguiente código:
CREATE OR REPLACE FUNCTION min(uuid, uuid)
RETURNS uuid AS $$
BEGIN
IF $2 IS NULL OR $1 > $2 THEN
RETURN $2;
END IF;
RETURN $1;
END;
$$ LANGUAGE plpgsql;
create aggregate min(uuid) (
sfunc = min,
stype = uuid,
combinefunc = min,
parallel = safe,
sortop = operator (<)
);
Es casi lo mismo, pero aprovecha el índice B-tree, así que select min(id) from tbl
funciona en unos pocos milis.
PD No soy un experto en pgsql, tal vez mi código esté mal de alguna manera, verifique dos veces antes de usarlo en producción, pero espero que use índices y ejecución paralela correctamente. Lo hice solo a partir de un código de muestra, sin profundizar en la teoría detrás de los agregados en PG.