postgresql 在Google Cloud SQL中插入或更新数据时,是否可以向Google Pub/Sub发布消息?

rekjcdws  于 2023-05-17  发布在  PostgreSQL
关注(0)|答案(2)|浏览(123)

我是Google Cloud SQL和Pub/Sub的新手。我在任何地方都找不到关于这个的文件。但另一个问题的接受和赞成answer似乎说,它是可能的发布一个发布/订阅消息时,有一个插入发生在数据库。以下是答案的摘录:
2 -理想的解决方案是创建发布/订阅主题,并在向数据库插入新数据时发布到该主题。
但由于我的问题是不同的,因此我在这里提出了一个新的问题。
背景:我正在为我的应用程序使用Google Cloud SQL,Firestore和Realtime Database的组合,以获得其独特的优势。
我想做的是,一旦在Google Cloud SQL中插入成功,就能够写入Firestore和Realtime数据库。根据上面的答案,这是我应该做的步骤:
1.应用程序调用Cloud Function将数据插入Google Cloud SQL数据库(PostgreSQL)。* 注意:Postgres表有一些重要的约束和触发Postgres函数,这就是为什么我们要从这里开始。
1.当插入成功时,我希望Google Cloud SQL将消息发布到Pub/Sub。
1.然后还有另一个订阅发布/订阅主题的云函数。此函数将相应地写入Firestore / Realtime数据库。

1和#3的步骤都已经完成了。我正在寻找的解决方案是步骤#2。

dl5txlt9

dl5txlt91#

另一个问题的答案只是建议您的代码执行以下两项操作:
1.写入云SQL。
1.如果写入成功,则向pubsub主题发送消息。
没有任何东西可以自动化或简化这些任务。对于将响应写入Cloud SQL的Cloud Functions,没有触发器。您为任务1编写代码,然后为任务2编写代码。这两件事都应该是直截了当的,并在产品文档中涵盖。我建议你在这两个方面都做一次尝试(分开),然后再次发布你的代码,这些代码没有按照你期望的方式工作。
如果您需要开始使用pubsub,几乎每个主要的服务器平台都有SDK,发送消息的文档是here

uxh89sit

uxh89sit2#

正如注解中提到的,现在可以使用https://cloud.google.com/datastream
原文回答:
虽然Google Cloud SQL不会自动管理触发器,但您可以在Postgres中创建触发器:

CREATE OR REPLACE FUNCTION notify_new_record() RETURNS TRIGGER AS $$
    BEGIN
       PERFORM pg_notify('on_new_record', row_to_json(NEW)::text);
       RETURN NULL;
    END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER on_insert
AFTER INSERT ON your_table
FOR EACH ROW EXECUTE FUNCTION notify_new_record();

然后,在您的客户端中,监听该事件:

import pg from 'pg'
const client = new pg.Client()
client.connect()
client.query('LISTEN on_new_record') // same as arg to pg_notify
client.on('notification', msg => {
  console.log(msg.channel) // on_new_record
  console.log(msg.payload) // {"id":"...",...}
  // ... do stuff
})

在监听器中,您可以推送到pubsub或云任务,或者直接写入firebase/firestore(或者您需要做的任何事情)。
来源:https://edernegrete.medium.com/psql-event-triggers-in-node-js-ec27a0ba9baa
您还可以查看Supabase,它现在支持在创建/更新/删除行后触发云函数(测试版)(基本上执行上面的代码,但您可以获得一个很好的UI来配置它)。

相关问题