Thread: collation, arrays, and ranges
My interpretation of collation for range types is different than that for arrays, so I'm presenting it here in case someone has an objection. An array type has the same typcollation as its element type. This makes sense, because comparison between arrays are affected by the COLLATE clause. Comparison between ranges should not be affected by the COLLATE clause (as we discussed). So, I chose to represent that as a separate rngcollation and leave the typcollation 0. In other words, collation is a concept internal to that range type and fixed at type definition time. Range types are affected by their internal collation, but don't take part in the logic that passes collation through the type system. Comments? Regards,Jeff Davis
Jeff Davis <pgsql@j-davis.com> writes: > My interpretation of collation for range types is different than that > for arrays, so I'm presenting it here in case someone has an objection. > An array type has the same typcollation as its element type. This makes > sense, because comparison between arrays are affected by the COLLATE > clause. > Comparison between ranges should not be affected by the COLLATE clause > (as we discussed). Check. > So, I chose to represent that as a separate > rngcollation and leave the typcollation 0. In other words, collation is > a concept internal to that range type and fixed at type definition time. > Range types are affected by their internal collation, but don't take > part in the logic that passes collation through the type system. Should I read that as saying you want to add yet another column to pg_type? I'd prefer not to do that. Seems to me we could still store the value in typcollation, but just interpret the column a bit differently depending on typtype. regards, tom lane
On Sat, 2011-09-10 at 13:21 -0400, Tom Lane wrote: > > So, I chose to represent that as a separate > > rngcollation and leave the typcollation 0. In other words, collation is > > a concept internal to that range type and fixed at type definition time. > > Range types are affected by their internal collation, but don't take > > part in the logic that passes collation through the type system. > > Should I read that as saying you want to add yet another column to > pg_type? I'd prefer not to do that. Seems to me we could still store > the value in typcollation, but just interpret the column a bit > differently depending on typtype. I added the column to pg_range (rngcollation), which seemed a little less invasive than either of the other options (either adding a new column to pg_type or overloading the existing one). I was worried about having the same column in pg_type mean two different things -- every caller of get_typcollation would need to be careful. Regards,Jeff Davis