PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Perbedaan dalam pemesanan literal tipe enum antara PostgreSQL 9.0 dan 9.1

Saya rasa Anda perlu memeriksa versi PostgreSQL dan mengubah perilaku dengan tepat, atau menggunakan SQL yang tidak menyentuh katalog untuk menentukan urutannya.

Ide untuk yang terakhir, diberikan dummy enum:

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

adalah ORDER BY pemeran label enum ke nilai tipe enum menggunakan row_number fungsi jendela tersedia di 8.4 dan yang lebih baru:

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

Ini memberi Anda label yang dipesan dengan kunci pengurutan. Dalam versi Pg yang lebih lama, Pg hanya akan mengurutkan berdasarkan oid dari nilai enum, dalam versi yang lebih baru itu akan menggunakan enumsortorder, tetapi Anda tidak perlu peduli, Anda baru saja memberi tahu PostgreSQL "urutkan ini ke dalam urutan yang benar".

Atau jika Anda hanya membutuhkannya sesuai urutan yang diharapkan server, tulis:

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. PostgreSQL Multi-DC:Menyiapkan Node Siaga di Geo-Lokasi Berbeda Melalui VPN

  2. sql - kelompokkan dalam rentang untuk memasukkan rentang tanpa nilai

  3. Streaming baris dari PostgreSQL (dengan ukuran pengambilan)

  4. Kinerja Urutan dan Serial di Postgres-XL

  5. SUM() Fungsi di PostgreSQL