Условие создания таблицы Postgresql исключает один столбец в tsrange

Я хочу определить таблицу с ограничением.
данные: "название_статьи,время_статьи,время_начала,время_окончания"

на данный момент я использую это условие:

EXCLUDE USING gist (article_name WITH =,
            tsrange(start_time,end_time) WITH &&)

но это означает не брать новую строку, для которой диапазон перекрывается с существующим диапазоном с тем же именем article_name, тогда как я хочу изменить его, чтобы получить:

не брать новые строки, для которых article_time находится внутри существующего диапазона (start_time, end_time), для одного и того же article_name

Как я могу заявить об этом, пожалуйста? Большое спасибо


person dark    schedule 13.05.2017    source источник


Ответы (1)


Из-за того, что вы не можете использовать <@ или @>, я думаю, вам нужен триггер здесь с чем-то вроде

IF
 (
 SELECT count(1) 
 FROM table_name
 WHERE article_name = NEW. article_name
  AND NOT tsrange(NEW. start_time,NEW. end_time) <@ tsrange(start_time, end_time)
 ) < 1 
THEN
 return NEW;
END IF; 
person Vao Tsun    schedule 13.05.2017