Re: How to modify default Type (TSQuery) behaviour? - Mailing list pgsql-hackers
From | Łukasz Dejneka |
---|---|
Subject | Re: How to modify default Type (TSQuery) behaviour? |
Date | |
Msg-id | z2y4df5da451004091035ye5fc99boa6f6eef696ef61fa@mail.gmail.com Whole thread Raw |
In response to | How to modify default Type (TSQuery) behaviour? (Łukasz Dejneka <l.dejneka@gmail.com>) |
List | pgsql-hackers |
Oleg Bartunov suggested that I should explicitly use set search_path=public,pg_catalog; That's a good tip, as I missed the info in the manual, but it solved only one instance of my problem, namely SELECT to_tsquery('cat & dog & mouse'); --this now works as it should But the other instances still use the default INPUT/OUTPUT functions and are not affected by schema setting: SELECT 'cat & dog & mouse'::tsquery; --uses the built in function SELECT CAST('dogs & cat' AS tsquery); --uses the built in function SELECT public.to_tsquery('dog " mouse'); --new operator (doublequote), works fine until OUTPUT function is called and as it is the default one an error is displayed Is there any other way I could overwrite the default functions for a built in type in Postgres? 2010/4/9 Łukasz Dejneka <l.dejneka@gmail.com>: > Hi all > > I've asked related question on General list, but got no answer, > although I have been able to work around that issue a little bit. > There is one snag I encountered and I have no idea on how to work it > out. > > I need to modify TSQuery object (add another operator and do some > stuff with it) - this is done and works properly at C code level. Now > I need to implement changes done in C on PG level. I really do not > want to make another type, tsquery2 or such... > > What I've tried: > - the manual states that you can create your own data types with > CREATE TYPE command and alter some of their proprieties with ALTER > TYPE. But it is not possible to modify INPUT or OUTPUT function. > - I have created updated PG versions of the functions to_tsquery (the > CAST function) and tsqueryout (the TYPE OUTPUT) function and they are > in the "public" schema. > - I have created a CAST from text to tsquery pointing to > public.to_tsquery function. > - I have changed the search_path so the "public" schema is first. > > How do I overwrite the default behaviour of Postgres 8.4, so I can > successfully run the following queries: > > --1. > SELECT 'cat & dog & mouse'::tsquery; --uses the built in function > SELECT to_tsquery('cat & dog & mouse'); --also uses the built in function > --but > SELECT public.to_tsquery('cat & dog & mouse'); --uses new functions > > --2. > SELECT CAST('dogs & cat' AS tsquery); --uses the built in function > --but > SELECT CAST('dogs & cat'::text AS tsquery); --uses new functions > > --3. > SELECT public.to_tsquery('dog " mouse'); --new operator (doublequote), > works fine until OUTPUT function is called and as it is the default > one an error is displayed > --but > SELECT public.tsqueryout(CAST('dogs " cat'::text AS tsquery)); --uses > new functions and displays correctly > > I thought that setting schema so "public" has priority over all other > would make PG use those functions in the first place. Also is the > string between the single quotes in SQL commands not treated as text > type? Is this why a CAST to ::text make it work in example 2? > > Thanks in advance. >
pgsql-hackers by date: