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

Bagaimana cara menambahkan indeks unik bersyarat di PostgreSQL

Buat UNIQUE indeks multikolom pada (product_id, variant_id) :

CREATE UNIQUE INDEX line_items_prod_var_idx ON line_items (product_id, variant_id);

Namun, ini akan memungkinkan beberapa entri (1, NULL) untuk (product_id, variant_id) karena NULL nilai tidak dianggap sama.
Untuk menebusnya, buat tambahan UNIQUE sebagian indeks di product_id :

CREATE UNIQUE INDEX line_items_prod_var_null_idx ON line_items (product_id)
WHERE variant_id IS NULL;

Dengan cara ini Anda dapat memasukkan (1,2) , (1,3) dan (1, NULL) , tapi tak satu pun dari mereka untuk kedua kalinya. Juga mempercepat kueri dengan ketentuan pada satu atau kedua kolom.

Baru-baru ini, jawaban terkait di dba.SE, hampir secara langsung berlaku untuk kasus Anda:

  • Batasan unik multi-kolom PostgreSQL dan nilai NULL


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Mengubah Gaya Batas Tabel di Hasil Query psql

  2. Hibernate, Postgresql:Kolom x bertipe oid tetapi ekspresi bertipe byte

  3. Meneliti kelambatan PostGIS (edisi 2019)

  4. Alternatif Diagnostik pgDash - Manajemen Kueri PostgreSQL dengan ClusterControl

  5. Penggabungan Koneksi dengan Pgbouncer di PostgreSQL 9.0