foreign key violation error with partitioned table

Lists: pgsql-admin
From: "gunce orman" <gunceorman(at)gmail(dot)com>
To: pgsql-admin(at)postgresql(dot)org
Subject: foreign key violation error with partitioned table
Date: 2007-09-06 08:49:59
Message-ID: 8e643fe60709060149x63704cf9p9f8a881cf3ce98f9@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-admin

hello,

i have a partitioned table t_kayit with 6 partitions and kayit_id is
primary key on this table. My other t_vto_sonuclari table use that kayit_id
as foreign key. I'm trying to insert values which contains kayit_id to
t_vto_sonuclari and i'm sure those kayit_ids are in t_kayit table but
when i'm inserting , i had error.

ERROR: insert or update on table "t_vto_sonuclari" violates foreign key
constraint "fk_t_kayit_kayit_id"
DETAIL: Key(kayit_id)=(54168) is not present in table t_kayit

I created a new test table which is as same as t_kayit but non partitioned
. I create new foreign key on that t_vto_sonuclari which refers to the new
test table. In that case i didn't had that error.I could insert. what am i
supposed to do for partitioned table?


From: "alfred(dot)fazio(at)gmail(dot)com" <alfred(dot)fazio(at)gmail(dot)com>
To: pgsql-admin(at)postgresql(dot)org
Subject: Re: foreign key violation error with partitioned table
Date: 2007-09-07 08:03:28
Message-ID: 1189152208.070111.270660@d55g2000hsg.googlegroups.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-admin

Hello,

You are correct in assuming that foreign keys are useless on a
partitioned table's primary key. The reason for this is that
PostgreSQL uses inheritance to create the functionality of
partitioning. A partitioned table is really an empty table with
multiple child tables all inheriting from the main partitioned table.
Each child table keeps its own index of the primary key. Therefore,
when you specify that a column REFERENCES a column in the main
partitioned table, the partitioned table has no way of knowing in
which of the child tables' indexes the key will be stored. See the
section 5.8.1 called "Caveats" in the chapter about Inheritence, which
explains that the use of foreign keys against inherited tables is
useless:

http://www.postgresql.org/docs/8.1/interactive/ddl-inherit.html

I just recently ran in to this myself while using inheritance. It was
a frustrating experience... but makes sense when you think about
it. :) Good luck to you.

--
Alfred J. Fazio,
alfred(dot)fazio(at)gmail(dot)com

On Sep 6, 4:49 am, gunceor(dot)(dot)(dot)(at)gmail(dot)com ("gunce orman") wrote:
> hello,
>
> i have a partitioned table t_kayit with 6 partitions and kayit_id is
> primary key on this table. My other t_vto_sonuclari table use that kayit_id
> as foreign key. I'm trying to insert values which contains kayit_id to
> t_vto_sonuclari and i'm sure those kayit_ids are in t_kayit table but
> when i'm inserting , i had error.
>
> ERROR: insert or update on table "t_vto_sonuclari" violates foreign key
> constraint "fk_t_kayit_kayit_id"
> DETAIL: Key(kayit_id)=(54168) is not present in table t_kayit
>
> I created a new test table which is as same as t_kayit but non partitioned
> . I create new foreign key on that t_vto_sonuclari which refers to the new
> test table. In that case i didn't had that error.I could insert. what am i
> supposed to do for partitioned table?