2013-07-18 32 views
0

我有一個60列的表,想要垂直分區, 更多或像將其分割成更多的小表,以列的形式分割。 如何使用postgres 9.2在數據庫中進行垂直分區? 做了很多谷歌,但無法找到有用的東西。在postgres中的垂直數據庫分區9.2

表,我要直分區:

CREATE TABLE insurance.vt_owner 
(
    regn_no character varying(10) NOT NULL, 
    regn_dt timestamp without time zone, 
    purchase_dt timestamp without time zone, 
    owner_sr numeric(5,0), 
    owner_name character varying(150), 
    pan_no character varying(10), 
    f_name character varying(150), 
    c_add1 character varying(50), 
    c_add2 character varying(50), 
    c_city character varying(50), 
    c_district character varying(30), 
    c_pincode character varying(6), 
    p_add1 character varying(50), 
    p_add2 character varying(50), 
    p_city character varying(50), 
    p_district character varying(30), 
    p_pincode character varying(6), 
    owner_cd numeric(5,0), 
    owner_cd_desc character varying(50), 
    regn_type character varying(1), 
    regn_type_desc character varying(50), 
    vh_class numeric(5,0), 
    vh_class_desc character varying(50), 
    chasi_no character varying(30), 
    eng_no character varying(30), 
    maker numeric(5,0), 
    maker_desc character varying(50), 
    maker_model character varying(50), 
    body_type character varying(3), 
    body_type_desc character varying(50), 
    no_cyl numeric(2,0), 
    hp character varying(10), 
    seat_cap numeric(3,0), 
    stand_cap numeric(3,0), 
    sleeper_cap numeric(2,0), 
    unld_wt numeric(9,0), 
    ld_wt numeric(9,0), 
    fuel numeric(3,0), 
    fuel_desc character varying(50), 
    color character varying(50), 
    manu_mon numeric(2,0), 
    manu_yr numeric(4,0), 
    fit_dt timestamp without time zone, 
    norms numeric(2,0), 
    norms_desc character varying(50), 
    wheelbase character varying(10), 
    cubic_cap character varying(10), 
    floor_area numeric(7,3), 
    ac_fiitted character(1), 
    audio_fiitted character(1), 
    video_fiitted character(1), 
    vch_purchase_as character(1), 
    vch_catg character(3), 
    dealer_cd numeric(5,0), 
    dealer_cd_desc character varying(50), 
    sale_amt numeric(9,0), 
    laser_code character varying(10), 
    garage_add character varying(50), 
    state_cd character varying(2) NOT NULL, 
    rto_cd character varying(3) NOT NULL, 
    CONSTRAINT vt_owner_pkey PRIMARY KEY (state_cd, rto_cd, regn_no) 
) 
WITH (
    OIDS=FALSE 
); 
ALTER TABLE insurance.vt_owner 
    OWNER TO postgres; 

-- Index: insurance."index_VT_OWNER" 

-- DROP INDEX insurance."index_VT_OWNER"; 

CREATE INDEX "index_VT_OWNER" 
    ON insurance.vt_owner 
    USING btree 
    (regn_no COLLATE pg_catalog."default", chasi_no COLLATE pg_catalog."default", state_cd COLLATE pg_catalog."default", rto_cd COLLATE pg_catalog."default"); 

在此先感謝

+1

postgresql不支持垂直分區。 –

回答

1

我不認爲你會除非你指定爲什麼要直得到一個體面的答案劃分。拆分?性能?反規範化?在大部分查詢中只有某些列是必需的?

有點相關,如果您的數據集(未壓縮)在1TB以下,您可以免費試用Vertica的community edition,並受其許可限制(請閱讀細則)。 Vertica是一個柱狀的存儲數據庫,對於許多用例來說非常快。我過去曾經用它來分析,它工作得很好(當然有一些陷阱)。

+0

好的事情是.. 我需要在這張表上運行一個查詢,只讀取60列中的6列。因此,當這個查詢執行時,它執行一個明智的讀取操作,讀取其他54個列,這也是我不需要的,因此降低了性能。我們知道postgresql是一個面向行的數據庫,這就是爲什麼我需要垂直分區的原因。 我在互聯網上發現了一篇研究論文,內容涉及實現列指向 POSTGRESQL中的數據庫 優化READ-ONLY QUERIES。 閱讀並將嘗試實施它。 –

+0

如果您有任何進一步的解決方案,請發帖。 感謝! –

+0

您是否嘗試使用需要查看性能是否可接受的列的子集創建表?如果是這樣,填充該表可以通過多種方式完成,包括觸發器,cron作業,直接加載等。 – bma

0

尋找INSTEADOF觸發器。用兩個不同的名稱拆分表格,並將它們統一在一個視圖中。在視圖上應用而不是觸發器,並且所有插入和刪除必須適用於這兩個表。請仔細查找處理更新