Re: foreign keys and inheritance problem

From: Edoardo Panfili <edoardo(at)aspix(dot)it>
To: pgsql-general(at)postgresql(dot)org
Subject: Re: foreign keys and inheritance problem
Date: 2010-08-12 18:37:31
Message-ID: 4C643F6B.5010305@aspix.it
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On 12/08/10 18.59, Edoardo Panfili wrote:
> hi,
> I am in some trouble with my tables defined using inheritance, This is a
> semplified test case:
>
> -----------------------
> create table sub1( name1 text) inherits(father);
> create table sub2( name2 text) inherits(father);
> create table other (description text, id integer);
>
> -- I know, the contraints is not checked in sub1 and sub2
> ALTER TABLE father ADD UNIQUE(id);
> ALTER TABLE other ADD FOREIGN KEY (id) REFERENCES father(id);
>
> insert into sub1 (id,name1) VALUES(1,'row1 in sub1');
> insert into sub2 (id,name2) VALUES(2,'row1 in sub2');
> select * from father;
> id
> ----
> 1
> 2
>
> ------------------------
>
> I can't insert data in "other" table:
> -----------------------------
> test=# insert into other(id,description) VALUES(1,'test');
> ERROR: insert or update on table "other" violates foreign key constraint
> "other_id_fkey"
> DETAIL: Key (id)=(1) is not present in table "father".
> -----------------------------
>
> Is there a way to do this thing? Or I must remove the foreign key
> constraint?
>
trigger solution, it seems ok but I am still searching for a declarative
one.

CREATE OR REPLACE FUNCTION insert_veto() RETURNS trigger AS
$BODY$

DECLARE
present boolean;
BEGIN
present := exists (select * from father where id=NEW.id) ;
IF present THEN
return NULL;
ELSE
RETURN NEW;
END IF;
END
$BODY$ LANGUAGE 'plpgsql'

CREATE TRIGGER veto BEFORE INSERT OR UPDATE ON other FOR EACH ROW
EXECUTE PROCEDURE insert_veto();

Edoardo

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Peter Geoghegan 2010-08-12 18:43:50 Setting up pgpass.conf for the postgres OS user on windows for pgAgent
Previous Message Ma Sivakumar 2010-08-12 18:07:43 Re: MySQL versus Postgres