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

Vincolo univoco di Postgres che non applica l'unicità

Gli indici univoci in Postgres si basano su valori uguali , ma NULL non è mai uguale a nulla, inclusi altri NULL. Pertanto qualsiasi riga con un valore NULL delete_at è distinta da qualsiasi altra riga possibile, quindi puoi inserirne un numero qualsiasi.

Un modo per aggirare questo problema è creare indici parziali , applicando regole diverse alle righe con e senza 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;