Interesting.  I wonder what I am doing wrong.  I will try and setup the 
database again and see if I can get it to work.

thank you for testing it out for me.

Richard 

On May 21, 2013, at 1:06 PM, Raghavendra <raghavendra....@enterprisedb.com> 
wrote:

> On Tue, May 21, 2013 at 11:03 PM, Richard Onorato <richard_onor...@yahoo.com> 
> wrote:
> I am wanting to partition my data based on a mod of one of the bigint 
> columns, but when I run my insert test all the data goes into the base table 
> and not the partitions.  Here is what the table looks like:
> 
> CREATE table MyMappingTable ( id bigserial NOT NULL,
>                                      c1 bigInt NOT NULL,
>                                      c2 bigInt NOT NULL,
>                                      c3 bigint NOT NULL,
>                                      count bigint DEFAULT 1,
>                                      createdTime timestamp with time zone 
> default CURRENT_TIMESTAMP,
>                                      CONSTRAINT MyMappingTable_index PRIMARY 
> KEY (id) )
> with (OIDS=FALSE);
> 
> CREATE TABLE MyMappingTableT1 (PRIMARY KEY (id), CHECK((c1 % 5) = 0)) 
> INHERITS (MyMappingTable);
> CREATE TABLE MyMappingTableT2 (PRIMARY KEY (id), CHECK((c1 % 5) = 1)) 
> INHERITS (MyMappingTable);
> CREATE TABLE MyMappingTableT3 (PRIMARY KEY (id), CHECK((c1 % 5) = 2)) 
> INHERITS (MyMappingTable);
> CREATE TABLE MyMappingTableT4 (PRIMARY KEY (id), CHECK((c1 % 5) = 3)) 
> INHERITS (MyMappingTable);
> CREATE TABLE MyMappingTableT5 (PRIMARY KEY (id), CHECK((c1 % 5) = 4)) 
> INHERITS (MyMappingTable);
> 
> Here is the trigger function that I added to the database:
> 
> CREATE OR REPLACE FUNCTION my_mapping_table_insert_trigger()
> RETURNS trigger AS $$
> BEGIN
>   IF ( (NEW.c1 % 5) = 0 ) THEN 
>     INSERT INTO MyMappingTableT1 VALUES (NEW.*); 
>   ELSIF ( (NEW.c1 % 5) = 1 ) THEN 
>     INSERT INTO MyMappingTableT2 VALUES (NEW.*);
>   ELSIF ( (NEW.c1 % 5) = 2 ) THEN 
>     INSERT INTO MyMappingTableT3 VALUES (NEW.*);
>   ELSIF ( (NEW.c1 % 5) = 3 ) THEN 
>     INSERT INTO MyMappingTableT4 VALUES (NEW.*);
>   ELSIF ( (NEW.c1 % 5) = 4 ) THEN 
>     INSERT INTO MyMappingTableT5 VALUES (NEW.*);
>   ELSE
>     RAISE EXCEPTION 'c1 mod out of range.  Something wrong with the 
> my_mapping_table_insert_trigger() function!';
>   END IF;
>   RETURN NULL;
> END;
> $$
> LANGUAGE plpgsql;
> 
> Here is the Trigger that I added to the table:
> 
> CREATE TRIGGER insert_my_mapping_table_trigger 
>   BEFORE INSERT ON MyMappingTable 
>   FOR EACH ROW EXECUTE PROCEDURE my_mapping_table_insert_trigger();
> 
> SET constraint_exclusion = ON;
> 
> Regards,
> 
> Richard
> 
> I tried your test case, its working fine from my end and populating data 
> properly to partition childs. 
> 
> insert into mymappingtable values (1,7,20,30,1,now());
> insert into mymappingtable values (2,6,20,30,1,now());
> insert into mymappingtable values (3,8,20,30,1,now());
> insert into mymappingtable values (4,9,20,30,1,now());
> insert into mymappingtable values (5,10,20,30,1,now());
> 
> postgres=# \dt+ MyMappingTable*
>                             List of relations
>  Schema |       Name       | Type  |  Owner   |    Size    | Description
> --------+------------------+-------+----------+------------+-------------
>  public | mymappingtable   | table | postgres | 0 bytes    |
>  public | mymappingtablet1 | table | postgres | 8192 bytes |
>  public | mymappingtablet2 | table | postgres | 8192 bytes |
>  public | mymappingtablet3 | table | postgres | 8192 bytes |
>  public | mymappingtablet4 | table | postgres | 8192 bytes |
>  public | mymappingtablet5 | table | postgres | 8192 bytes |
> 
> ---
> Regards,
> Raghavendra
> EnterpriseDB Corporation
> Blog: http://raghavt.blogspot.com/
> 

Reply via email to