Re: Why we allow CHECK constraint contradiction?

Поиск
Список
Период
Сортировка
От Corey Huinker
Тема Re: Why we allow CHECK constraint contradiction?
Дата
Msg-id CADkLM=crEGxL4=29TscqEb4p7nke0e1kGOWJPADpykKm8FQ82A@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Why we allow CHECK constraint contradiction?  ("David G. Johnston" <david.g.johnston@gmail.com>)
Ответы RE: Why we allow CHECK constraint contradiction?
Список pgsql-hackers


On Wed, Oct 10, 2018 at 1:44 AM David G. Johnston <david.g.johnston@gmail.com> wrote:
On Tuesday, October 9, 2018, Imai, Yoshikazu <imai.yoshikazu@jp.fujitsu.com> wrote:
Are there any rows which can satisfy the ct's CHECK constraint? If not, why we
allow creating table when check constraint itself is contradicted?

I'd bet on it being a combination of complexity and insufficient expected benefit.  Time is better spent elsewhere.  Mathmatically proving a contradiction in software is harder than reasoning about it mentally.

I've actually used that as a feature, in postgresql and other databases, where assertions were unavailable, or procedural code was unavailable or against policy.

Consider the following:

CREATE TABLE wanted_values ( x integer );

INSERT INTO wanted_values VALUES (1), (2), (3);


CREATE TABLE found_values ( x integer );

INSERT INTO found_values VALUES (1), (3);


CREATE TABLE missing_values (

    x integer,

    CONSTRAINT contradiction CHECK (false)

);


INSERT INTO missing_values

SELECT x FROM wanted_values

EXCEPT

SELECT x FROM found_values;


gives the error

ERROR:  new row for relation "missing_values" violates check constraint "contradiction"

DETAIL:  Failing row contains (2).


Which can be handy when you need to fail a transaction because of bad data and don't have branching logic available.

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

Предыдущее
От: "David G. Johnston"
Дата:
Сообщение: Re: Why we allow CHECK constraint contradiction?
Следующее
От: Amit Langote
Дата:
Сообщение: Re: Why we allow CHECK constraint contradiction?