Martijn van Oosterhout <firstname.lastname@example.org> writes: > I'm still missing the argument of why you can't just make a 16-byte > type. Around half the datatypes in postgresql are fixed-length and have > no header. I'm completely confused about why people are hung up about > bytea(16) not being fixed length when it's trivial to create a type > that is.
Because by the time you have a CHAR(1), CHAR(2), CHAR(4), and CHAR(8) your head is already swimming trying to keep track of all the casts and cross-data-type comparators and you haven't even covered all the cases. If you define types just for the lengths up to 128 you would have 16,384 casts and 114,688 different cross-data-type comparisons just between them. Without them you wouldn't be able to have things like phone_number char(10) area_code char(3) and do things like: WHERE phone_number LIKE area_code||'%' And before you say so, sure this isn't the only way to do this and there are reasons why this may not be the best. But if you were shipping separate data types for char(3) and char(10) I think it would be a bug if the above didn't work. The problem is worse with numeric in that it would definitely be a bug if you couldn't use an index when comparing two numeric columns just because one had less precision than the other. There wouldn't be nearly as many types but even with just three such types you're already talking about hundreds of cross-data-type comparisons. Would others really consider shipping hundreds of new types to take care of this problem? I was looking for a more general solution. -- Gregory Stark EnterpriseDB http://www.enterprisedb.com ---------------------------(end of broadcast)--------------------------- TIP 2: Don't 'kill -9' the postmaster