sql >> Databáze >  >> RDS >> PostgreSQL

Funkce min(uuid) v postgresql neexistuje

Rád bych připsal odpověď @robin-salih, použil jsem ji a implementaci min pro int k vytvoření následujícího kódu:

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

Je to téměř stejné, ale využívá výhody indexu B-stromu, takže select min(id) from tbl funguje za několik milis.

P.S. Nejsem odborník na pgsql, možná je můj kód nějak špatně, před použitím ve výrobě to dvakrát zkontrolujte, ale doufám, že používá indexy a paralelní provádění správně. Udělal jsem to pouze z ukázkového kódu, ne vrtání do teorie za agregáty v PG.



  1. Vložte více řádků s připravenými výkazy CHOP

  2. Vytvoření JSON a úprava složitého dotazu (oracle 11g)

  3. Problém s kódováním utf-8 pomocí PHP + MySQL

  4. Dotaz MySQL vrací duplicitní řádky