Thread: Trying to add a type modifier to user created type
Hi *, I have the following problem: I wanted to add a new type that supports modifiers (comparable to numeric/varchar). I succeeded in adding the type modifierfunctions to my new type. These methods are called and the modifier is set. However the modifiers are not appliedhere. I don't know exactly how to get the modifiers to be applied to my type. I looked into the source code of varchar/numericand a function called the same name as the type is added in there that gets called with a value of the particulartype and the typmod, respectively. But I don't know, how to register this function properly in order to get called,when sth is to be stored in the database. I also set up such a function and registered it in pg_proc (just calledcreate function and made it public like this). My problem is that I don't know how to tell the database system whento call my function. I don't see any possibility to do this here. Even reading the code of numeric/varchar didn't help,because it just works in there. Where do I have to set up that this function is to be called when the modifier is tobe applied? I thought, there would be something "magic" that just calls the function named as the given type in order toapply the modifiers. My modifier function, however is never called. The type modifiers (typmodin and typmodout) are calledproperly when requesting a description of the particular table or setting the modifier. However, unfortunately, itis never applied to my column. How can I achieve this/What do I have to do to get it to work? Best regards Carsten Kropf
Carsten Kropf wrote: > Hi *, > I have the following problem: > I wanted to add a new type that supports modifiers (comparable to numeric/varchar). I succeeded in adding the type modifierfunctions to my new type. These methods are called and the modifier is set. However the modifiers are not appliedhere. I don't know exactly how to get the modifiers to be applied to my type. I looked into the source code of varchar/numericand a function called the same name as the type is added in there that gets called with a value of the particulartype and the typmod, respectively. But I don't know, how to register this function properly in order to get called,when sth is to be stored in the database. > column. How can I achieve this/What do I have to do to get it to work? > It's been a while but I still remember exactly the same question (frustration?) from some while ago (maybe it is something for the docs) You need to add a cast from the type to itself, e.g. -- typmod coercion CREATE CAST (complex AS complex) WITH FUNCTION complextypmod(complex,int4) AS IMPLICIT; Where complextypemod would be the typmod apply functions (int4 is the typmod) Regards, Yeb Havinga
Yeb Havinga <yebhavinga@gmail.com> writes: > Carsten Kropf wrote: >> I wanted to add a new type that supports modifiers (comparable to >> numeric/varchar). > You need to add a cast from the type to itself, e.g. The CREATE CAST reference page has the gory details here. regards, tom lane
Thanks a lot so far, got it working with the cast. Probably the documentation about create type where the type modifiersare described should be extended in order to find that. Thanks and regards Carsten Kropf Am 18.02.2010 um 16:46 schrieb Tom Lane: > Yeb Havinga <yebhavinga@gmail.com> writes: >> Carsten Kropf wrote: >>> I wanted to add a new type that supports modifiers (comparable to >>> numeric/varchar). > >> You need to add a cast from the type to itself, e.g. > > The CREATE CAST reference page has the gory details here. > > regards, tom lane > > -- > Sent via pgsql-general mailing list (pgsql-general@postgresql.org) > To make changes to your subscription: > http://www.postgresql.org/mailpref/pgsql-general