PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

A função min(uuid) não existe no postgresql


Eu gostaria de creditar a resposta de @robin-salih, eu usei isso e implementação de min para int, para construir o seguinte código:
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 (<)
);

É quase o mesmo, mas tira vantagens do índice B-tree, então select min(id) from tbl funciona em alguns milis.

P.S. Não sou especialista em pgsql, talvez meu código esteja de alguma forma errado, verifique antes de usar em produção, mas espero que use índices e execução paralela corretamente. Eu fiz isso apenas a partir do código de amostra, não me aprofundando na teoria por trás dos agregados no PG.