PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

La funzione min(uuid) non esiste in postgresql

Vorrei accreditare la risposta di @robin-salih, l'ho usata e l'implementazione di min for int, per creare il seguente codice:

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

È quasi lo stesso, ma sfrutta i vantaggi dell'indice B-tree, quindi select min(id) from tbl funziona in pochi millisecondi.

PS Non sono un esperto di pgsql, forse il mio codice è in qualche modo sbagliato, ricontrolla prima dell'uso in produzione, ma spero che utilizzi correttamente gli indici e l'esecuzione parallela. L'ho fatto solo dal codice di esempio, senza scavare nella teoria dietro gli aggregati in PG.