referential integrity constraints not checked inside PL/pgSQL functions?

Поиск
Список
Период
Сортировка
От Christian Rank
Тема referential integrity constraints not checked inside PL/pgSQL functions?
Дата
Msg-id 40A342C4.3010303@rz.uni-passau.de
обсуждение исходный текст
Ответы Re: referential integrity constraints not checked inside PL/pgSQL functions?  (Patrick Welche <prlw1@newn.cam.ac.uk>)
Re: referential integrity constraints not checked inside  (James M Moe <jimoe@sohnen-moe.com>)
Список pgsql-general
Hello,

I came across the following problem with integrity constraints and
PL/pgSQL (PostgreSQL version used: 7.4.2):

I defined the following tables, constraints and data:

    create table a (n integer);
    create table b (n integer);
    alter table a add primary key (n);
    alter table b add foreign key (n) references a(n);
    insert into a values (1);
    insert into b values (1);

When trying to execute
    delete from a;
this is denied, since the integrity constraint would be violated.

So far, so good.

Now I defined the following function:

    create function f () returns void as '
    begin
      delete from a;
      delete from b;
      return;
    end;
    ' language plpgsql;

I would expect that

    select f();

yields an error message about constraint violation when executing
'delete from a;'.

However, the function is executed without errors, and the tables a and b
are empty after this operation.

It seems that the validity of (integrity) constraints is not checked
inside a function, only after executing a function. Is this a bug or a
feature?

Thanks in advance for your advice,

--
Dr. Christian Rank
Rechenzentrum Universität Passau
Innstr. 33
D-94032 Passau
GERMANY
Tel.: 0851/509-1838
Fax:  0851/509-1802
PGP public key see http://www.rz.uni-passau.de/mitarbeiter/rank



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

Предыдущее
От: Jan Poslusny
Дата:
Сообщение: Re: Functionality in database or external langauge
Следующее
От: Patrick Welche
Дата:
Сообщение: Re: referential integrity constraints not checked inside PL/pgSQL functions?