"Funktion nicht vorhanden", aber ich denke wirklich, dass es funktioniert
Bin ich verrückt oder einfach nur dumm?
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.
Hier ist die CREATE FUNCTION
habe ich weggelassen, das Fleisch der code, aber das sollte irrelevant sein:
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;
Und nur für kichert:
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;
Diese Funktion scheint, wie es existiert. Was könnte ich vermissen?
Dies ist gelöst, die Antwort ist: ich bin dumm. Ich hatte falsch definiert die Argumente, die ursprünglich, aber mein code war mit die richtigen sind. Es war ein extra bigint
hatte kein Geschäft dort.
- Kannst du die
create function
Aussage? - Haben Sie führen beide in der selben Sitzung? Gleichen Benutzer? Gleiche search_path?
- Ja, es gibt nur einen Benutzer. search_path auf öffentlich gesetzt ist,, ZEIGEN, bestätigt dies. Ich werde Bearbeiten Sie mit CREATE FUNCTION
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gut, etwas ist seltsam. Ich habe:
Hatten Sie irgendwelche anderen Probleme mit dieser Datenbank? Sie können kopieren Sie es mit dump/restore und versuchen, diese auf die neue kopieren? Nicht explizit qualifying der name der Funktion mit der "public" - schema helfen? Welche version von PostgreSQL verwenden Sie?
update: sql-Funktion
Er arbeitete auch gut für mich mit:
returns record
. Dann sah ich Ihre Probe als plpgsql und ließ meine eigenen und erstellt Euch-und es funktionierte. Dann gefallen Ihnen und ich kann jetzt nicht reproduzieren, das problem mehr mit der gleichen Funktion, mit der war ich reproduzieren Sie das problem auf den ersten. Ich bin mit der 9.1 auf Fedora 16search_path
beinhaltet nicht diepublic
schema. Ich Wette, dassselect public.abuse_resolve('30'::bigint);
funktioniert.\df
giltpg_function_is_visible
.\df
würde nicht zeigen Sie die Funktion dann.Wenn Sie können und wenn ist das problem. Ich empfehle die Verwendung
korrekt einzustellen schema, in dem die Funktion erstellt werden, oder in einem Ort, wo man direkt aufrufen geben Sie den schema-Namen
Diese syntax versuchen:
ERROR: function abuse_resolve(bigint) does not exist
select from
in diesem Fall nicht notwendig