Pavel Stehule <pavel.steh...@gmail.com> writes: > 2017-12-20 23:41 GMT+01:00 Tom Lane <t...@sss.pgh.pa.us>: >> Hm, scratch that --- experimentation shows that the parser still produces >> a CoerceToDomain node in that case, not a literal of the domain type.
> Why the rewrite doesn't reduce it? Or why parser does it? Because ALTER DOMAIN can change what would be a valid value. regression=# create domain myd as int; CREATE DOMAIN regression=# create view v1 as select 0::myd as c1; CREATE VIEW regression=# select * from v1; c1 ---- 0 (1 row) regression=# alter domain myd add check (value > 0); ALTER DOMAIN regression=# select * from v1; ERROR: value for domain myd violates check constraint "myd_check" If the view's expression had been reduced to just a Const when it was stored, we'd not notice that the value is no longer valid for the domain. So CoerceToDomain is always postponed till runtime. regards, tom lane