2017-12-21 15:19 GMT+01:00 Tom Lane <t...@sss.pgh.pa.us>: > 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. >
ok, I understand The trick with immutable function should be better documented - now It looks like generally used solution of some optimizer issues related to domain usage. Regards Pavel > > regards, tom lane >