Contraints problem in PLPGSQL

Поиск
Список
Период
Сортировка
От CN
Тема Contraints problem in PLPGSQL
Дата
Msg-id 20031021040930.A25F279505@smtp.us2.messagingengine.com
обсуждение исходный текст
Список 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

В списке pgsql-bugs по дате отправления:

Предыдущее
От: John Griffiths
Дата:
Сообщение: Re: 7.3 interval casting broken (7.4 OK)
Следующее
От: "Ivan E. Rivera Uria"
Дата:
Сообщение: Re: data forma error in pgsql 7.1