pg_net
用 SQL 进行异步非阻塞HTTP/HTTPS 请求的扩展 (supabase)
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pg_net | 0.20.2 | UTIL | Apache-2.0 | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 4080 | pg_net | 否 | 是 | 是 | 是 | 否 | 否 | net |
| 相关扩展 | http pg_curl pgjwt pg_smtp_client gzip bzip zstd pgjq |
|---|---|
| 下游依赖 | pgmb |
patched 0.9.2 on el8/el9
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 0.20.2 | 1817161514 | pg_net | - |
| RPM | PIGSTY | 0.20.2 | 1817161514 | pg_net_$v | - |
| DEB | PIGSTY | 0.20.2 | 1817161514 | postgresql-$v-pg-net | - |
构建
您可以使用 pig build 命令构建 pg_net 扩展的 RPM / DEB 包:
pig build pkg pg_net # 构建 RPM / DEB 包
安装
您可以直接安装 pg_net 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install pg_net; # 当前活跃 PG 版本安装
pig ext install -y pg_net -v 18 # PG 18
pig ext install -y pg_net -v 17 # PG 17
pig ext install -y pg_net -v 16 # PG 16
pig ext install -y pg_net -v 15 # PG 15
pig ext install -y pg_net -v 14 # PG 14
dnf install -y pg_net_18 # PG 18
dnf install -y pg_net_17 # PG 17
dnf install -y pg_net_16 # PG 16
dnf install -y pg_net_15 # PG 15
dnf install -y pg_net_14 # PG 14
apt install -y postgresql-18-pg-net # PG 18
apt install -y postgresql-17-pg-net # PG 17
apt install -y postgresql-16-pg-net # PG 16
apt install -y postgresql-15-pg-net # PG 15
apt install -y postgresql-14-pg-net # PG 14
预加载配置:
shared_preload_libraries = 'pg_net';
创建扩展:
CREATE EXTENSION pg_net;
用法
该扩展需要在 postgresql.conf 中设置 shared_preload_libraries = 'pg_net'。
GET 请求
SELECT net.http_get('https://postman-echo.com/get?foo=bar') AS request_id;
使用 URL 编码参数和请求头:
SELECT net.http_get(
'https://postman-echo.com/get',
params := '{"foo": "bar"}'::JSONB,
headers := '{"API-KEY": "<key>"}'::JSONB
) AS request_id;
POST 请求
SELECT net.http_post(
'https://postman-echo.com/post',
'{"key": "value"}'::JSONB,
headers := '{"Content-Type": "application/json"}'::JSONB
) AS request_id;
将表行作为请求体发送:
WITH row AS (SELECT * FROM my_table LIMIT 1)
SELECT net.http_post(
'https://api.example.com/data',
to_jsonb(row.*)
) AS request_id
FROM row;
DELETE 请求
SELECT net.http_delete('https://api.example.com/resource/42') AS request_id;
查看响应
SELECT * FROM net._http_response;
配置
SHOW pg_net.batch_size; -- 默认值:200,每个处理周期的最大行数
SHOW pg_net.ttl; -- 默认值:6 小时,响应保留时间
SHOW pg_net.database_name; -- 默认值:'postgres'
修改设置:
ALTER SYSTEM SET pg_net.ttl TO '1 hour';
ALTER SYSTEM SET pg_net.batch_size TO 500;
SELECT pg_reload_conf();