Tôi muốn ghi nhận câu trả lời của @ robin-salih, tôi đã sử dụng nó và triển khai min cho int, để tạo mã sau:
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 (<)
);
Nó gần như giống nhau, nhưng tận dụng lợi thế của chỉ mục B-tree, vì vậy hãy select min(id) from tbl
hoạt động trong vài mili.
Tái bút Tôi không phải là chuyên gia về pgsql, có lẽ mã của tôi bị sai cách nào đó, hãy kiểm tra kỹ trước khi sử dụng trong sản xuất, nhưng tôi hy vọng nó sử dụng các chỉ mục và thực thi song song một cách chính xác. Tôi đã tạo nó chỉ từ mã mẫu, không đi sâu vào lý thuyết đằng sau các tổng hợp trong PG.