Saya ingin menghargai jawaban @robin-salih, saya telah menggunakannya dan implementasi min untuk int, untuk membuat kode berikut:
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 (<)
);
Hampir sama, tetapi memanfaatkan indeks B-tree, jadi select min(id) from tbl
bekerja dalam beberapa mili.
P.S. Saya bukan ahli pgsql, mungkin kode saya salah, periksa kembali sebelum digunakan dalam produksi, tapi saya harap ini menggunakan indeks dan eksekusi paralel dengan benar. Saya membuatnya hanya dari kode sampel, tidak menggali teori di balik agregat di PG.