function signature: kenneth@gilgamesh:~/Maildir/.spam-missed/cur$ grep -A6 put_token /usr/share/doc/spamassassin/sql/bayes_pg.sql CREATE OR REPLACE FUNCTION put_tokens(inuserid INTEGER, intokenary BYTEA[], inspam_count INTEGER, inham_count INTEGER, inatime INTEGER) original perl code to call the function: 998- my $tokenarray = join(",", map { '"' . _quote_bytea($_) . '"' } sort keys %{$tokens}); 999- 1000: my $sth = $self->{_dbh}->prepare("select put_tokens($self->{_userid}, '{$tokenarray}', 1001- $spam_count, $ham_count, $atime)"); results in: 2007-05-27 13:34:29 EDT ERROR: function put_tokens(integer, "unknown", integer, integer, integer) does not exist 2007-05-27 13:34:29 EDT HINT: No function matches the given name and argument types. You may need to add explicit type casts. modified perl code: 998 my $tokenarray = join(",", map { '"' . _quote_bytea($_) . '"' } sort keys %{$tokens}); 999 1000 my $sth = $self->{_dbh}->prepare("select put_tokens($self->{_userid}, 1001 '{$tokenarray}'::bytea[], $spam_count, $ham_count, $atime)"); results in: 2007-05-27 19:53:15 EDT ERROR: function put_tokens(integer, bytea[], integer, integer, integer) does not exist 2007-05-27 19:53:15 EDT HINT: No function matches the given name and argument types. You may need to add explicit type casts. but I thought it now matches?!