Czy jestem szalony czy po prostu głupi?"funkcja nie istnieje", ale naprawdę myślę, że to
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.
Oto CREATE FUNCTION
, mam pominąć mięso kodu, ale to powinno być bez znaczenia:
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;
I właśnie dla chichotów:
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;
Funkcja ta wydaje się istnieje. Czego mógłbym zabraknąć?
To rozwiązuje się, odpowiedź brzmi: Jestem głupi. Nieumiejętnie zdefiniowałem argumenty, ale mój kod korzystał z poprawnych. Był dodatkowy obiekt, który nie miał żadnego interesu.
można opublikować 'utworzyć oświadczenie zakresie funkcji? –
Czy wykonałeś obie w tej samej sesji? Ten sam użytkownik? Ta sama ścieżka wyszukiwania? –
Tak, jest tylko jeden użytkownik. search_path jest ustawiona na public, SHOW potwierdza to. Będę edytować za pomocą CREATE FUNCTION – echtish