sql >> Databasteknik >  >> RDS >> PostgreSQL

Skillnaden i ordningsföljd av bokstaver av enumtyp mellan PostgreSQL 9.0 och 9.1

Jag tror att du måste kontrollera PostgreSQL-versionen och ändra beteende på lämpligt sätt, eller använda SQL som inte rör katalogen för att avgöra beställningen.

En idé för det senare, givet dummy enum:

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

är att ORDER BY casten av enum-etiketten till värden av enum-typen med hjälp av row_number fönsterfunktion tillgänglig i 8.4 och senare:

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

Detta ger dig etiketterna sorterade efter en sorteringsnyckel. I äldre Pg-versioner kommer Pg bara att sortera efter oid av enumvärdena kommer den i nyare versioner att använda enumsortorder, men du behöver inte bry dig på något sätt, du har precis sagt till PostgreSQL "sortera dessa i rätt ordning tack".

Eller om du bara behöver dem i den ordning som servern förväntar sig, skriv:

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



  1. Oracle-fråga för att få första transaktions-ID baserat på förbrukad utgående transaktion

  2. Varför är innodbs VISA TABELL STATUS så opålitlig?

  3. MySQL CASE-sats och REGEXP

  4. Hur kontrollerar jag om det finns stora bokstäver i MySQL?