http
HTTP客户端,允许在数据库内收发HTTP请求 (supabase)
仓库
pramsey/pgsql-http
https://github.com/pramsey/pgsql-http
源码
pgsql-http-1.7.1.tar.gz
pgsql-http-1.7.1.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pg_http | 1.7.1 | UTIL | MIT | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 4070 | http | 否 | 是 | 否 | 是 | 否 | 否 | - |
| 相关扩展 | pg_net pg_curl pgjwt pg_smtp_client gzip bzip zstd pgjq pgmb |
|---|
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | MIXED | 1.7.1 | 1817161514 | pg_http | - |
| RPM | PIGSTY | 1.7.1 | 1817161514 | pgsql_http_$v | - |
| DEB | PGDG | 1.7.1 | 1817161514 | postgresql-$v-http | - |
构建
您可以使用 pig build 命令构建 pg_http 扩展的 RPM 包:
pig build pkg pg_http # 构建 RPM 包
安装
您可以直接安装 pg_http 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install pg_http; # 当前活跃 PG 版本安装
pig ext install -y pg_http -v 18 # PG 18
pig ext install -y pg_http -v 17 # PG 17
pig ext install -y pg_http -v 16 # PG 16
pig ext install -y pg_http -v 15 # PG 15
pig ext install -y pg_http -v 14 # PG 14
dnf install -y pgsql_http_18 # PG 18
dnf install -y pgsql_http_17 # PG 17
dnf install -y pgsql_http_16 # PG 16
dnf install -y pgsql_http_15 # PG 15
dnf install -y pgsql_http_14 # PG 14
apt install -y postgresql-18-http # PG 18
apt install -y postgresql-17-http # PG 17
apt install -y postgresql-16-http # PG 16
apt install -y postgresql-15-http # PG 15
apt install -y postgresql-14-http # PG 14
创建扩展:
CREATE EXTENSION http;
用法
http 允许 SQL 代码通过 libcurl 发起 HTTP 请求。它适合受控的集成点,例如触发器通知外部服务、SQL job 拉取小型远程 payload,或数据库侧 webhook 调用。
CREATE EXTENSION http;
请求与响应类型
每个请求使用 http_request,并返回 http_response:
http_request(method http_method, uri varchar, headers http_header[], content_type varchar, content varchar)
http_response(status integer, content_type varchar, headers http_header[], content varchar)
便捷包装函数最终调用同一个底层 http(http_request) 函数:
http_get(uri varchar)http_get(uri varchar, data jsonb)http_post(uri varchar, content varchar, content_type varchar)http_post(uri varchar, data jsonb)http_put(uri varchar, content varchar, content_type varchar)http_patch(uri varchar, content varchar, content_type varchar)http_delete(uri varchar)http_head(uri varchar)
示例
SELECT status, content_type, content
FROM http_get('https://httpbun.com/ip');
SELECT content::json->'headers'->>'Authorization'
FROM http((
'GET',
'https://httpbun.com/headers',
http_headers('Authorization', 'Bearer token'),
NULL,
NULL
)::http_request);
SELECT status, content::json->'form' AS form
FROM http_post(
'https://httpbun.com/post',
jsonb_build_object('myvar', 'myval', 'foo', 'bar')
);
SELECT status, content_type, content::json->>'data' AS data
FROM http_put('https://httpbun.com/put', 'some text', 'text/plain');
通过展开 headers 数组检查响应头:
SELECT (unnest(headers)).*
FROM http_get('https://httpbun.com/');
二进制内容
README 提醒,varchar::bytea 对二进制响应体不安全,因为它会在零值字节处停止。读取响应内容时使用 text_to_bytea(content),发送二进制请求体时使用 bytea_to_text(bytea)。
WITH http AS (
SELECT * FROM http_get('https://httpbingo.org/image/png')
)
SELECT content_type, length(text_to_bytea(content)) AS bytes
FROM http;
超时与版本说明
pg_http 1.7.1 是兼容性和文档版本:增加 timeout examples,增加 PostgreSQL 17 wait-event hooks,并包含 PostgreSQL 19 support fixes。用户可见 SQL API 仍是上面的 README surface。