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

Unikatowe ograniczenie Postgresa, które nie wymusza unikalności

Unikalne indeksy w Postgresie są oparte na wartościach, które są równe , ale NULL nigdy nie jest równy niczemu, łącznie z innymi wartościami NULL. Dlatego każdy wiersz o wartości NULL delete_at różni się od każdego innego możliwego wiersza - możesz więc wstawić dowolną ich liczbę.

Jednym ze sposobów na obejście tego jest tworzenie częściowych indeksów , stosując różne reguły do ​​wierszy z wartościami NULL i bez nich:

 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. Jak ustrukturyzować czat w aplikacji?

  2. Seler i transaction.atomic

  3. Zwróć wszystkie rekordy historyczne dla kont ze zmianą określonej powiązanej wartości

  4. Zwiększ wartość w Postgres

  5. Python Postgres Najlepszy sposób na wstawianie danych z tabeli w jednej bazie danych do innej tabeli w innej bazie danych