Re: Subqueries in Check() -- Still Intentionally Omitted?

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: "Richard Broersma" <richard(dot)broersma(at)gmail(dot)com>
Cc: PostgreSQL <pgsql-general(at)postgresql(dot)org>
Subject: Re: Subqueries in Check() -- Still Intentionally Omitted?
Date: 2008-09-02 22:57:05
Message-ID: 7643.1220396225@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

"Richard Broersma" <richard(dot)broersma(at)gmail(dot)com> writes:
> I am curious if the motivation is still valid for intentionally
> omitting check sub-queries. (what was the motivation to begin with?)

> Since we can effectively work around this limitation by doing the same
> thing with a function in a CHECK constraint, why would we want to
> prevent anyone from using the standard syntax for achieving the same
> effect?

Because if we supported the standard syntax, we'd also have to support
the standard semantics; which a function-in-CHECK does *not* give you.

The standard says that the constraint is guaranteed not to be violated,
which in the worst case means that any time you update the table(s)
referenced in the subquery, you have to retest the CHECK expression
at every row of the table having the constraint. Consider for instance
CREATE TABLE t1 (x int CHECK (x < (SELECT sum(y) FROM t2)));
If we change some value of t2.y, do all values of t1.x still satisfy
their constraint?

In some cases, with enough intelligence you could optimize this into
something fast enough to be usable; but it's a research problem.
(The cases that I can see how to optimize are pretty much equivalent to
plain foreign key constraints, anyway.)

regards, tom lane

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Jeff Davis 2008-09-02 23:06:56 Re: Subqueries in Check() -- Still Intentionally Omitted?
Previous Message Alvaro Herrera 2008-09-02 22:47:44 Re: Subqueries in Check() -- Still Intentionally Omitted?