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

Forskellen i rækkefølgen af ​​enum type literals mellem PostgreSQL 9.0 og 9.1

Jeg tror, ​​du bliver nødt til at tjekke PostgreSQL-versionen og ændre adfærd på passende vis, eller bruge SQL, der ikke rører kataloget, for at bestemme rækkefølgen.

En idé til sidstnævnte, givet dummy enum:

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

er at ORDER BY støbningen af ​​enum-etiketten til værdier af enum-typen ved hjælp af row_number vinduesfunktion tilgængelig i 8.4 og nyere:

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

Dette giver dig etiketterne sorteret efter en sorteringsnøgle. I ældre Pg-versioner vil Pg bare sortere efter oid af enum-værdierne, vil den i nyere versioner bruge enumsortorder, men du behøver ikke at være ligeglad på nogen måde, du har lige fortalt PostgreSQL "sortér disse i den rigtige rækkefølge, tak".

Eller hvis du bare skal bruge dem i den rækkefølge, serveren forventer, så skriv:

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



  1. Forskellen mellem #temptable og ##Temptable?

  2. postgresql trigger:deaktiver automatisk commit og indstil isolationsniveau

  3. Forespørg postgres jsonb efter værdi uanset nøgler

  4. indsæt værdier fra en rulleliste til databasetabel