It may be that the cast is taking the high bit and not the low bit. I would have thought it went the other way.
On Sun, Apr 18, 2004 at 04:04:08PM -0300, PostgreSQL Bugs List wrote: > > The following bug has been logged online: > > Bug reference: 1135 > Logged by: elein > > Email address: [EMAIL PROTECTED] > > PostgreSQL version: 7.4 > > Operating system: SuSE > > Description: integer::bit returns incorrect results > > Details: > > > * There exists a cast utils/adt.c/bitfromint4() > in pg_casts listed to cast an integer to a bit. > > This cast seems to always set the value to 0. > On cursory glance bitfromint4 seems right, but > the shortcut shifting could be wrong. (Why isn't > just the low bit set?). > > If I have time, I'll look more carefully, and > perhaps submit a patch unless someone gets to > it before I do. > > * There is no cast from an integer to a bit varying. > > If there exists a cast from integer to bit (in question :-) > there should be one from integer to bit varying. > It should be a straight copy. > > These all return 0. > select 1::bit; > select 2::bit; > select 111::bit; > select 101::bit; > > elein=# select 1::bit varying; > ERROR: cannot cast type integer to bit varying > > > Side note: the text string cast to bit and bit varying > works fine and the digits are limited to 1s and 0s. > But that should not be how integer to bit/bit varying should > work. > > elein=# select '101'::bit; > bit > ----- > 1 > (1 row) > > elein=# select '2'::bit; > ERROR: "2" is not a valid binary digit > > > > ---------------------------(end of broadcast)--------------------------- > TIP 6: Have you searched our list archives? > > http://archives.postgresql.org ---------------------------(end of broadcast)--------------------------- TIP 8: explain analyze is your friend