PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Die Funktion min(uuid) existiert nicht in postgresql

Ich möchte die Antwort von @robin-salih gutschreiben, ich habe sie und die Implementierung von min für int verwendet, um den folgenden Code zu erstellen:

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 (<)
);

Es ist fast dasselbe, nutzt aber die Vorteile des B-Tree-Index, also select min(id) from tbl funktioniert in wenigen Millis.

P.S. Ich bin kein pgsql-Experte, vielleicht ist mein Code irgendwie falsch, überprüfen Sie dies vor der Verwendung in der Produktion, aber ich hoffe, dass Indizes und parallele Ausführung korrekt verwendet werden. Ich habe es nur aus Beispielcode gemacht und nicht in die Theorie hinter Aggregaten in PG eingegraben.