@ robin-salihの回答を信用したいと思います。これと、intのminの実装を使用して、次のコードを作成しました。
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 (<)
);
ほぼ同じですが、Bツリーインデックスを利用しているため、select min(id) from tbl
数ミリで動作します。
追記 私はpgsqlの専門家ではありません。おそらく私のコードはどういうわけか間違っているので、本番環境で使用する前に再確認してください。ただし、インデックスと並列実行が正しく使用されていることを願っています。 PGの集計の背後にある理論を掘り下げるのではなく、サンプルコードから作成しました。