PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Różnica w kolejności literałów typu enum między PostgreSQL 9.0 i 9.1

Myślę, że będziesz musiał sprawdzić wersję PostgreSQL i odpowiednio zmienić zachowanie lub użyć SQL, który nie dotyka katalogu, aby określić kolejność.

Pomysł na to drugie, biorąc pod uwagę fikcyjną enum:

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

jest ORDER BY rzutowanie etykiety enum na wartości typu enum przy użyciu row_number funkcja okna dostępna w wersji 8.4 i nowszych:

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

Dzięki temu otrzymasz etykiety uporządkowane według klucza sortowania. W starszych wersjach Pg Pg będzie po prostu sortowany według oid wartości enum, w nowszych wersjach użyje enumsortorder, ale i tak nie musisz się tym przejmować, właśnie powiedziałeś PostgreSQL "uporządkuj je we właściwej kolejności".

Lub jeśli potrzebujesz ich tylko w kolejności oczekiwanej przez serwer, napisz:

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. Bardziej niezawodne zestawienia z obsługą ICU w PostgreSQL 10

  2. Narzędzie gpload w greenplum

  3. Błąd:brak modułu o nazwie psycopg2.extensions

  4. fe_sendauth:brak błędu podania hasła po skonfigurowaniu bazy danych PostgreSQL w Cloud9 IDE

  5. Zwracany wiersz SQL, jeśli nie znaleziono wyniku