etcd_fdw
etcd分布式键值存储外部数据包装器
仓库
cybertec-postgresql/etcd_fdw
https://github.com/cybertec-postgresql/etcd_fdw
源码
etcd_fdw-0.0.0.tar.gz
etcd_fdw-0.0.0.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
etcd_fdw | 0.0.0 | FDW | MIT | Rust |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 8660 | etcd_fdw | 否 | 是 | 否 | 是 | 否 | 否 | - |
| 相关扩展 | wrappers redis_fdw kafka_fdw postgres_fdw mysql_fdw mongo_fdw |
|---|
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 0.0.0 | 1817161514 | etcd_fdw | - |
| RPM | PIGSTY | 0.0.0 | 1817161514 | etcd_fdw_$v | - |
| DEB | PIGSTY | 0.0.0 | 1817161514 | postgresql-$v-etcd-fdw | - |
构建
您可以使用 pig build 命令构建 etcd_fdw 扩展的 RPM / DEB 包:
pig build pkg etcd_fdw # 构建 RPM / DEB 包
安装
您可以直接安装 etcd_fdw 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install etcd_fdw; # 当前活跃 PG 版本安装
pig ext install -y etcd_fdw -v 18 # PG 18
pig ext install -y etcd_fdw -v 17 # PG 17
pig ext install -y etcd_fdw -v 16 # PG 16
pig ext install -y etcd_fdw -v 15 # PG 15
pig ext install -y etcd_fdw -v 14 # PG 14
dnf install -y etcd_fdw_18 # PG 18
dnf install -y etcd_fdw_17 # PG 17
dnf install -y etcd_fdw_16 # PG 16
dnf install -y etcd_fdw_15 # PG 15
dnf install -y etcd_fdw_14 # PG 14
apt install -y postgresql-18-etcd-fdw # PG 18
apt install -y postgresql-17-etcd-fdw # PG 17
apt install -y postgresql-16-etcd-fdw # PG 16
apt install -y postgresql-15-etcd-fdw # PG 15
apt install -y postgresql-14-etcd-fdw # PG 14
创建扩展:
CREATE EXTENSION etcd_fdw;
用法
快速上手
1. 启用扩展
CREATE EXTENSION etcd_fdw;
2. 创建外部数据包装器
CREATE FOREIGN DATA WRAPPER etcd_fdw
HANDLER etcd_fdw_handler
VALIDATOR etcd_fdw_validator;
3. 创建服务器
-- 基本连接
CREATE SERVER etcd_plain
FOREIGN DATA WRAPPER etcd_fdw
OPTIONS (connstr '127.0.0.1:2379');
-- 生产环境 etcd,启用认证和 SSL
CREATE SERVER etcd FOREIGN DATA WRAPPER etcd_fdw OPTIONS (
connstr '127.0.0.1:2379',
username 'root',
password 'Etcd.Root',
ssl_ca '/pg/cert/ca.crt',
ssl_cert '/pg/cert/server.crt',
ssl_key '/pg/cert/server.key'
);
4. 创建外部表
-- 基本表,映射所有键
CREATE FOREIGN TABLE etcd_kv (key TEXT, value TEXT) SERVER etcd OPTIONS (rowid_column 'key');
-- 带前缀过滤的表(仅包含以 '/config/' 开头的键)
CREATE FOREIGN TABLE etcd_config (key TEXT, value TEXT)
SERVER etcd OPTIONS (rowid_column 'key', prefix '/config/');
5. 查询数据
-- 读取所有键
SELECT * FROM etcd_kv;
-- 按键模式过滤(支持下推)
SELECT * FROM etcd_kv WHERE key LIKE '/app/%';
-- 范围查询
SELECT * FROM etcd_kv WHERE key >= '/a' AND key < '/b';
-- 插入新键
INSERT INTO etcd_kv (key, value) VALUES ('/mykey', 'myvalue');
-- 删除键
DELETE FROM etcd_kv WHERE key = '/mykey';
6. 与 etcd 实时同步
在 PostgreSQL 外部所做的变更会立即可见:
# 通过 etcdctl 插入
etcdctl put '/config/db_pool_size' '20'
-- 在 PostgreSQL 中即时可见
SELECT * FROM etcd_config;
key | value
-----------------------+-------
/config/db_pool_size | 20
(1 row)
参考
服务器选项
| 选项 | 必填 | 说明 |
|---|---|---|
connstr | 是 | etcd 端点地址(例如 127.0.0.1:2379) |
username | 否 | 认证用户名 |
password | 否 | 认证密码 |
ssl_ca | 否 | CA 证书文件路径 |
ssl_cert | 否 | 客户端证书文件路径 |
ssl_key | 否 | 客户端私钥文件路径 |
ssl_servername | 否 | TLS 验证使用的域名 |
connect_timeout | 否 | 连接超时时间(默认:10s) |
request_timeout | 否 | 请求超时时间(默认:30s) |
外部表选项
| 选项 | 默认值 | 说明 |
|---|---|---|
rowid_column | 必填 | 用作唯一行标识符的列 |
prefix | 无 | 仅包含具有此前缀的键 |
keys_only | false | 仅获取键,跳过值 |
revision | 0 | 从指定的 etcd 修订版本读取 |
key | \0 | 范围扫描的起始键 |
range_end | 无 | 范围扫描的终止键(不包含) |
consistency | l | l(线性一致性)或 s(串行化) |
查询下推
以下操作会下推至 etcd 执行以提升性能:
- WHERE:
=、>=、>、<=、<、BETWEEN、LIKE 'prefix%' - ORDER BY:远程排序
- LIMIT/OFFSET:远程分页
限制
- 不支持对键列执行
UPDATE操作。替代方案:先INSERT新键,再DELETE旧键。 - 需要 etcd v3 API。