@ellz

Как вернуть данные из функции в виде таблицы?

Есть такая функция:
CREATE OR REPLACE FUNCTION "public"."GetAllNotes"("long" float8, "lat" float8)
  RETURNS TABLE("userid" int4, "username" varchar, "notename" varchar, "notelong" float8, "notelat" float8) AS $BODY$
	DECLARE 
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
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100
  ROWS 1000

Принимает в качестве параметров координаты, и выводит все записи, где дистанция меньше двухсот метров.
Другие таблицы:

notes:
CREATE TABLE "public"."notes" (
  "id" int4 NOT NULL DEFAULT nextval('notes_id_seq'::regclass),
  "userid" int4 NOT NULL,
  "name" varchar COLLATE "pg_catalog"."default" NOT NULL,
  "longitude" float8 NOT NULL,
  "latitude" float8 NOT NULL,
  CONSTRAINT "notes_pkey" PRIMARY KEY ("id")
)
;
ALTER TABLE "public"."notes" 
  OWNER TO "postgres";

users:
CREATE TABLE "public"."users" (
  "id" int4 NOT NULL DEFAULT nextval('users_id_seq'::regclass),
  "name" varchar COLLATE "pg_catalog"."default" NOT NULL,
  CONSTRAINT "users_pkey" PRIMARY KEY ("id")
)
;

ALTER TABLE "public"."users" 
  OWNER TO "postgres";



И вот в каком виде функция возвращает таблицу - 5c7df73412a48519309079.png
То есть все все данные в один ряд
А как сделать, чтобы таблица возвращалась в таком формате -
5c7df908c0fbf070738206.png ?
  • Вопрос задан
  • 1479 просмотров
Решения вопроса 1
@luna3956
Возможно, вы вызываете функцию так select "public"."GetAllNotes", а надо так select * from "public"."GetAllNotes"
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы