@plx49638

Почему postgres не считает null уникальным значением?

Создал таблицу с составным уникальным значением

64414541ed5b5825885893.png

Если в таблице есть запись
name = "имя"
region_id = 1
country_id = 1

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

Например так все нормально определяется (такая запись уже есть и второй раз уже такое значение не пропускает )

6441470ca49a0686436507.png

Так тоже нормально может создать значения потому что повторения нет

6441475d1983e329764704.png

Но вот так уже не должен сохранять

6441480c3b200293791796.png

То есть он считает два null как разные значения. подскажите как быть в такой ситуации ?
  • Вопрос задан
  • 152 просмотра
Решения вопроса 1
mayton2019
@mayton2019
Bigdata Engineer
Если смотреть на проблему с точки зрения теории множеств - то использовать null - это так себе идея.
Ведь в данном контексте пустое поле входит в состав ключевых. Атрибуты - да. Могут быть пустыми и не
заполненными пользователем. Но ключи с пустотами вызывают еще больше вопросов если у вас
будет задача ссылочной целосности например.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Fragster
@Fragster
помогло? отметь решением!
Это фича (и не только postgres). Поступить - поменять индекс, сделав его не UNIQUE, а UNIQUE NULLS NOT DISTINCT
(и да, эта фича доступна только в постгре 15. для более ранних версий нужно хранить в этом поле не NULL, а, например, 0 (но тут есть свои нюансы с foreign keys))
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы