Benim veritabanı sadece iki veya daha fazla sütun benzersiz girişleri içermesini sağlamak gerekir. Bu kolayca bir
UNIQUE bu sütunlar üzerindeki kısıtlama.
Benim durumumda, sadece çakışan zaman aralıkları için çoğaltmayı yasaklamam gerekiyor. Tablo var
valid_from ve
valid_to sütunlar. Bazı durumlarda öncelikle aktif girişi sona erdirmek gerekebilir.
valid_to = now ve ardından,
valid_from = now ve
valid_to = infinity .
Kullanmadan herhangi bir sorun yaşamadan önceki girişin süresini doldurabiliyorum
UPDATE , ancak yeni sütunları eklemek temel sütunlarım şu anda olduğundan sorunlu görünüyor
UNIQUE ve bu nedenle tekrar eklenemez.
Eklemeyi düşündüm
valid_from ve
valid_to bir parçası olarak
UNIQUE ancak bu kısıtlamayı daha gevşek hale getirir ve kopyaların ve çakışan zaman aralıklarının var olmasına izin verir.
Çakışan yinelenen öğelerin bulunmamasını sağlamak için nasıl bir kısıtlama yaparım
valid_from ve
valid_to
tsrange ?
Arıyorum
EXCLUDE USING GIST , ancak birden çok sütunu desteklemiyor gibi görünüyor? Bu benim için işe yaramıyor:
ALTER TABLE registration DROP Constraint IF EXISTS registration_{string.Join('_', listOfAttributes)}_key, ADD Constraint registration_{string.Join('_', listOfAttributes)}_key EXCLUDE USING GIST({string.Join(',', listOfAttributes)} WITH =, valid WITH &&);