rdf_fdw
概览
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 8760 | rdf_fdw | 否 | 是 | 否 | 是 | 否 | 是 | - |
PIGSTY RPM and DEB packages are aligned at 2.7.0 for PostgreSQL 14 through 18.
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 2.7.0 | 1817161514 | rdf_fdw | - |
| RPM | PIGSTY | 2.7.0 | 1817161514 | rdf_fdw_$v | - |
| DEB | PIGSTY | 2.7.0 | 1817161514 | postgresql-$v-rdf-fdw | - |
构建
您可以使用 pig build 命令构建 rdf_fdw 扩展的 RPM / DEB 包:
安装
您可以直接安装 rdf_fdw 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
使用 pig 或者是 apt/yum/dnf 安装扩展:
创建扩展:
用法
来源:
rdf_fdw 是通过 SPARQL endpoint 查询 RDF triplestore 的 PostgreSQL foreign data wrapper。它把 SPARQL 结果变量暴露为外部表列,支持常见 SQL 子句下推,提供用于 RDF term 的原生 rdfnode 类型,实现了多种 SPARQL 1.1 辅助函数,并可通过可写外部表执行 SPARQL INSERT、UPDATE 和 DELETE。
v2.6.0 增加了通过 USER MAPPING 配置 Bearer token 认证、用于限制 HTTP 响应体大小的 max_response_size server option、BCE date/timestamp cast 支持,以及大量 rdfnode 解析和比较修复。v2.7 修复了尾部连续反斜线的 RDF literal 转义,避免 literal 内容逃逸为生成的 SPARQL 语法;同时把 libcurl 初始化从每次请求改为每个 PostgreSQL backend 一次。
创建扩展
安装或升级到指定 SQL 版本:
注册 SPARQL Endpoint
常用 server options:
endpoint:SPARQL endpoint URL,必需。batch_size:每批 SPARQL UPDATE 的行数。enable_pushdown:启用 SQL 到 SPARQL 的下推。format:期望的 SPARQL 结果 MIME 类型。http_proxy:代理 URL;代理凭据应放在USER MAPPING。connect_timeout:连接超时。request_timeout:完整 HTTP 请求超时。max_response_size:最大响应体字节数;0表示不限制。readonly:在请求到达 endpoint 前阻止INSERT、UPDATE和DELETE。request_redirect与request_max_redirect:重定向行为。
连接公共或不可信 endpoint 时建议设置 max_response_size,因为 rdf_fdw 会先把取回的 RDF 数据载入内存,再转换为 PostgreSQL 表示。
用户映射
v2.6.0 增加了 Bearer token 认证:
代理凭据也应放在 USER MAPPING:
使用 rdfnode 列的外部表
外部表列应声明为 rdfnode,以保留 RDF term、IRI、blank node、语言标签和 XSD datatype。
v2.6.0 中,RDF 值使用原生 PostgreSQL 列类型的方式已被弃用。已有 native-typed 表仍可工作,但会发出 warning,并且会丢失 RDF term 细节。
查询与下推
rdf_fdw 可下推 WHERE、LIMIT、ORDER BY、DISTINCT 以及受支持的比较和函数。使用 EXPLAIN VERBOSE 查看生成的远端 SPARQL。
Prefix 管理
rdf_fdw 在 sparql schema 下提供 catalog 表和辅助函数,用于复用 SPARQL prefix:
数据修改
当外部表具备所需 SPARQL update pattern 时,可写外部表可以把 PostgreSQL INSERT、UPDATE 和 DELETE 翻译为 SPARQL UPDATE 请求。
如果 endpoint 不应接收写请求,应在 server 或 table 级别设置 readonly = true。
克隆外部表
rdf_fdw_clone_table() 会把外部表数据分批复制成本地表。v2.5 修复了克隆 RDF term 时的多项往返问题。
SPARQL 函数
sparql schema 实现了许多 SPARQL 1.1 函数和聚合,包括:
sparql.sum、sparql.avg、sparql.min、sparql.max、sparql.group_concat、sparql.sample等聚合sparql.isiri、sparql.isblank、sparql.isliteral、sparql.datatype、sparql.iri、sparql.strdt、sparql.strlang等 RDF term 函数sparql.strlen、sparql.substr、sparql.ucase、sparql.lcase、sparql.contains、sparql.replace等字符串函数- 数值、日期时间、哈希和其他便利函数
注意事项
- 上游最低基线为 PostgreSQL 9.5 或更高版本。
- 取回的 RDF 数据会在转换前累积到内存中。应设置
max_response_size、使用LIMIT,并限制远端结果集规模。 - 优先使用
rdfnode列。RDF term 使用 PostgreSQL 原生类型已被弃用,并会丢失 IRI、语言和 datatype 信息。 - 密钥应放在
USER MAPPING;不要把代理凭据或 endpoint token 写进SERVERoptions。 - 公共 SPARQL endpoint 可能慢或有速率限制。需要时使用
connect_timeout、request_timeout、重试和本地物化。 - 在 pushed-down filter 或可写外部表操作中接收不可信 literal 内容前,应升级到 2.7;libcurl 生命周期修复属于内部实现,不增加新的 SQL 配置。
这个页面对您有帮助吗?
感谢反馈,我们会据此改进这篇文档。
哪里没有解决?(可选)