[SQL] argument type problem with plpgsql function
I wrote a little function that has to work with big numbers CREATE OR REPLACE FUNCTION blast_evalue(seq_len bigint, db_size bigint, bit_score double precision) RETURNS double precision AS $$ BEGIN RETURN 2^(bit_score) * db_size * seq_len; END; $$ LANGUAGE 'plpgsql' IMMUTABLE RETURNS NULL ON NULL INPUT; but it doesn't work properly unless I cast the db_size parameter when I call the function: select blast_evalue(273, 8903836, -55.4546); blast_evalue -- 2430747228 - wrong number. This is 273 * 8903836 (1 row) select blast_evalue(273, 8903836::bigint, -55.4546); blast_evalue - 4.9231356421437e-08 - that's correct (1 row) I don't understand why the cast is necessary. Is there a way to make this work without it? Thanks Luca ---(end of broadcast)--- TIP 2: Don't 'kill -9' the postmaster
Re: [SQL] argument type problem with plpgsql function
On Tue, 22 Nov 2005, Luca Pireddu wrote: I wrote a little function that has to work with big numbers CREATE OR REPLACE FUNCTION blast_evalue(seq_len bigint, db_size bigint, bit_score double precision) RETURNS double precision AS $$ BEGIN RETURN 2^(bit_score) * db_size * seq_len; END; $$ LANGUAGE 'plpgsql' IMMUTABLE RETURNS NULL ON NULL INPUT; but it doesn't work properly unless I cast the db_size parameter when I call the function: select blast_evalue(273, 8903836, -55.4546); blast_evalue -- 2430747228 - wrong number. This is 273 * 8903836 (1 row) select blast_evalue(273, 8903836::bigint, -55.4546); blast_evalue - 4.9231356421437e-08 - that's correct (1 row) I don't understand why the cast is necessary. Is there a way to make this work without it? I got the same answer (the second) for both calls from my 8.0 and 8.1 setups, what version were you trying on? ---(end of broadcast)--- TIP 5: don't forget to increase your free space map settings
Re: [SQL] argument type problem with plpgsql function
On November 22, 2005 17:13, Stephan Szabo wrote: On Tue, 22 Nov 2005, Luca Pireddu wrote: [snip] I got the same answer (the second) for both calls from my 8.0 and 8.1 setups, what version were you trying on? I forgot to mention that. I'm using version 8.0.4, built from source. I just tried it at home on a postgresql 8.0.3 server (debian package) and it worked the way it's supposed to. Puzzling... Luca ---(end of broadcast)--- TIP 6: explain analyze is your friend
Re: [SQL] argument type problem with plpgsql function
Luca Pireddu [EMAIL PROTECTED] writes: I just tried it at home on a postgresql 8.0.3 server (debian package) and it worked the way it's supposed to. Puzzling... Maybe you have more than one blast_evalue() function with different argument types? regards, tom lane ---(end of broadcast)--- TIP 3: Have you checked our extensive FAQ? http://www.postgresql.org/docs/faq
Re: [SQL] argument type problem with plpgsql function
On November 22, 2005 20:24, Tom Lane wrote: Luca Pireddu [EMAIL PROTECTED] writes: I just tried it at home on a postgresql 8.0.3 server (debian package) and it worked the way it's supposed to. Puzzling... Maybe you have more than one blast_evalue() function with different argument types? You were right! A blast_evalue(integer, integer, double precision). Thank you for your help. Luca ---(end of broadcast)--- TIP 4: Have you searched our list archives? http://archives.postgresql.org