使用 postgres 触发器的多个数据问题

问题描述

每当有新数据插入数据表时,我都会使用 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 (将#修改为@)