问题描述
每当有新数据插入数据表时,我都会使用 Postgresql 触发器来获取新数据
我正在监听那个特定的触发器,并使用 graphql 订阅将数据发送到前端,只有一次数据保存在数据库中,它仍然多次触发。
我测试了更改事件触发条件,例如“AFTER”和“BEFORE”,我仍然获得多个数据。
使用的资源: NPM 包:“pg”:“^8.5.1”, Nodejs:v14.15.1
**sql Trigger and function:**
CREATE FUNCTION devdata() RETURNS trigger AS $dev_data$
BEGIN
PERFORM pg_notify('dev_data_rec',row_to_json(NEW)::text );
RETURN new;
END;
$dev_data$ LANGUAGE plpgsql;
CREATE TRIGGER dev_data
BEFORE INSERT ON tbl_dev_data
FOR EACH ROW EXECUTE PROCEDURE devdata();
**Graphql subscription code :**
Subscription: {
devicedata: {
subscribe(_,args,{ pool,client },info) {
try {
client.query("LISTEN dev_data_rec")
client.on("notification",async (message) => {
let data = JSON.parse(message.payload)
let dev_data = {
dev_id: data.device_id,devname: data.devname,value: data.value
}
console.log("deviceData",JSON.stringify(dev_data,null,2))
pubsub.publish("devicedata",{ devicedata: dev_data })
})
return pubsub.asyncIterator("devicedata")
} catch (error) {
return error
}
}
},
有时我会得到单个数据,有时会得到多个数据
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)