pgs3
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pgs3 | 0.1.1 | SIM | Apache-2.0 | Rust |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 9430 | pgs3 | 否 | 是 | 是 | 是 | 否 | 否 | pgs3 |
Early alpha; PG17-18; endpoint startup requires preload or pgs3.start(); TLS terminates externally; small-object and 100,000-object Fork performance gates remain unmet.
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 0.1.1 | 1817161514 | pgs3 | - |
| RPM | PIGSTY | 0.1.1 | 1817161514 | pgs3_$v | - |
| DEB | PIGSTY | 0.1.1 | 1817161514 | postgresql-$v-pgs3 | - |
| OS / PG | PG18 | PG17 | PG16 | PG15 | PG14 |
|---|---|---|---|---|---|
| el8.x86_64 | PIGSTY 0.1.1 el8.x86_64.pg18 : pgs3_18 pgs3_18-0.1.1-1PGSTY.el8.x86_64.rpm
| PIGSTY 0.1.1 el8.x86_64.pg17 : pgs3_17 pgs3_17-0.1.1-1PGSTY.el8.x86_64.rpm
| N/A | N/A | N/A |
| el8.aarch64 | PIGSTY 0.1.1 el8.aarch64.pg18 : pgs3_18 pgs3_18-0.1.1-1PGSTY.el8.aarch64.rpm
| PIGSTY 0.1.1 el8.aarch64.pg17 : pgs3_17 pgs3_17-0.1.1-1PGSTY.el8.aarch64.rpm
| N/A | N/A | N/A |
| el9.x86_64 | PIGSTY 0.1.1 el9.x86_64.pg18 : pgs3_18 pgs3_18-0.1.1-1PGSTY.el9.x86_64.rpm
| PIGSTY 0.1.1 el9.x86_64.pg17 : pgs3_17 pgs3_17-0.1.1-1PGSTY.el9.x86_64.rpm
| N/A | N/A | N/A |
| el9.aarch64 | PIGSTY 0.1.1 el9.aarch64.pg18 : pgs3_18 pgs3_18-0.1.1-1PGSTY.el9.aarch64.rpm
| PIGSTY 0.1.1 el9.aarch64.pg17 : pgs3_17 pgs3_17-0.1.1-1PGSTY.el9.aarch64.rpm
| N/A | N/A | N/A |
| el10.x86_64 | PIGSTY 0.1.1 el10.x86_64.pg18 : pgs3_18 pgs3_18-0.1.1-1PGSTY.el10.x86_64.rpm
| PIGSTY 0.1.1 el10.x86_64.pg17 : pgs3_17 pgs3_17-0.1.1-1PGSTY.el10.x86_64.rpm
| N/A | N/A | N/A |
| el10.aarch64 | PIGSTY 0.1.1 el10.aarch64.pg18 : pgs3_18 pgs3_18-0.1.1-1PGSTY.el10.aarch64.rpm
| PIGSTY 0.1.1 el10.aarch64.pg17 : pgs3_17 pgs3_17-0.1.1-1PGSTY.el10.aarch64.rpm
| N/A | N/A | N/A |
| d12.x86_64 | PIGSTY 0.1.1 d12.x86_64.pg18 : postgresql-18-pgs3 postgresql-18-pgs3_0.1.1-1PGSTY~bookworm_amd64.deb
| PIGSTY 0.1.1 d12.x86_64.pg17 : postgresql-17-pgs3 postgresql-17-pgs3_0.1.1-1PGSTY~bookworm_amd64.deb
| N/A | N/A | N/A |
| d12.aarch64 | PIGSTY 0.1.1 d12.aarch64.pg18 : postgresql-18-pgs3 postgresql-18-pgs3_0.1.1-1PGSTY~bookworm_arm64.deb
| PIGSTY 0.1.1 d12.aarch64.pg17 : postgresql-17-pgs3 postgresql-17-pgs3_0.1.1-1PGSTY~bookworm_arm64.deb
| N/A | N/A | N/A |
| d13.x86_64 | PIGSTY 0.1.1 d13.x86_64.pg18 : postgresql-18-pgs3 postgresql-18-pgs3_0.1.1-1PGSTY~trixie_amd64.deb
| PIGSTY 0.1.1 d13.x86_64.pg17 : postgresql-17-pgs3 postgresql-17-pgs3_0.1.1-1PGSTY~trixie_amd64.deb
| N/A | N/A | N/A |
| d13.aarch64 | PIGSTY 0.1.1 d13.aarch64.pg18 : postgresql-18-pgs3 postgresql-18-pgs3_0.1.1-1PGSTY~trixie_arm64.deb
| PIGSTY 0.1.1 d13.aarch64.pg17 : postgresql-17-pgs3 postgresql-17-pgs3_0.1.1-1PGSTY~trixie_arm64.deb
| N/A | N/A | N/A |
| u22.x86_64 | PIGSTY 0.1.1 u22.x86_64.pg18 : postgresql-18-pgs3 postgresql-18-pgs3_0.1.1-1PGSTY~jammy_amd64.deb
| PIGSTY 0.1.1 u22.x86_64.pg17 : postgresql-17-pgs3 postgresql-17-pgs3_0.1.1-1PGSTY~jammy_amd64.deb
| N/A | N/A | N/A |
| u22.aarch64 | PIGSTY 0.1.1 u22.aarch64.pg18 : postgresql-18-pgs3 postgresql-18-pgs3_0.1.1-1PGSTY~jammy_arm64.deb
| PIGSTY 0.1.1 u22.aarch64.pg17 : postgresql-17-pgs3 postgresql-17-pgs3_0.1.1-1PGSTY~jammy_arm64.deb
| N/A | N/A | N/A |
| u24.x86_64 | PIGSTY 0.1.1 u24.x86_64.pg18 : postgresql-18-pgs3 postgresql-18-pgs3_0.1.1-1PGSTY~noble_amd64.deb
| PIGSTY 0.1.1 u24.x86_64.pg17 : postgresql-17-pgs3 postgresql-17-pgs3_0.1.1-1PGSTY~noble_amd64.deb
| N/A | N/A | N/A |
| u24.aarch64 | PIGSTY 0.1.1 u24.aarch64.pg18 : postgresql-18-pgs3 postgresql-18-pgs3_0.1.1-1PGSTY~noble_arm64.deb
| PIGSTY 0.1.1 u24.aarch64.pg17 : postgresql-17-pgs3 postgresql-17-pgs3_0.1.1-1PGSTY~noble_arm64.deb
| N/A | N/A | N/A |
| u26.x86_64 | PIGSTY 0.1.1 u26.x86_64.pg18 : postgresql-18-pgs3 postgresql-18-pgs3_0.1.1-1PGSTY~resolute_amd64.deb
| PIGSTY 0.1.1 u26.x86_64.pg17 : postgresql-17-pgs3 postgresql-17-pgs3_0.1.1-1PGSTY~resolute_amd64.deb
| N/A | N/A | N/A |
| u26.aarch64 | PIGSTY 0.1.1 u26.aarch64.pg18 : postgresql-18-pgs3 postgresql-18-pgs3_0.1.1-1PGSTY~resolute_arm64.deb
| PIGSTY 0.1.1 u26.aarch64.pg17 : postgresql-17-pgs3 postgresql-17-pgs3_0.1.1-1PGSTY~resolute_arm64.deb
| N/A | N/A | N/A |
构建
您可以使用 pig build 命令构建 pgs3 扩展的 RPM / DEB 包:
安装
您可以直接安装 pgs3 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
使用 pig 或者是 apt/yum/dnf 安装扩展:
预加载配置:
创建扩展:
用法
来源:
pgs3 0.1.1 将一个 PostgreSQL 数据库变成仅支持 path-style 的 S3 兼容端点。PostgreSQL 后台 worker 验证 SigV4 请求,并在普通 SQL 表上执行带版本的对象操作,因此对象 metadata、payload、授权、WAL、物理备份与恢复都留在 PostgreSQL 内部。它面向 PostgreSQL 17 与 18,目前仍属于早期 alpha 软件。
核心流程
先在承载对象存储的数据库中安装扩展,创建受限租户角色与凭据,再启动 worker 池:
如需自动启动,应先预加载动态库、配置目标数据库,再重启 PostgreSQL:
增删 shared_preload_libraries 或修改 pgs3.target_database 都需要重启 PostgreSQL。其他已记录参数使用 SIGHUP 语义,但运维就绪状态必须通过 pgs3.worker_state 与日志判断,不能只看 TCP 端口是否开放。手工启动的 worker 池可以用 pgs3.stop() 停止。
客户端与存储行为
客户端必须使用 path-style addressing,并显式指定 endpoint:
务必传入 --endpoint-url,否则 AWS 客户端可能把请求静默发送到 AWS。已验证的客户端路径包括 AWS CLI、boto3、rclone、s3fs 和 DuckDB httpfs。Bucket 与 object 操作涵盖 range 和条件读写、ListObjectsV2、永久版本历史、delete marker、CopyObject 与 multipart upload。
规范 payload 保存在 pgs3.blob。Object version、CopyObject、SQL Restore 与仅复制 metadata 的 Fork 操作可以共享同一 blob,而不重复复制字节。一个 endpoint 只服务一个已配置数据库。
运维与安全
Credential access key 映射到 PostgreSQL 租户角色。角色应保持 NOLOGIN、NOINHERIT 和 NOBYPASSRLS;不要把 pgs3.server_role 用作应用身份。Row-level security 是租户隔离边界,credential 管理与 worker 控制函数仍只应交给管理员。
SigV4 需要可逆存储 secret,因此数据库备份与副本包含 credential 材料,必须加密并限制访问。pgs3 只提供明文 HTTP;生产环境需要外部 TLS 代理,并保持签名 path、host 与 header 不变。对象状态应使用物理备份:扩展自有对象数据目前不支持逻辑 dump/restore。
兼容性与限制
当前打包和上游支持路径为 PostgreSQL 17、18 与 pgrx 0.19.2。版本 0.1.1 包含已验证的 0.1.0 -> 0.1.1 扩展升级边。
pgs3 不是通用生产级 S3 替代品。它尚未实现 virtual-host addressing、内置 TLS、IAM 或 bucket policy 语言、ACL、lifecycle rule 与跨数据库路由;小对象 GET/PUT 目标和十万对象 Fork 目标也未达成,完整对象 GET 当前还会在内存中物化响应。部署时应设置适合自身场景的对象大小上限,并在暴露 endpoint 前阅读上游限制。
这个页面对您有帮助吗?
感谢反馈,我们会据此改进这篇文档。
哪里没有解决?(可选)