Хобрук: Ваш путь к мастерству в программировании

postgres: проверка ограничений и нулевые значения

пожалуйста, взгляните на следующую таблицу:

   name  |  x  |  y
---------+-----+------
   foo   |  3  |  5
   bar   | 45  | 99 
  foobar | 88  | 
  barfoo |  0  | 45

Я хочу добавить ограничение CHECK ( y > x ), но это, очевидно, не удастся, потому что оно нарушается строкой «foobar».

Как мне создать ограничение, которое говорит: проверить (у > х), но только если у не нуль?


Ответы:


1

На самом деле больше ничего делать не нужно. Ограничение проверки удовлетворяется, если выражение проверки оценивается как истинное или нулевое значение.

Ваше ограничение CHECK ( y > x ) будет работать как есть в вашем сценарии, потому что строка foobar не нарушит ограничение, поскольку оно оценивается как null

26.07.2009

2

Вы можете поместить тест IS NULL в выражение CHECK, например:

CREATE TABLE mytable (
    name TEXT,
    x INTEGER,
    y INTEGER CHECK (y IS NULL OR y > x)
);

(проверено на PostgreSQL 8.4)

25.07.2009
  • Это просто не нужно. Цитата из руководства по PostgreSQL: Следует отметить, что проверочное ограничение выполняется, если проверочное выражение оценивается как истинное или нулевое значение. Поскольку большинство выражений будут оцениваться как нулевое значение, если какой-либо операнд имеет значение null, они не предотвратят нулевые значения в ограниченных столбцах. (postgresql.org/docs/8.1/static/ddl-constraints.html) 25.02.2012
  • Это может быть необходимо, но это не значит, что лучше не указывать логику в явном виде. 02.07.2021
  • Новые материалы

    Запуск LF Internship v2 (1 апреля - 1 октября 2019 г.)
    Вот и открылись двери к великолепию 😃. Как и было обещано, заявки на стажировку принимаются с 7 января по 28 февраля 2019 г. . Нажмите ссылку, чтобы подать заявку:..

    BCACTF 4.0 Writeup — Freebee (Интернет)
    Описание вызова: Я хочу прочитать эту действительно классную статью, но у них есть платный доступ. Вы можете мне помочь? Веб-адрес вызова: http://challs.bcactf.com:30771/ . Если вы..

    Что такое обещание в JavaScript?
    Быстрое и объективное объяснение обещаний в JavaScript World. Определение Промис — это объект, содержащий действие, которое еще не завершено, другими словами, оно все еще выполняется и в..

    Рекурсивный отбор признаков: добавление или устранение?
    Умный способ осуществить исчерпывающий выбор функций При построении модели машинного обучения иметь больше функций важнее, чем меньше. Но использование только тех, которые вам нужны, более..

    Как не терять концентрацию во время программирования
    Вы когда-нибудь чувствовали, что каждый час каждого дня засыпают текстами, электронными письмами, сообщениями, твитами и личными перерывами? Реальность такова, что Мы живем в мире, где все..

    Сортировка ключей объекта в JavaScript
    Если вы работаете с JavaScript, вы можете столкнуться с ситуацией, когда вам нужно отсортировать ключи объекта. Вот руководство, которое поможет вам отсортировать ключи объекта в JavaScript. Шаг..

    Neovim для начинающих — Удаленная отладка Python
    Настройте удаленную отладку для докеризованного приложения Python. В этой статье мы узнаем, как отлаживать приложение Python, работающее внутри контейнера Docker. Эта статья является..