Postgres dokümantasyon tablo bölümleri koşullar Üst üste binen kısıtlamalarla postgre tablo bölümleme kullanmak güvenli midir?
kısıtlamalar farklı bölümlere izin anahtar değerleri arasında örtüşme olmayacak olduğunu garanti emin olun örtüşmeyen gerektiğini söylüyor.
ama anlamıyorum neden, veri hala tetikte karar verir sokulacak olması kesin bölüm hangi örtüşen kısıtlamaları
farkında olabilir çünkü şu durum, bir masa ile yapmış bir sürü metin bilgisi ve update_date zaman damgası, bu tablo çeyreğe bölünmüş ve tüm yeni veya güncellenmiş satırlar en yeni bölüme giriyor, problemi gin trigram indeksi çok yavaş, bu yüzden trigram indeksi oluşturmaktan kaçınmak istiyorum şu anda geçerli ana öğe oluşturmak için sorumlu olandinamik olarak, şimdiki gün için çeyrek bölümle çakışacak yeni bölüm eklemeyi planlıyorum ve geçerli günlük bölüm için trigram indeksini devre dışı bırakmak istiyorum (veriyi tekrar çeyrek bölüme birleştirmek başka bir bakım görevi olurdu)
Çakışan update_date kısıtlamaları ile el ile bölüm tabloları oluşturmayı denedim ve postgre'ler şikayet etmedim, hatta arama yaptım ve her iki tablo da planlarda kullanıldı, bu yüzden iyi çalışıyor gibi görünüyor, ancak belgeler kısıtlamaların olabileceğini söylüyor ' t çakışıyor, neden bu?
Uygun tetikleyiciler ve bakım varsa, çakışan kısıtlamalarla bölümler oluşturmak güvenli midir?
UPD:
CREATE TABLE master (text_value text, update_date timestamp);
CREATE TABLE partition_year (
CHECK (update_date >= DATE '2015-01-01' AND update_date < DATE '2015-12-31')
) INHERITS (master);
CREATE TABLE partition_month (
CHECK (update_date >= DATE '2015-07-01' AND update_date < DATE '2015-8-01')
) INHERITS (master);
-- in production this would be handled by trigger
insert into partition_year(text_value, update_date) values ('year', '2015-01-02');
insert into partition_month(text_value, update_date) values ('month', '2015-07-02');
-- this scans only year partition
explain select * from master where update_date = '2015-01-02';
-- this scans both year and month partition
explain select * from master where update_date = '2015-07-02';
bu örnek postgres hem yıl ve ay Bölme okur ve ben bunu yapabilir varsayalım onların örtüşme
Çok ilginç bir soru. Emin değilim. Kısıtlama hariç tutma, birden fazla tablonun kısıtlamayı karşıladığı birden fazla tabloyu seçmek için çalışır, bu yüzden bu kısıtlamanın neden uygulanmasının gerektiği konusunda pek emin değilim. Bununla birlikte, PostgreSQL'in bir örtüşme olduğu tüm bölümleri taramayı seçeceğini unutmayın. –