数据库Webhooks
在数据库事件上触发外部负载。
数据库 Webhook 允许您在表事件发生时,将实时数据从数据库发送到其他系统。
您可以监听三种表事件:INSERT
(插入)、UPDATE
(更新)和 DELETE
(删除)。所有事件都是在数据库行变更_之后_触发的。
Webhook 与触发器的区别
数据库 Webhook 与触发器非常相似,这是因为数据库 Webhook 实际上是基于 pg_net 扩展的触发器封装。该扩展是异步的,因此不会因为长时间的网络请求而阻塞您的数据库变更。
以下视频演示了如何在每次向 profiles
表插入行时,在 Stripe 中创建新客户:
创建 Webhook
- 在 Dashboard 中创建新的 数据库 Webhook
- 为您的 Webhook 命名
- 选择要监听的目标表
- 选择要监听的一个或多个事件(表插入、更新或删除)
由于 Webhook 本质上是数据库触发器,您也可以直接通过 SQL 语句创建:
123456789create trigger "my_webhook" after inserton "public"."my_table" for each rowexecute function "supabase_functions"."http_request"( 'http://host.docker.internal:3000', 'POST', '{"Content-Type":"application/json"}', '{}', '1000');
目前我们支持 HTTP Webhook。这些请求可以以 POST
或 GET
方式发送,并携带 JSON 负载。
负载数据
负载数据会自动从底层表记录生成:
123456789101112131415161718192021type InsertPayload = { type: 'INSERT' table: string schema: string record: TableRecord<T> old_record: null}type UpdatePayload = { type: 'UPDATE' table: string schema: string record: TableRecord<T> old_record: TableRecord<T>}type DeletePayload = { type: 'DELETE' table: string schema: string record: null old_record: TableRecord<T>}
监控
Webhook调用的日志历史记录可在数据库的net
模式中查看。更多信息请参阅GitHub仓库。
本地开发
在本地Supabase实例中使用数据库Webhooks时,需要注意Postgres数据库运行在Docker容器内。这意味着webhook URL中的localhost
或127.0.0.1
会指向容器本身,而不是运行应用程序的宿主机。
要访问宿主机上运行的服务,请使用host.docker.internal
。如果无效,可能需要改用机器的本地IP地址。
例如,如果您想在webhook触发时调用边缘函数,webhook URL应为:
1http://host.docker.internal:54321/functions/v1/my-function-name
如果在本地遇到webhook连接问题,请确认使用的是正确的主机名而非localhost
。
相关资源
- pg_net: 用于Postgres的异步网络扩展