【发布时间】:2017-01-05 11:24:18
【问题描述】:
我正在尝试创建一个 postgres 函数,该函数向我的 C 代码发送通知,其中有效负载字符串是表中行的当前值。
C端没问题。我有这样的事情:
// 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 转换为文本,但我不确定如何实现。
感谢任何帮助,谢谢!
【问题讨论】:
标签: postgresql plpgsql