Skip site navigation (1) Skip section navigation (2)

Re: special integrity constraints

From: Achilleus Mantzios <achill(at)matrix(dot)gatewaynet(dot)com>
To: Erik Thiele <erik(at)thiele-hydraulik(dot)de>
Cc: pgsql-sql(at)postgresql(dot)org
Subject: Re: special integrity constraints
Date: 2004-03-22 11:40:11
Message-ID: Pine.LNX.4.44.0403221322020.31407-100000@matrix.gatewaynet.com (view raw or flat)
Thread:
Lists: pgsql-docspgsql-sql
O kyrios Erik Thiele egrapse stis Mar 22, 2004 :

> On Mon, 22 Mar 2004 12:13:29 +0200 (EET)
> Achilleus Mantzios <achill(at)matrix(dot)gatewaynet(dot)com> wrote:
> 
> > O kyrios Erik Thiele egrapse stis Mar 22, 2004 :
> > 
> > Did you check out the DEFERRABLE option on the constraint?
> > 
> 
> DEFERRABLE
> NOT DEFERRABLE
> 
> This controls whether the constraint can be deferred. A constraint that
> is not deferrable will be checked immediately after every command.
> Checking of constraints that are deferrable may be postponed until the
> end of the transaction (using the SET CONSTRAINTS command). NOT
> DEFERRABLE is the default. 
> 
> !!!! Only foreign key constraints currently accept
> this clause. All other constraint types are not deferrable. !!!!
> 
Ooops . Then i guess you have to
convert your problem to use FK constraints.

Add 2 additional 1 row tables "abnum" and "even" and write 2 triggers
(on a,b) that keep up to date the value of the single row of abnum.
(thatis num(a)+num(b) % 2).
Then INSERT INTO even(num) VALUES(0);

Then make 1<-->1 relationship between abnum,even using
DEFERRABLE FK constraints.

At the end of each xaction the num(a)+num(b) % 2 must equal to 0
(i.e. an even number).

Whats your results?

> my constraint is not a foreign key constraint....
> 
> cya!
> erik
> 
> > > hi,
> > > 
> > > i have two tables
> > > 
> > > create table a (x integer);
> > > create table b (y real);
> > > 
> > > i have the special constraint that the sum of the number of rows in
> > > table a plus the number of rows in table b must be even.
> > > 
> > > so there is a posibility of adding one element to a and one element
> > > to b, and again the constraint is met.
> > > 
> > > but this of course does not work, since between adding the element
> > > to a and adding the element to b, the constraint is not met.
> > > 
> > > so i cannot use a trigger.
> > > 
> > > what i need is the execution of a check procedure at commit time. is
> > > that somehow possible?
> > > 
> > > my database has much more tables than just a and b, and most time
> > > the other tables are modified and not a or b, so it would be nice to
> > > execute the constraint checking procedure only if a or b was
> > > modified.
> > > 
> > > yes :) this question i asked in my former mail too, but I think it
> > > looked like there was a workaround and my problem was wrong. so i
> > > created this new kind of problem here to make things clearer.
> > > 
> > > 
> > > cu
> > > Erik
> > > 
> > > 
> > > 
> > 
> > -- 
> > -Achilleus
> > 
> 
> 
> 

-- 
-Achilleus



In response to

pgsql-docs by date

Next:From: Erik ThieleDate: 2004-03-22 13:10:42
Subject: Re: special integrity constraints
Previous:From: Bruno Wolff IIIDate: 2004-03-22 11:26:04
Subject: Re: special integrity constraints

pgsql-sql by date

Next:From: Bruno Wolff IIIDate: 2004-03-22 12:50:54
Subject: Re: inverse of "day of year"
Previous:From: Martin MarquesDate: 2004-03-22 11:32:32
Subject: Re: inverse of "day of year"

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group