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.