У меня есть таблица вроде этого:дата Postgres перекрывание ограничение
date_start date_end account_id product_id
2001-01-01 2001-01-31 1 1
2001-02-01 2001-02-20 1 1
2001-04-01 2001-05-20 1 1
Я хочу, чтобы запретить перекрывающихся интервалах заданной (account_id, product_id)
EDIT: Я нашел кое-что:
CREATE TABLE test (
from_ts TIMESTAMPTZ,
to_ts TIMESTAMPTZ,
account_id INTEGER,
product_id INTEGER,
CHECK (from_ts < to_ts),
CONSTRAINT overlapping_times EXCLUDE USING GIST (
account_id WITH =,
product_id WITH =,
box(
point(extract(epoch FROM from_ts at time zone 'UTC'), extract(epoch FROM from_ts at time zone 'UTC')),
point(extract(epoch FROM to_ts at time zone 'UTC') , extract(epoch FROM to_ts at time zone 'UTC'))
) WITH &&
)
);
Если вы хотите чтобы узнать больше об этом http://www.depesz.com/2010/01/03/waiting-for-8-5-exclusion-constraints/
Только для меня проблема в том, что она не работает с нулевыми значениями как конечная временная метка, я думал о ее замене бесконечными значениями, но не работает.
Вы хотите запретить перекрывающиеся интервалы? – wildplasser
yep точно это слово, которое я искал – yokoloko
Вы должны пойти для 'CREATE CONSTRAINT TRIGGER' и написать определенную функцию для выполнения вашей проверки. – vyegorov