sql - postgresql partitioning master table duplicate entries -
sql - postgresql partitioning master table duplicate entries -
i ve created simple partitioning construction given below:
master table
create table parent_table (   id_n numeric(19,0) not null,   name_v character varying(255),   location_n numeric(19,0),   constraint parent_table_pkey primary key (id_n ) )    child tables
create table child_table_location_1 ( -- inherited table parent_table:  id_n numeric(19,0) not null, -- inherited table parent_table:  name_v character varying(255), -- inherited table parent_table:  location_n numeric(19,0),   constraint child_table_location_1_pkey primary key (id_n ),   constraint child_table_location_1_location_n_check check (location_n = 1::numeric) )inherits (parent_table)  create table child_table_location_2 ( -- inherited table parent_table:  id_n numeric(19,0) not null, -- inherited table parent_table:  name_v character varying(255), -- inherited table parent_table:  location_n numeric(19,0),   constraint child_table_location_2_pkey primary key (id_n ),   constraint child_table_location_2_location_n_check check (location_n = 2::numeric) )inherits (parent_table)    trigger
create or replace function partition_insertion_trigger() returns trigger  $$ begin     execute 'insert '|| quote_ident('child_table_location_'||new.location_n)||' select ($1).*' using new;      homecoming new; end; $$ language plpgsql;  create trigger insert_into_partition_trigger before insert on parent_table each row execute procedure partition_insertion_trigger();    i create trigger such based on location field, info gets populated in respective kid tables.
now ve below insert scripts:
insert parent_table(id_n, name_v, location_n) values (1, 'aaa', 1); insert parent_table(id_n, name_v, location_n) values (2, 'bbb', 2); insert parent_table(id_n, name_v, location_n) values (3, 'ccc', 1); insert parent_table(id_n, name_v, location_n) values (4, 'ddd', 2); insert parent_table(id_n, name_v, location_n) values (5, 'eee', 1); insert parent_table(id_n, name_v, location_n) values (6, 'fff', 2);    when select individual tables:
child table 1
id_n| name_v| location_n 1|"aaa"|1 3|"ccc"|1 5|"eee"|1    child table 2
id_n| name_v| location_n 2|"bbb"|2 4|"ddd"|2 6|"fff"|2    but when query on master table:
parent table
id_n|name_v|location_n 1|"aaa"|1 1|"aaa"|1 2|"bbb"|2 2|"bbb"|2 3|"ccc"|1 3|"ccc"|1 4|"ddd"|2 4|"ddd"|2 5|"eee"|1 5|"eee"|1 6|"fff"|2 6|"fff"|2    i duplicate entries parent_table after having primary key constraint on id field.
why happening , changes should create on design.
awaiting quick response.
thanks in advance.
returning null not clean way.
the elegant solution have trigger "instead of"
see: http://www.postgresql.org/docs/9.3/static/sql-createtrigger.html
 sql postgresql postgresql-9.1 database-partitioning 
 
Comments
Post a Comment