2013-07-18 2 views
0

У меня есть таблица с 60 столбцами и вы хотите вертикально разбить ее, больше или как разделение на другие маленькие таблицы, разделенные на столбцы. Как сделать вертикальное разбиение в базе данных с помощью postgres 9.2? сделал много из Google, но не смог найти ничего полезного.вертикальное разбиение базы данных в 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

Я не думаю, что вы собираетесь получить достойный ответ, если не указано почему вы хотите вертикально раздел. Sharding? Представление? Денормализации? В большинстве ваших запросов необходимы только определенные столбцы?

В некотором роде, если ваш набор данных (несжатый) под 1 ТБ, вы можете попробовать community edition Vertica бесплатно, с учетом их лицензионных ограничений (прочитайте мелкий шрифт). Vertica - это база данных колоночных хранилищ, и для многих случаев использования очень быстро. Я использовал его в прошлом для аналитики, и он работал очень хорошо (конечно, есть некоторые ошибки).

+0

Ну, дело в том, что ... Мне нужно запустить запрос в этой таблице, который читает только 6 столбцов из 60 столбцов. поэтому, когда этот запрос выполняется, он выполняет чтение строки, считывая остальные 54 столбца, что я не требую, следовательно, ухудшая производительность. , так как мы знаем, что postgresql - это база данных, ориентированная на строки, поэтому я должен вертикально разбить ее. Я нашел исследовательский документ через Интернет, касающийся ОСУЩЕСТВЛЕНИЯ КОЛОННЫ-ОРИЕНТИРОВАННЫХ БАЗЫ ДАННЫХ В ПОСТГРЕССКОМ ДЛЯ ОПТИМИЗАЦИЯ ЧИСТЫХ ЧАСОВ. читая его и попытайтесь его реализовать. –

+0

, пожалуйста, напишите, если у вас есть какие-либо дальнейшие решения. СПАСИБО! –

+0

Пробовали ли вы создать таблицу с подмножеством столбцов, чтобы увидеть, приемлема ли производительность? Если это так, заполнение этой таблицы может выполняться любым количеством способов, включая триггеры, задания cron, прямую загрузку и т. Д. – bma

0

Ищите INSTEADOF Trigger. Разделите таблицу двумя разными именами и объедините их в виде. Примените вместо триггера представление, и все вставки и удаления должны быть применимы к обеим таблицам. Также обратите внимание на обработку обновлений.