Text comparison suddenly can't find collation?

Lists: pgsql-hackers
From: "Johann 'Myrkraverk' Oskarsson" <johann(at)2ndquadrant(dot)com>
To: PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Text comparison suddenly can't find collation?
Date: 2012-01-13 05:49:08
Message-ID: x6ty402luz.fsf@2ndquadrant.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

Hi all,

Why would a string comparison work in one case and not another? In
the following example, it works to compare a and b, but not a and d.

This is in a C module which calls

DirectFunctionCall2( text_le, d1, d2 );

DEBUG: Comparing a == b
DEBUG: Comparing a == d
ERROR: could not determine which collation to use for string
comparison

I'll try and see if I can come up with a minimal example in a bit.

--
Johann Oskarsson http://www.2ndquadrant.com/ |[]
PostgreSQL Development, 24x7 Support, Training and Services --+--
|
Blog: http://my.opera.com/myrkraverk/blog/


From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: "Johann 'Myrkraverk' Oskarsson" <johann(at)2ndquadrant(dot)com>
Cc: PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Text comparison suddenly can't find collation?
Date: 2012-01-13 15:43:37
Message-ID: 20263.1326469417@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

"Johann 'Myrkraverk' Oskarsson" <johann(at)2ndquadrant(dot)com> writes:
> Why would a string comparison work in one case and not another? In
> the following example, it works to compare a and b, but not a and d.

> This is in a C module which calls
> DirectFunctionCall2( text_le, d1, d2 );

As of 9.1, I'd expect that coding to fail every time. text_le needs to
be passed a collation, and you aren't doing so. You need to be using
DirectFunctionCall2Coll.

Where to get the collation from might be an interesting question too,
but without more context it's hard to guess what will be appropriate for
you.

regards, tom lane