sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgres unika begränsning som inte upprätthåller unikhet

Unika index i Postgres bygger på att värden är lika , men NULL är aldrig lika med någonting, inklusive andra NULL. Därför skiljer sig alla rader med ett NULL deleted_at-värde från alla andra möjliga rader - så du kan infoga valfritt antal av dem.

Ett sätt att kringgå detta är att skapa partiella index , tillämpa olika regler på rader med och utan 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. komplex fråga tar för mycket tid att överföra

  2. kan jag öppna en skrivskyddad databas från res/tillgångsmappen i Android utan att kopiera till databasmappen

  3. Hur gör jag en trigger för att uppdatera en kolumn i en annan tabell?

  4. Är en SQL-injektion faktiskt möjlig genom att lägga till en andra fråga?