Как мне создать пользовательский тип диапазона в PostgreSQL, например, от 1 до 100?

#postgresql #range-types

#postgresql #типы диапазона

Вопрос:

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

Ответ №1:

Вы можете использовать ограничение проверки:

 create table foo
( 
   some_value int not null check (some_value between 1 and 100)
);
 

В качестве альтернативы, если вам это нужно в нескольких таблицах, домен может быть полезен

 create domain one_to_hundred
  as integer not null
  check (value between 1 and 100);

create table foo
( 
   some_value one_to_hundred
);
 

Ответ №2:

Используйте контрольное ограничение для вашего диапазона:

 CREATE TABLE foo (
  bar int4range NOT NULL,
  CONSTRAINT foo_bar_check CHECK (bar <@ '[0,100]'::int4range)
)
;

INSERT INTO foo(bar) VALUES('[20,30]');
INSERT INTO foo(bar) VALUES('(30,200]'); -- fail