PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Разликата в подреждането на литералите от тип enum между PostgreSQL 9.0 и 9.1

Мисля, че ще трябва да проверите версията на PostgreSQL и да промените поведението по подходящ начин или да използвате SQL, който не докосва каталога, за да определите подреждането.

Идея за последното, дадено фиктивно enum:

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

е ORDER BY преобразуване на етикета enum към стойности на типа enum с помощта на row_number функция за прозорец, налична в 8.4 и по-нови:

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

Това ви дава етикетите, подредени по ключ за сортиране. В по-старите версии на Pg Pg просто ще сортира по oid от стойностите на enum, в по-новите версии ще използва enumsortorder, но не е нужно да се интересувате от двата случая, вие току-що казахте на PostgreSQL „сортирайте ги в правилния ред, моля“.

Или ако просто имате нужда от тях в реда, който сървърът очаква, напишете:

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изхвърляне в CSV/Postgres памет

  2. Как да намерите размера на диска на Postgres / PostgreSQL таблица и нейните индекси

  3. Docker не разпознава директорията с данни на Postgresql

  4. Postgresql - Използване на подзаявки с изрази за промяна на последователност

  5. Как да наблюдавате PostgreSQL, работещ вътре в Docker контейнер:Част първа