Answers:
是的,您可以使用EXCLUDE约束,它是UNIQUE约束的概括:
ALTER TABLE prices 
  ADD CONSTRAINT unique_price_per_product_quantity_daterange
    EXCLUDE  USING gist
    ( product_id WITH =, 
      quantity WITH =, 
      daterange(start_date, end_date, '[]') WITH &&   -- this is the crucial
    );
约束可以解释为:
不允许两行具有相同
product_id,相同quantity和重叠(&&)日期范围。
该'[]'是为希望全包的日期范围(默认是[)用于范围类型)。
请参阅有关范围类型约束的文档。您可能还需要通过运行添加扩展名(一次,对于要安装此扩展名的每个数据库):
CREATE EXTENSION btree_gist;
              (product_id, start_date)。随着日期范围,将必须要对一个指标(product_id, lower(range_column))
                    
daterange是完全相同的,因为它是排他的下限,但这很容易解决。我是否应该真正地将数据迁移为使用daterange列类型(如果更好,可以单独提出一个问题),或者这两个列的内容是否合理?