2015-11-01 14 views
6

ile birleştirin PostgreSQL'de, bir sütun sütununda bir dışlama kısıtlamasını diğer skaler sütunlarda benzersiz bir kısıtlama ile nasıl birleştirirsiniz. Ya da başka bir şekilde ifade etmek gerekirse, menzil çakışması kontrolünün yalnızca diğer bazı sütunlarda benzersiz bir kontrolle birlikte yapıldığından nasıl emin olabilirim? Örneğin Bir PostgreSQL EXCLUDE Aralık kısıtlamasını bir UNIQUE kısıtlaması

, ben olduğunu varsayalım:

CREATE TABLE reservation (
    restaurant_id int, 
    time_range tsrange 
); 

Her restaurant_id için, hiçbir örtüşen time_range ler olmadığından emin olmak istiyorum.

Ben böyle özel bir aralık sınırlaması oluşturabilir biliyoruz:

CREATE TABLE reservation (
    restaurant_id int, 
    time_range tsrange EXCLUDE USING gist (time_range WITH &&) 
); 

Ama nasıl time_range onay restaurant_id tarafından kapsamlı olduğundan emin olabilirim? Eğer GİST endeksi, varsayılan olarak bir eşitlik operatörü olmadığı için uzantıyı btree_gist yüklemeniz gerekir

+0

tam olarak bu konunun bir tartışma thoughts.davisjeff.com/2010/09/25/exclusion-constraints-are-generalized-sql-unique/. –

cevap