Jeg vil gerne kreditere @robin-salihs svar, jeg har brugt det og implementering af min for int, til at bygge følgende kode:
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 (<)
);
Det er næsten det samme, men udnytter fordelene ved B-træindeks, så select min(id) from tbl
virker på få millis.
P.S. Jeg er ikke pgsql-ekspert, måske er min kode på en eller anden måde forkert, dobbelttjek før brug i produktionen, men jeg håber, den bruger indekser og parallel udførelse korrekt. Jeg har kun lavet det ud fra eksempelkode, ikke gravet i teorien bag aggregater i PG.