Re: Need your help on using "partion" - Mailing list pgsql-general

From Postgres User
Subject Re: Need your help on using "partion"
Date
Msg-id b88c3460704042033i213827aag11ecc6bf3e816477@mail.gmail.com
Whole thread Raw
In response to Need your help on using "partion"  (Huynh Ngoc Doan <hndoan@ghp-fareast.com.vn>)
List pgsql-general
My guess is that when you insert into Cities, the sequence field is
incremented one time (=2), and when the Rule is executed to insert
into Capital, the sequence is incremented a second time (=3).  As a
result of these 2 operations, the sequence is incremented 2 times.

I don't know anything about your application or business rules, but
your solution seems unnecessarily complicated.  Remember, the best and
smartest approach is usually the simplest one.  You can do this in a
much simpler way.

On 4/4/07, Huynh Ngoc Doan <hndoan@ghp-fareast.com.vn> wrote:
>
> /*I'm learning how to use the partion in Postgres 8.2.3 so I want to
> do some test for my awareness.
> I create 2 tables:
> The parent table is cities:*/
> CREATE TABLE xxx.cities
> (
>   id serial NOT NULL,
>   name text,
>   population real,
>   altitude integer,
>   CONSTRAINT pk_cities PRIMARY KEY (id)
> )
> /*and a partion of cities is capital:*/
> CREATE TABLE xxx.capital
> (
>   CONSTRAINT pk_capital PRIMARY KEY (id),
>   CONSTRAINT capital_id_check CHECK (id > 3)
> ) INHERITS (xxx.cities)
>
> /*My purpose is that the cities will contain the rows having id <= 3
> and the capital will contain the rows having id >=3.
> So I create a rule cities_insert_capital to redirect data to the
> table capital when new row's id >3
> Here it is:
> */
> CREATE OR REPLACE RULE cities_insert_capital AS
>     ON INSERT TO xxx.cities
>    WHERE new.id > 3 DO INSTEAD INSERT INTO xxx.capital(id,name,
> population, altitude) VALUES (new.id,new.name, new.population, new.altitude)
>
> After completing the reparation stage, I insert some rows into cities table:
> --restart the serial value to 1
> alter sequence xxx.cities_id_seq restart with 1;
> --serial is 1 at this time
> --1.
> INSERT INTO xxx.cities(name, population, altitude)
>     VALUES('HCM',10,10);
> --data is inserted into cities table as the result, serial is 3,and
> the expected value is 2 =>what wrong here?
> --2.Try more insert
> INSERT INTO xxx.cities(name, population, altitude)
>     VALUES('Ha Noi',10,10);
> --data is inserted into capital while it's is expected to insert to cities.
> --serial is 5 at this time,and expected value is 3 => what wrong here?
>
> /*Conclusion:
> The serial increases by 2 when excuting one insert command.I try many
> ways to find out the reason why, but I can't.
> Can you help me to explain this unexpected behavior and give me some
> advices to deal with this problem.
> I want that the serial will increase by 1 unit after a insert comand.
> Thank you very much.
> Note:
> I want id will be add automatically when a row is inserted.
> */
> Best regard,
> Doan. From VietNam
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 5: don't forget to increase your free space map settings
>

pgsql-general by date:

Previous
From: "Postgres User"
Date:
Subject: Re: newid() in postgres
Next
From: "Postgres User"
Date:
Subject: Re: Storing blobs in PG DB