PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Ràng buộc duy nhất của Postgres không thực thi tính duy nhất

Chỉ mục duy nhất trong Postgres dựa trên các giá trị bằng nhau , nhưng NULL không bao giờ bằng bất cứ thứ gì, kể cả các NULL khác. Do đó, bất kỳ hàng nào có giá trị NULL delete_at đều khác biệt với bất kỳ hàng nào khác có thể có - vì vậy bạn có thể chèn bất kỳ số nào trong số chúng.

Một cách giải quyết vấn đề này là tạo chỉ mục từng phần , áp dụng các quy tắc khác nhau cho các hàng có và không có NULL:

 CREATE UNIQUE INDEX ... ON subscriptions
 (user_id, class_type_id) WHERE deleted_at IS NULL;

 CREATE UNIQUE INDEX ... ON subscriptions
 (user_id, class_type_id, deleted_at) WHERE deleted_at IS NOT 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. Hiệu suất khác biệt:điều kiện được đặt tại mệnh đề INNER JOIN so với WHERE

  2. Xuất sang CSV và Nén bằng GZIP trong postgres

  3. PostgreSQL chọn giá trị và tăng cùng một lúc

  4. Làm thế nào để chuyển đổi rỗng thành null trong PostgreSQL?

  5. Chức năng SQL Condition on Window