Существует такая функция:
def getNearestNotes(request, longitude, latitude):
if request.method == 'GET':
c = connection.cursor()
r = None
try:
c.callproc('GetAllNotes', (float(longitude), float(latitude)))
r = c.fetchall()
finally:
c.close()
return HttpResponse(str(r))
else:
return HttpResponse('needGetMethod')
Она должна вызывать такую функцию в базе данных postgresql:
create function "GetAllNotes"(long numeric, lat numeric)
returns TABLE
(
UserId integer,
UserName character varying,
NoteName character varying,
NoteLong double precision,
NoteLat double precision
)
language plpgsql
as
$$
BEGIN
RETURN query (SELECT Notes."UserId", Users."Name", Notes."Name",
Notes."Longitude", Notes."Latitude"
FROM Notes
INNER JOIN Users ON Notes."UserId" = Users."Id"
WHERE (point(long, lat) <@> point(Notes."Longitude",
Notes."Latitude") <= 0.124274));
END
$$;
alter function "GetAllNotes"(numeric, numeric) owner to postgres;
Но при вызове этой функции django выдает ошибку -
функция getallnotes (числовая, числовая) не существует ЛИНИЯ 1: SELECT * FROM GetAllNotes (28.0,23.0)
СОВЕТ: ни одна функция не соответствует заданному имени и типу аргумента.Возможно, вам потребуется добавить явные приведения типов.
База подключена.
Но если я сделаю это -
c.execute("SELECT routine_name FROM information_schema.routines WHERE routine_type='FUNCTION' AND specific_schema='public'")
r = c.fetchone()
- тогда GetAllNotesфункция будет перечислена