Merhabalar,

Table Partitioning'de soyle bir sorun yasiyorum...

Tablo adlari ve sutunlar rahat anlasilmasi icin basitlestidim...

A tablosu YIL sutununa gore Partiotion'lanmis bir tablo olsun..

A (                        // 0 Kayit
YIL int4,
F1 int4,
F2 int4,
F3 int4,
F4 int4
)     
A_2004 ( ) inherits A      // 1.2 M kayit 
A_2005 ( ) inherits A      // 1.8 M kayit
A_2006 ( ) inherits A      // 1.5 M kayit


A'da YIL'a gore yazilmis Insert Rule'lari var ayrica A'nin alt tablolarinda da YIL icin Check Constraint'ler mevcut.

Web tabanli bir uygulama A tablosunu transparent bir sekilde gayet guzel kullaniyor.
Insert, update, delete, select.. hepsi sorunsuz...Ayrica veritabaninda Constraint Exclusion acik ve isliyor..

Gelelim soruna..

Diyelimki A'nin alt tablolarinin her biri (F1,F2,F3) uclusune gore indexli..

Ve diyelimki uygulama soyle bir query gonderdi:
Hatirlatma: Partitioning uygulamaya transparent..

Select * From A Where YIL = 2004 Order By F1,F2,F3

Bu query'nin execution planina baktigimda, postgresql'in, once A tablosundaki kayitlari cektigini,
(aslinda A tablosunun kendisinden (A Only) 0 kayit  geliyor) daha sonra A_2005 ve A_2006'yi
constraint exclusion'a gore devre disi biraktigini (burda sorun yok), ve sonra A_2004'deki
kayitlari A'dan cektigi kayitlara ekledigini (append) , sonuclari siralama asamasina gelince de
(F1,F2,F3) indexini kullanamadigini goruyorum. Index kullanamamasi dogal cunku
A'dan ve A_2004'ten gelen kayitlar materialize olduktan sonra sort'a giriyor...

Halbuki ayni query'i direkt A_2004 uzerinde calistirdigimda, (F1,F2,F3) index'i gayet guzel kullaniliyor..
Ama uygulama bunu yapamaz cunku o zaman partitioning transparency'sini ihlal etmis olur.

Sorum su:

Bir sekilde Query Planner'a A'da (A Only) kayit olmadigini, dolayisiyla A ve A_2006'yi materialize etmeye
gerek kalmadan direkt A_2006'ya bakmasi gerektigini soyleyerek, A_2006'da sorting icin acilmis
(F1,F2,F3) indexini kullandirtmak mumkun mu?

Not: Ben yapamadim cunku A'da tanimladigim Check Constraint'ler diger tablolari da ekliyor..

Ya bu sorunun baska bir cozumu olabilir mi?

Ilgilenen herkese simdiden tesekkurler,

Soner Demiray