Ik zou graag het antwoord van @robin-salih willen erkennen, ik heb het en de implementatie van min voor int gebruikt om de volgende code te bouwen:
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 (<)
);
Het is bijna hetzelfde, maar profiteert van de B-tree-index, dus select min(id) from tbl
werkt in een paar milliliter.
P.S. Ik ben geen pgsql-expert, misschien is mijn code op de een of andere manier verkeerd, controleer het voor gebruik in productie, maar ik hoop dat het indexen en parallelle uitvoering correct gebruikt. Ik heb het alleen gemaakt van voorbeeldcode, niet in de theorie achter aggregaten in PG.