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

Rozdíl v řazení literálů typu enum mezi PostgreSQL 9.0 a 9.1

Myslím, že budete muset zkontrolovat verzi PostgreSQL a vhodně změnit chování, nebo použít SQL, které se nedotýká katalogu, abyste určili pořadí.

Nápad na to druhé, vzhledem k fiktivnímu výčtu:

CREATE TYPE test_enum AS ENUM ('z','x','y');
ALTER TYPE test_enum ADD VALUE 'a' BEFORE 'x';

je ORDER BY přetypování štítku výčtu na hodnoty typu výčtu pomocí row_number funkce okna dostupná ve verzi 8.4 a novější:

SELECT enumlabel, row_number() OVER (ORDER BY enumlabel::test_enum) AS sort_key
FROM pg_catalog.pg_enum
WHERE enumtypid = 'test_enum'::regtype;

Tím získáte štítky seřazené podle klíče řazení. Ve starších verzích Pg bude Pg řadit pouze podle oid hodnot enum, v novějších verzích bude používat enumsortorder, ale vás to nemusí zajímat ani tak, právě jste řekli PostgreSQL "seřaďte je prosím do správného pořadí".

Nebo pokud je potřebujete v pořadí, jaké server očekává, napište:

SELECT enumlabel
FROM pg_catalog.pg_enum
WHERE enumtypid = 'test_enum'::regtype
ORDER BY enumlabel::test_enum



  1. Different() funkce (ne select qualifier) ​​v postgresu

  2. SELECT INTO v MySQL

  3. ORA-04068:stávající stav balíčků byl zahozen ORA-04065:nebyla provedena, změněna nebo zrušena uložená procedura

  4. Fulltext match() against() vrací prázdnou sadu