Re: on cascade set null works on not null columns

Поиск
Список
Период
Сортировка
От Bruce Momjian
Тема Re: on cascade set null works on not null columns
Дата
Msg-id 200401261840.i0QIee017168@candle.pha.pa.us
обсуждение исходный текст
Ответ на on cascade set null works on not null columns  (Baldur Norddahl <bbn-pgsql.general@clansoft.dk>)
Список pgsql-general
Baldur Norddahl wrote:
> Hi,
>
> I just noticed that I could do this:
>
> webshop=# create table foo (bar text not null primary key);
> NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "foo_pkey" for
> table "foo"
> CREATE TABLE
> webshop=# create table foo2 (bar text not null, foreign key (bar) references
> foo(bar) on update cascade on delete set null);
> CREATE TABLE
> webshop=# insert into foo values ('a');
> INSERT 6644065 1
> webshop=# insert into foo2 values ('a');
> INSERT 6644066 1
> webshop=# delete from foo;
> ERROR:  null value in column "bar" violates not-null constraint
>
> I would have expected the second create table to fail. This didn't allow me to
> violate constraints, but it made the error message unintuitive. You get no
> clues to which table is actually preventing me from deleting from 'foo'. This
> is in contrast to if I use no action:
>
> webshop=# drop table foo2;
> DROP TABLE
> webshop=# create table foo2 (bar text not null, foreign key (bar) references
> foo(bar) on update cascade on delete no action);
> CREATE TABLE
> webshop=# insert into foo2 values ('a');
> INSERT 6644189 1
> webshop=# delete from foo;
> ERROR:  update or delete on "foo" violates foreign key constraint "$1" on
> "foo2"
> DETAIL:  Key (bar)=(a) is still referenced from table "foo2".
>
> This time I get a useful error message.

We have a TODO item to print the table name with the constraint name:

    * Print table names with constraint names in error messages, or
    make constraint names unique within a schema

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

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

Предыдущее
От: Jerome Lyles
Дата:
Сообщение: Where is initdb?
Следующее
От: Nuno Morgadinho
Дата:
Сообщение: Executing a query and returning the result set using the SPI