sql >> Database teknologi >  >> RDS >> PostgreSQL

Postgres unikke begrænsning, der ikke håndhæver unikhed

Unikke indekser i Postgres er baseret på værdier, der er lige , men NULL er aldrig lig med noget, inklusive andre NULL'er. Derfor er enhver række med en NULL deleted_at-værdi adskilt fra enhver anden mulig række - så du kan indsætte et hvilket som helst antal af dem.

En måde at undgå dette på er at oprette delvise indekser , anvender forskellige regler på rækker med og uden 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. Deltag i en kolonne med SELECT-forespørgsel i PostgreSQL

  2. Sådan sammenlignes null-værdier i MySQL

  3. vælg niveau fra dual connect by level<=4 hvordan det fungerer internt

  4. mysql match mod flere ord