Rád bych připsal odpověď @robin-salih, použil jsem ji a implementaci min pro int k vytvoření následujícího kódu:
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 (<)
);
Je to téměř stejné, ale využívá výhody indexu B-stromu, takže select min(id) from tbl
funguje za několik milis.
P.S. Nejsem odborník na pgsql, možná je můj kód nějak špatně, před použitím ve výrobě to dvakrát zkontrolujte, ale doufám, že používá indexy a paralelní provádění správně. Udělal jsem to pouze z ukázkového kódu, ne vrtání do teorie za agregáty v PG.