"David E. Wheeler" <[EMAIL PROTECTED]> writes: > When I deleted any of the others, I got errors like this:
> psql:sql/citext.sql:865: ERROR: function length(citext) is not unique > LINE 1: SELECT is( length( name ), length(name::text), 'length("' ||... > ^ > HINT: Could not choose a best candidate function. You might need to > add explicit type casts. Hmm. I think what that actually means is that the cast from citext to bpchar should be AS ASSIGNMENT rather than IMPLICIT. What is happening is that the system can't figure out whether to use length(text) or length(bpchar) when presented with a citext argument. I had been thinking yesterday that it would automatically prefer length(text) because text is a "preferred type", but after tracing through it I see that that doesn't happen because citext is not thought to be of the string category. (We really need a way to let user-defined types specify their category...) The fact that you need all these piggyback functions is a red flag because what it implies is that citext will not work nicely for any situation where both text and bpchar functions have been provided --- and that includes user-added functions, so it's hopeless to think that you can get to a solution this way. Downgrading the cast seems like the right thing to me. The implicit cast to varchar is a bit worrisome because it creates the same issue if someone has provided both varchar and text versions of a function. However, that seems a bit pointless given the lack of semantic difference, and I suspect that a lot of user-written functions come only in varchar variants --- so on balance my recommendation is to keep that one as implicit. regards, tom lane -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers