pl/pgsql & fk constraint

From: Sindunata Sudarmaji <software(at)dygsp(dot)com>
To: pgsql-general(at)postgresql(dot)org
Subject: pl/pgsql & fk constraint
Date: 2003-01-14 08:07:30
Message-ID: 20030114150730.A22412@top4
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hi all,

I think I found a bug in the combination of PL/PGSQL and Foreign Key
constraint. Please find below a sample case problem:

--------------------------------------------------------------------
create table test1 (
f1 varchar(10) not null,
constraint test1_pk primary key (f1)
);

create table test2 (
f1 varchar(10) not null,
f2 varchar(5) not null,
constraint test2_pk primary key (f1, f2),
constraint test2_test1_fk foreign key (f1) references test1(f1)
on update cascade
);

insert into test1 values ('TEST');
insert into test2 values ('TEST', '001');

create or replace function transfertest() returns integer as '
begin
delete from test2 where f1 = ''TEST'';
delete from test1 where f1 = ''TEST'';
insert into test1 values (''TEST'');
insert into test2 values (''TEST'', ''002'');
return 0;
end;
' language 'plpgsql';
--------------------------------------------------------------------

test=# select transfertest();
ERROR: test2_test1_fk referential integrity violation - key in test1
still referenced from test2

however, running the command outside PLPGSQL works as expected:

test=# delete from test2 where f1='TEST'; delete from test1 where
f1='TEST'; insert into test1 values ('TEST'); insert into test2 values
('TEST','002');
DELETE 1
DELETE 1
INSERT 16578 1
INSERT 16579 1
test=# select * from test1;
f1
------
TEST
(1 row)

test=# select * from test2;
f1 | f2
------+-----
TEST | 002
(1 row)

If I didn't create the FK test2_test1_fk on table test2, it also worked
as expected. So this bug occurs on a combination of PLPGSQL and FK
constraint usage. Am I doing something wrong here? Or is it a known PG
bug?

I tested the bug on:
pppm=> select version();
version
-------------------------------------------------------------
PostgreSQL 7.2.1 on i686-pc-linux-gnu, compiled by GCC 2.96
(1 row)

and

test=# select version();
version
--------------------------------------------------------------
PostgreSQL 7.2.3 on i686-pc-cygwin, compiled by GCC 2.95.3-5
(1 row)

Please help,
TIA,
Sindu

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Çağıl Şeker 2003-01-14 08:24:21 DATESTYLE
Previous Message kanchana 2003-01-14 05:52:35 configure error with krb5