sql >> Databasteknik >  >> RDS >> PostgreSQL

Funktionen min(uuid) finns inte i postgresql

Jag skulle vilja kreditera @robin-salihs svar, jag har använt det och implementering av min för int, för att bygga följande kod:

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

Det är nästan samma, men drar fördelar av B-tree index, så select min(id) from tbl fungerar på några millis.

P.S. Jag är ingen pgsql-expert, kanske är min kod fel på något sätt, dubbelkolla innan användning i produktion, men jag hoppas att den använder index och parallellkörning korrekt. Jag har gjort det bara från exempelkod, utan att gräva i teorin bakom aggregat i PG.



  1. SQL Hur man uppdaterar SUMMA för kolumn över grupp i samma tabell

  2. Sqlalchemy med postgres. Försök att få "DISTINCT ON" istället för "DISTINCT"

  3. PLSQL genererar slumpmässigt heltal

  4. Hur effektivt är det att beställa efter avstånd (hela tabellen) i geodjango