PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

La fonction min(uuid) n'existe pas dans postgresql

Je voudrais créditer la réponse de @robin-salih, je l'ai utilisée et l'implémentation de min pour int, pour construire le code suivant :

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

C'est presque la même chose, mais tire parti de l'index B-tree, donc select min(id) from tbl fonctionne en quelques millis.

P.S. Je ne suis pas un expert de pgsql, peut-être que mon code est erroné, revérifiez avant de l'utiliser en production, mais j'espère qu'il utilise correctement les index et l'exécution parallèle. Je l'ai créé uniquement à partir d'un exemple de code, sans creuser dans la théorie derrière les agrégats dans PG.