Я пытаюсь создать функцию postgres, которая отправляет уведомление моему C-коду, где строка полезной нагрузки является текущим значением строки в таблице.Из C, получить сообщение Postgres с номером как полезной нагрузкой
Сторона С не представляет проблемы. У меня есть что-то вроде этого:
// postgres setup ...
PGnotify *notify = PQnotifies(conn)
printf("Notification: '%s'\n", notify->extra);
Я хочу, чтобы напечатать что-то вроде: Notification: MyTable{"ID":123,"Value":9,"Status":false}
.
На стороне Postgres вещей, я могу получить определенную строку как JSON с
select row_to_json(row)
from (
SELECT * FROM "MyTable" WHERE "MyTable"."ID"=123
) row;
Но я не могу понять, как это сделать в рамках функции и сохранить результат в формате JSON в том, что выбрать, чтобы локальная переменная. Я хотел бы ожидать следующие работы ...
do language plpgsql $$
begin
myjson := (select row_to_json(row) from (SELECT * FROM "MyTable" WHERE "MyTable"."ID"=123) row);
-- myrow := ... somehow convert myjson to text ...
-- pg_notify('mychannel', mytable || myrow);
end;
$$;
... но я получаю ошибку «myjson не является известной переменной». Мой postgres fu слаб, поэтому я уверен, что это простая синтаксическая ошибка, но я не могу понять это. Я попробовал «выбрать», но не смог заставить его работать.
Кроме того, вы можете видеть из прокомментированных строк, что я намерен каким-то образом преобразовать этот json в текст, но я не уверен, как это сделать.
Любая помощь приветствуется, спасибо!