Обсуждение: Bug: citext not working in non-public schema

Поиск
Список
Период
Сортировка

Bug: citext not working in non-public schema

От
Anders Steinlein
Дата:
Researching a nasty bug discovered in our application led me to this bug 
report and its follow-ups: 
http://archives.postgresql.org/pgsql-bugs/2010-03/msg00058.php

This bit us hard (on PostgreSQL 8.4.4). We have a custom domain for 
email addresses based on citext, placed in the public schema, while each 
user of our application has their own private schemas. The search path 
is set to their private schemas, and the few queries which required 
explicit access to the type prefixes the type with the public schema, 
i.e. WHERE 'text@example.com'::public.email = email_column.

This *seems* to work, in that no error or warning is thrown, but 
comparisons are simply silently wrong. This led to a nasty bug in our 
application as it broke our expectation that the database should enforce 
this case-insensitive checks.

Any possibility of getting this fixed? Obliviously I would prefer citext 
to work as advertised across schemas. If not, an out-right error thrown 
would be much better and consistent than the current situation.

Regards,
-- anders


Re: Bug: citext not working in non-public schema

От
Tom Lane
Дата:
Anders Steinlein <anders@steinlein.no> writes:
> http://archives.postgresql.org/pgsql-bugs/2010-03/msg00058.php

> This bit us hard (on PostgreSQL 8.4.4). We have a custom domain for 
> email addresses based on citext, placed in the public schema, while each 
> user of our application has their own private schemas. The search path 
> is set to their private schemas, and the few queries which required 
> explicit access to the type prefixes the type with the public schema, 
> i.e. WHERE 'text@example.com'::public.email = email_column.

Put the citext stuff in a schema that *is* in everyone's search path.
It doesn't have to be "public", but it does have to be visible.

> Any possibility of getting this fixed? Obliviously I would prefer citext 
> to work as advertised across schemas. If not, an out-right error thrown 
> would be much better and consistent than the current situation.

The only way to have an error be thrown would be if you remove the
implicit cast from citext to text ... which is going to be a far worse
notational pain in the rear than fixing your search_path.
        regards, tom lane