pg_net使 PostgreSQL 能够在 SQL 中发出异步 HTTP/HTTPS 请求。它不同于[http
]扩展,因为它默认是异步的。这使得它在阻塞函数(如触发器)中很有用。
它消除了服务器不断轮询数据库更改的需要,而是允许数据库主动通知外部资源有关重大事件的信息。
1.介绍
PG_NET扩展使 PostgreSQL 能够在 SQL 中发出异步 HTTP/HTTPS 请求。它消除了服务器不断轮询数据库更改的需要,而是允许数据库主动通知外部资源有关重大事件的信息。它与触发器、cron 作业(例如PG_CRON)和程序无缝集成,解锁了无数可能性。值得注意的是,PG_NET为 Supabase 的 Webhook 功能提供支持,突出了其健壮性和可靠性。
PG_NET扩展的常见用例包括:
- 调用外部 API
- 与外部资源同步数据
- 在发生事件(如插入)时调用无服务器函数
但是,需要注意的是,该扩展有一些限制。目前,它仅支持三种类型的异步请求:
- 异步 http GET 请求
- 具有 JSON 有效负载的异步 http POST 请求
- 异步 http DELETE 请求
不过,最终,PG_NET为开发人员提供了更大的灵活性,使他们能够监控数据库并将其与外部资源连接起来。
1.1.技术说明
该扩展引入了一个新架构,其中包含两个未记录的表,这是 PostgreSQL 中的一种表,它以牺牲持久性为代价来提供性能改进。您可以在此处阅读有关未记录表的更多信息。这两个表是:net
-
http_request_queue
:此表用作等待执行的请求的队列。成功执行请求后,相应的数据将从队列中删除。用于创建此表的 SQL 语句为:
CREATE UNLOGGED TABLE net.http_request_queue ( id bigint NOT NULL DEFAULT nextval('net.http_request_queue_id_seq'::regclass), method text NOT NULL, url text NOT NULL, headers jsonb NOT NULL, body bytea NULL, timeout_milliseconds integer NOT NULL )
-
_http_response
:此表包含每个已执行请求的响应。用于创建此表的 SQL 语句为:
CREATE UNLOGGED TABLE net._http_response ( id bigint NULL, status_code integer NULL, content_type text NULL, headers jsonb NULL, content text NULL, timed_out boolean NULL, error_msg text NULL, created timestamp with time zo