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

Ograniczenie NOT NULL na zbiorze kolumn

@Igor ma rację i kilka OR Wyrażenia ed są szybkie i proste.

Długa lista kolumn (a , b , c , d , e , f , g w przykładzie), jest to krótsze i równie szybkie:

CHECK (NOT (a,b,c,d,e,f,g) IS NULL)

db<>graj tutaj
Stare skrzypce SQL.

Jak to działa?

Bardziej gadatliwa forma powyższego to:

CHECK (NOT ROW(a,b,c,d,e,f,g) IS NULL)

ROW jest tutaj zbędną składnią.

Testowanie ROW wyrażenie z IS NULL tylko zgłasza TRUE jeśli każda kolumna jest NULL - co jest dokładnie tym, co chcemy wykluczyć.

Nie można po prostu odwrócić tego wyrażenia za pomocą (a,b,c,d,e,f,g) IS NOT NULL , ponieważ sprawdziłoby to, że każda pojedyncza kolumna IS NOT NULL . Zamiast tego zanegować całe wyrażenie za pomocą NOT . Voila.

Więcej szczegółów w instrukcji tutaj i tutaj.

Wyrażenie postaci:

CHECK (COALESCE(a,b,c,d,e,f,g) IS NOT NULL)

osiągnąłby to samo, mniej elegancko iz poważnym ograniczeniem:działa tylko dla kolumn pasującego typu danych , podczas gdy sprawdzenie ROW wyrażenie działa z dowolnym kolumny.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Funkcja LPAD() w PostgreSQL

  2. Jak zaktualizować PostgreSQL10 do PostgreSQL11 bez przestojów?

  3. Ewolucja tolerancji błędów w PostgreSQL:podróż w czasie

  4. Jaki jest MySQL odpowiednik funkcji EXPLAIN ANALYZE w PostgreSQL?

  5. Dlaczego postgres nie używa indeksu w moim zapytaniu