2014-04-02 17:19 GMT+02:00 Tom Lane <t...@sss.pgh.pa.us>: > Pavel Stehule <pavel.steh...@gmail.com> writes: > > I was informed about impossibility to use a polymorphic functions > together > > with domain types > > > see > > > create domain xx as numeric(15); > > > create or replace function g(anyelement, anyelement) > > returns anyelement as > > $$ select $1 + $2 $$ > > language sql immutable; > > > postgres=# select g(1::xx, 2::xx); > > ERROR: return type mismatch in function declared to return xx > > DETAIL: Actual return type is numeric. > > CONTEXT: SQL function "g" during inlining > > That example doesn't say you can't use polymorphic functions with domains. > It says that this particular polymorphic function definition is wrong: > it is not making sure its result is of the expected data type. I don't > recall right now whether SQL functions will apply an implicit cast on the > result for you, but even if they do, an upcast from numeric to some domain > over numeric wouldn't be implicit. >
I though about this issue again, and I am thinking so it is PostgreSQL bug we can do safe transformation from Parent type -> domain. and returning result require same transformation (in this case) - so enforcing casting (not only binary casting) should be safe. Otherwise - CAST(var AS var) should be useful and can helps too. Regards Pavel Stehule > > regards, tom lane >