From: | Stephan Szabo <sszabo(at)megazone23(dot)bigpanda(dot)com> |
---|---|
To: | Kyle <kyle(at)actarg(dot)com> |
Cc: | pgsql-sql(at)postgresql(dot)org |
Subject: | Re: Bug or feature |
Date: | 2000-11-22 19:16:35 |
Message-ID: | Pine.BSF.4.21.0011221113490.1845-100000@megazone23.bigpanda.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-sql |
What is it actually giving you as an error
message in the failing case? Someone pointed
out a problem in deferred constraints recently
and I think this may be related.
Stephan Szabo
sszabo(at)bigpanda(dot)com
On Mon, 20 Nov 2000, Kyle wrote:
> Here's an interesting test of referential integrity. I'm not sure if
> this is working the way it should or if it is a bug.
>
> I'm trying to update the primary key in records that are linked together
> from the two different tables. My initial assumption was that because
> of the cascade, I could update the primary key only in the gl_hdr table
> and it would cascade to the gl_items table. I have two separate updates
> of gl_items shown below. One updates the key in gl_items explicitly,
> the other tries to wait and allow the cascade to do it. Only the first
> one works (try commenting one in/out at a time).
>
> Unless I update the glid explicitly in gl_items, I get an RI violation
> when it tries to update the gl_hdr record.
>
>
> --Test RI in the general ledger
>
> drop table gl_hdr;
> drop table gl_items;
>
> create table gl_hdr (
> glid int4,
> hstat varchar(1),
> constraint gl_hdr_pk_glid primary key (glid)
> );
>
> create table gl_items (
> glid int4,
> inum int4,
> istat varchar(1),
> primary key (glid, inum),
>
> constraint gl_items_fk_glid
> foreign key (glid) references gl_hdr
> on update cascade
> deferrable initially deferred
> );
>
> insert into gl_hdr (glid,hstat) values (1,'w');
> insert into gl_items (glid,inum,istat) values (1,1,'w');
> insert into gl_items (glid,inum,istat) values (1,2,'w');
>
> select * from gl_hdr h, gl_items i where h.glid = i.glid;
>
> begin;
>
> --This one works:
> -- update gl_items set glid = 1000, istat = 'c' where glid = 1;
>
> --This one doesn't:
> update gl_items set istat = 'c' where glid = 1;
>
>
>
> update gl_hdr set glid = 1000, hstat = 'c' where glid = 1;
> end;
>
> select * from gl_hdr h, gl_items i where h.glid = i.glid;
>
>
>
From | Date | Subject | |
---|---|---|---|
Next Message | Ramesh H R | 2000-11-23 02:50:57 | How to know table structure from a java program |
Previous Message | Roberto Mello | 2000-11-22 15:46:30 | Re: Persistent Connects (pg_pconnect) |