am Tue, dem 23.01.2007, um 23:47:08 -0800 mailte Saravanan Bellan folgendes: > We have database table with the following columns, > > foo > ------------------ > name VARCHAR(20) > bar NUMERIC(20,0) > > We were running version 7.2.1 until now. > > The following SQL used to work fine in 7.2.1, > > SELECT name FROM foo WHERE (bar & 64) <> 0; > > > Now we upgraded to version 8.1.5 and getting the error, > > ERROR: operator does not exist: numeric & integer > HINT: No operator matches the given name and argument type(s). You may > need to add explicit type casts. > > NUMERIC(20,0) is probably not the best way to define a column to be used > for bit arithmetic, but we cant change the column type because of > legacy. > > Is there anyway I can get the existing SQL to work without any changes > on the application side. Try to create a now operator like this: test=# create table foo (name varchar(20), bar NUMERIC(20,0)); CREATE TABLE test=*# commit; COMMIT test=# create function f_foo(numeric, int) returns int as $$ begin return ($1::int) & $2; end; $$ language 'plpgsql'; CREATE FUNCTION test=*# create operator & (leftarg = numeric, rightarg = int, procedure = f_foo, commutator = & ); CREATE OPERATOR test=*# SELECT name FROM foo WHERE (bar & 64) <> 0; name ------ (0 rows) Andreas -- Andreas Kretschmer Kontakt: Heynitz: 035242/47150, D1: 0160/7141639 (mehr: -> Header) GnuPG-ID: 0x3FFF606C, privat 0x7F4584DA http://wwwkeys.de.pgp.net