Am I crazy or just plain dumb?
dev=# \df abuse_resolve List of functions -[ RECORD 1 ]-------+------------------------------------------------------------------------------------------------------------------------------------ Schema | public Name | abuse_resolve Result data type | record Argument data types | INOUT __abuse_id bigint, OUT __msg character varying Type | normal dev=# select abuse_resolve('30'::bigint); ERROR: function abuse_resolve(bigint) does not exist LINE 1: select abuse_resolve('30'::bigint); ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. Here's the CREATE FUNCTION, I've omitted the meat of the code, but that should be irrelevant:
CREATE OR REPLACE FUNCTION abuse_resolve(INOUT __abuse_id bigint, OUT __msg character varying) RETURNS record AS $_$ DECLARE __abuse_status VARCHAR; BEGIN ...snip... UPDATE abuse SET abuse_status = __abuse_status, edate = now(), closed_on = now() WHERE abuse_id = __abuse_id; __msg = 'SUCCESS'; END; $_$ LANGUAGE plpgsql SECURITY DEFINER; And just for giggles:
GRANT ALL ON FUNCTION abuse_resolve(INOUT __abuse_id, OUT __msg character varying) TO PUBLIC; GRANT ALL ON FUNCTION abuse_resolve(INOUT __abuse_id, OUT __msg character varying) TO myuser; That function seems like it exists. What could I be missing?
This is resolved, the answer is: I'm dumb. I had improperly defined the arguments originally, but my code was using the correct ones. There was an extra bigint that had no business being there.