PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

NOT NULL ограничение върху набор от колони

@Игор е съвсем прав и няколко OR Изразите са бързи и прости.

За дълъг списък с колони (a , b , c , d , e , f , g в примера), това е по-кратко и също толкова бързо:

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

db<>цигулка тук
Стара SQL Fiddle.

Как работи?

По-подробна форма на горното би била:

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

ROW е излишен синтаксис тук.

Тестване на ROW израз с IS NULL само отчита TRUE ако всяка отделна колона е NULL - което се оказва точно това, което искаме да изключим.

Не е възможно просто да обърнете този израз с (a,b,c,d,e,f,g) IS NOT NULL , защото това ще тества, че всяка отделна колона IS NOT NULL . Вместо това, отричайте целия израз с NOT . Авоа.

Повече подробности в ръководството тук и тук.

Израз във формата:

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

ще постигне същото, по-малко елегантно и с голямо ограничение:работи само за колони от съвпадащ тип данни , докато проверката на ROW изразът работи с всяко колони.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да създам потребител за db в postgresql?

  2. Надстройка до PostgreSQL13

  3. Има ли опции за таблица за присъединяване за асоциации много към много?

  4. Как да промените локала при форматиране на числа в PostgreSQL

  5. Опции за архивиране в облак за PostgreSQL