On Friday, April 11, 2025, Tom Lane <t...@sss.pgh.pa.us> wrote:

> jian he <jian.universal...@gmail.com> writes:
> > CREATE TABLE gtest1 (a int, b int GENERATED ALWAYS AS (a * 2) STORED);
> > CREATE VIEW gtest1v AS SELECT * FROM gtest1;
> > ALTER VIEW gtest1v ALTER COLUMN b SET DEFAULT 100;
>
> > INSERT INTO gtest1v VALUES (8, DEFAULT) returning *;
> > ERROR:  cannot insert a non-DEFAULT value into column "b"
> > DETAIL:  Column "b" is a generated column.
>
> > we can make
> > ALTER VIEW gtest1v ALTER COLUMN b SET DEFAULT 100;
> > error out,
>
> This is not an improvement over having the error happen at run time.
>
> (1) What if the state of the underlying column changes between the
> ALTER VIEW and the INSERT?  Either you have rejected something
> that could have worked, or in the other direction you're going to get
> the run-time error anyway.
>

I concur.  The view is only loosely coupled to the base relation, via the
rewrite rule which is applied at runtime.  Putting checks in place that
strongly couples the two relations adds a coupling burden that we are
better off avoiding.

David J.

Reply via email to