On 3 September 2014 15:20, Pavel Stehule <pavel.steh...@gmail.com> wrote:
> Hi > > you can define || operator for char(N) type > > postgres=# select oprname, oprleft::regtype, oprright::regtype from > pg_operator where oprname = '||' > ; > oprname | oprleft | oprright > ---------+-------------+------------- > || | bytea | bytea > || | text | text > || | text | anynonarray > || | bit varying | bit varying > || | anyarray | anyarray > || | anyarray | anyelement > || | anyelement | anyarray > || | anynonarray | text > || | tsvector | tsvector > || | tsquery | tsquery > (10 rows) > > > it is defined only for text, and value char(n) is reduced when it is > converted probably > > postgres=# create or replace function concat_character(character, > character) returns text as $$ select concat($1,$1)$$ language sql; > CREATE FUNCTION > > postgres=# create operator || (procedure = concat_character, leftarg = > character, rightarg = character); > CREATE OPERATOR > postgres=# select 'abc '::char(7) || 'dbe '::char(6); > ?column? > ---------------- > abc abc > (1 row) > > concat is variadic "any" function, so implicit casting character(n) -> > text is not used there > > > Pavel > > Hi Pavel, I think we should have this in core, as this definitely is a bug. Szymon