Postgresql 从C中,获取行作为有效负载的Postgres通知
我试图创建一个postgres函数,它向我的C代码发送一个通知,其中有效负载字符串是表中某一行的当前值 C端没有问题。我有这样的想法:Postgresql 从C中,获取行作为有效负载的Postgres通知,postgresql,plpgsql,Postgresql,Plpgsql,我试图创建一个postgres函数,它向我的C代码发送一个通知,其中有效负载字符串是表中某一行的当前值 C端没有问题。我有这样的想法: // postgres setup ... PGnotify *notify = PQnotifies(conn) printf("Notification: '%s'\n", notify->extra); 我希望打印这样的内容:通知:MyTable{ID:123,值:9,状态:false} 在Postgres方面,我可以使用JSON获取特定的行 s
// postgres setup ...
PGnotify *notify = PQnotifies(conn)
printf("Notification: '%s'\n", notify->extra);
我希望打印这样的内容:通知:MyTable{ID:123,值:9,状态:false}
在Postgres方面,我可以使用JSON获取特定的行
select row_to_json(row)
from (
SELECT * FROM "MyTable" WHERE "MyTable"."ID"=123
) row;
但我不知道如何在函数中实现这一点,并将select的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转换为文本,但我不确定如何实现这一点
感谢您的帮助,谢谢 显然,我需要在它自己的块中声明变量。我猜它自己处理文本转换。此外,我还必须将perform添加到notify命令中,以使其不会抱怨未使用的结果。这就是我的结局:
do language plpgsql $$
declare
mytable := "MyTable"
myjson text;
begin
myjson := (select row_to_json(row) from (SELECT * FROM "MyTable" WHERE "MyTable"."ID"=123) row);
perform pg_notify('mychannel', mytable||myjson);
end;
$$;
为了在查询中使用变量mytable,我最后查看了上的postgres文档,发现我需要这样做:
do language plpgsql $$
declare
mytable := "MyTable"
myjson text;
begin
EXECUTE
format('(select row_to_json(row) from (SELECT * FROM %I WHERE %I."ID"=101) row);', mytable, mytable)
INTO myjson;
perform pg_notify('mychannel', mytable||myjson);
end;
$$;
你也可以分享你的C代码吗?