Re: inherit support for foreign tables

Поиск
Список
Период
Сортировка
От Shigeru Hanada
Тема Re: inherit support for foreign tables
Дата
Msg-id CAEZqfEc6MkEx+L=bQHVPEjr_+LgWSzy8uA11ci=X0A8VEPRmiw@mail.gmail.com
обсуждение исходный текст
Ответ на Re: inherit support for foreign tables  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Inheritance and indexes  (knizhnik <knizhnik@garret.ru>)
Re: inherit support for foreign tables  (Shigeru Hanada <shigeru.hanada@gmail.com>)
Re: inherit support for foreign tables  (KaiGai Kohei <kaigai@ak.jp.nec.com>)
Список pgsql-hackers
2013/11/18 Tom Lane <tgl@sss.pgh.pa.us>:
> Robert Haas <robertmhaas@gmail.com> writes:
>> I think it's been previously proposed that we have some version of a
>> CHECK constraint that effectively acts as an assertion for query
>> optimization purposes, but isn't actually enforced by the system.  I
>> can see that being useful in a variety of situations, including this
>> one.
>
> Yeah, I think it would be much smarter to provide a different syntax
> to explicitly represent the notion that we're only assuming the condition
> is true, and not trying to enforce it.

I'd like to revisit this feature.

Explicit notation to represent not-enforcing (assertive?) is an
interesting idea.  I'm not sure which word is appropriate, but for
example, let's use the word ASSERTIVE as a new constraint attribute.

CREATE TABLE parent (   id int NOT NULL,   group int NOT NULL,   name text
);

CREATE FOREIGN TABLE child_grp1 ( /* no additional column */
) INHERITS (parent) SERVER server1;
ALTER  TABLE child_grp1 ADD CONSTRAINT chk_group1 CHECK (group = 1) ASSERTIVE;

If ASSERTIVE is specified, it's not guaranteed that the constraint is
enforced completely, so it should be treated as a hint for planner.
As Robert mentioned, enforcing as much as we can during INSERT/UPDATE
is one option about this issue.

In addition, an idea which I can't throw away is to assume that all
constraints defined on foreign tables as ASSERTIVE.  Foreign tables
potentially have dangers to have "wrong" data by updating source data
not through foreign tables.  This is not specific to an FDW, so IMO
constraints defined on foreign tables are basically ASSERTIVE.  Of
course PG can try to maintain data correct, but always somebody might
break it.

Besides CHECK constraints, currently NOT NULL constraints are
virtually ASSERTIVE (not enforcing).  Should it also be noted
explicitly?

Thoughts?

--
Shigeru HANADA



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

Предыдущее
От: Pavel Stehule
Дата:
Сообщение: Re: plpgsql.consistent_into
Следующее
От: Kyotaro HORIGUCHI
Дата:
Сообщение: Trigger information for auto_explain.