Re: foreign key violation error with 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
Thread:
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?

In response to

Browse pgsql-admin by date

  From Date Subject
Next Message Markus Schiltknecht 2007-09-07 08:23:38 Re: Postgres with Sun Cluster HA/Solaris 10
Previous Message Daniel Rubio 2007-09-07 07:50:18 Re: Can't login to 8.2.4 if not superuser...