数据库 Webhooks
在数据库事件发生时触发外部负载。
数据库 Webhooks 允许您在表事件发生时将实时数据从您的数据库发送到另一个系统。
您可以挂接到三个表事件:INSERT、UPDATE 和 DELETE。所有事件都在数据库行更改之后触发。
Webhooks 与触发器#
数据库 Webhooks 与触发器非常相似,这是因为数据库 Webhooks 只是使用 pg_net 扩展对触发器的便捷包装。此扩展是异步的,因此不会阻止您的数据库长时间运行的网络请求进行更改。
此视频演示了每次向 profiles 表插入一行时,如何在 Stripe 中创建一个新客户
创建 webhook#
- 在仪表板中创建一个新的 数据库 Webhook。
- 为您的 Webhook 指定一个名称。
- 选择您要挂接的表。
- 选择您要挂接的一个或多个事件(表插入、更新或删除)。
由于 Webhooks 只是数据库触发器,因此您也可以直接从 SQL 语句创建它。
1create trigger "my_webhook" after insert2on "public"."my_table" for each row3execute function "supabase_functions"."http_request"(4 'http://host.docker.internal:3000',5 'POST',6 '{"Content-Type":"application/json"}',7 '{}',8 '1000'9);我们目前支持 HTTP Webhooks。这些可以作为带有 JSON 有效负载的 POST 或 GET 请求发送。
负载#
负载会自动从基础表记录生成
1type InsertPayload = {2 type: 'INSERT'3 table: string4 schema: string5 record: TableRecord<T>6 old_record: null7}8type UpdatePayload = {9 type: 'UPDATE'10 table: string11 schema: string12 record: TableRecord<T>13 old_record: TableRecord<T>14}15type DeletePayload = {16 type: 'DELETE'17 table: string18 schema: string19 record: null20 old_record: TableRecord<T>21}监控#
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如果您在使用 Webhooks 时遇到连接问题,请验证您是否正在使用正确的 hostname,而不是 localhost。
资源#
- pg_net:Postgres 的异步网络扩展