我們在應用程序中使用基於繼承的分區。分區位於列上,以便每個分區對此列有不同的值。像這樣:子分區表中的常量列
CREATE TABLE base(
tblock INT NOT NULL,
-- other fields --
);
-- Create a partition
CREATE TABLE partition_1(
CHECK(tblock=1),
INHERITS base
);
有很多這樣的分區,每個分區都有大量的記錄(以百萬計)。整體數據庫大小在兆兆字節。
在上述模式中,即使每個分區在所有行中都具有該列的常量值,分區也必須具有列tblock。這顯然是對磁盤空間的浪費。
是否有任何方法來聲明分區,以便它實際上不會在磁盤上存儲tblock的值?
我們目前在Postgresql 9.2.6上。
除非還有一些*其他*鍵也可以唯一標識哪些分區會發生什麼。你如何知道哪一行獲取哪個tblock? –
@CraigRinger tblock確定每個行進入哪個分區,並在WHERE子句中用於約束排除。這意味着時間塊。沒有其他的關鍵。數據結構比當然顯示的要複雜一些。 – harmic
好的,所以應用程序有一些方法可以知道某行感興趣的「tblock」是什麼?如果是這樣,請考慮讓應用程序直接查詢分區,而不是依賴於約束排除;這樣你不再需要'tblock'字段。 –