Contraints problem in PLPGSQL

From: "CN" <cnliou9(at)fastmail(dot)fm>
To: pgsql-bugs(at)postgresql(dot)org
Subject: Contraints problem in PLPGSQL
Date: 2003-10-21 04:09:30
Message-ID: 20031021040930.A25F279505@smtp.us2.messagingengine.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

Hello!

I encounter the following problems in v7.3.2.

CREATE TABLE tb1 (c1 INTEGER PRIMARY KEY);

CREATE TABLE tb2 (
c1 INTEGER,
c2 INTEGER,
PRIMARY KEY(c1,c2),
CONSTRAINT fktb2 FOREIGN KEY (c1) REFERENCES tb1 (c1) ON UPDATE CASCADE
ON DELETE CASCADE
);

CREATE OR REPLACE FUNCTION test1(INTEGER) RETURNS BOOLEAN AS '
BEGIN
DELETE FROM tb1 WHERE c1 = $1;

INSERT INTO tb1 VALUES($1);
INSERT INTO tb2 VALUES($1,200);

RETURN TRUE;
END' LANGUAGE PLPGSQL STABLE;

SELECT test1(1);
SELECT test1(1);

The second "SELECT test1(1)" produces:

ERROR: Canont insert a duplicate key into unique index tb2_key

If rows in tb1 is deleted in psql prompt:

DELETE FROM tb1;

then "SELECT test1(1)" works again.

CREATE OR REPLACE FUNCTION test2(INTEGER) RETURNS INT2 AS '
DECLARE
n int2;
BEGIN
DELETE FROM tb2 WHERE c1 = $1;
DELETE FROM tb1 WHERE c1 = $1;

INSERT INTO tb1 VALUES($1);
INSERT INTO tb2 VALUES($1,200);

GET DIAGNOSTICS n=ROW_COUNT;
RETURN n;
END' LANGUAGE PLPGSQL STABLE;

SELECT test2(1); --1 row is returned
SELECT test2(1); --1 row is returned
SELECT * FROM tb2; --0 row is returned.

Regards,

CN

--
http://www.fastmail.fm - The way an email service should be

Browse pgsql-bugs by date

  From Date Subject
Next Message Ivan E. Rivera Uria 2003-10-21 17:45:14 Re: data forma error in pgsql 7.1
Previous Message John Griffiths 2003-10-20 11:45:52 Re: 7.3 interval casting broken (7.4 OK)