etcd_fdw
etcd_fdw
etcd_fdw : Foreign data wrapper for etcd
Overview
| ID | Extension | Package | Version | Category | License | Language |
|---|---|---|---|---|---|---|
| 8660 | etcd_fdw
|
etcd_fdw
|
0.0.0 |
FDW
|
MIT
|
Rust
|
| Attribute | Has Binary | Has Library | Need Load | Has DDL | Relocatable | Trusted |
|---|---|---|---|---|---|---|
--s-d--
|
No
|
Yes
|
No
|
Yes
|
no
|
no
|
| Relationships | |
|---|---|
| See Also | wrappers
redis_fdw
kafka_fdw
postgres_fdw
mysql_fdw
mongo_fdw
|
Packages
| Type | Repo | Version | PG Major Compatibility | Package Pattern | Dependencies |
|---|---|---|---|---|---|
| EXT | PIGSTY
|
0.0.0 |
18
17
16
15
14
13
|
etcd_fdw |
- |
| RPM | PIGSTY
|
0.0.0 |
18
17
16
15
14
13
|
etcd_fdw_$v |
- |
| DEB | PIGSTY
|
0.0.0 |
18
17
16
15
14
13
|
postgresql-$v-etcd-fdw |
- |
| Linux / PG | PG18 | PG17 | PG16 | PG15 | PG14 | PG13 |
|---|---|---|---|---|---|---|
el8.x86_64
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
el8.aarch64
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
el9.x86_64
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
el9.aarch64
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
el10.x86_64
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
el10.aarch64
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
d12.x86_64
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
d12.aarch64
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
d13.x86_64
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
d13.aarch64
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
u22.x86_64
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
u22.aarch64
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
u24.x86_64
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
u24.aarch64
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
PIGSTY 0.0.0
|
Source
pig build pkg etcd_fdw; # build rpm/debInstall
Make sure PGDG and PIGSTY repo available:
pig repo add pgsql -u # add both repo and update cacheInstall this extension with pig:
pig install etcd_fdw; # install via package name, for the active PG version
pig install etcd_fdw -v 18; # install for PG 18
pig install etcd_fdw -v 17; # install for PG 17
pig install etcd_fdw -v 16; # install for PG 16
pig install etcd_fdw -v 15; # install for PG 15
pig install etcd_fdw -v 14; # install for PG 14
pig install etcd_fdw -v 13; # install for PG 13Create this extension with:
CREATE EXTENSION etcd_fdw;Usage
Quick Start
1. Enable Extension
CREATE EXTENSION etcd_fdw;2. Create Foreign Data Wrapper
CREATE FOREIGN DATA WRAPPER etcd_fdw
HANDLER etcd_fdw_handler
VALIDATOR etcd_fdw_validator;3. Create Server
-- Basic connection
CREATE SERVER etcd_plain
FOREIGN DATA WRAPPER etcd_fdw
OPTIONS (connstr '127.0.0.1:2379');
-- Production etcd with authentication and 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
-- Basic table mapping all keys
CREATE FOREIGN TABLE etcd_kv (key TEXT, value TEXT) SERVER etcd OPTIONS (rowid_column 'key');
-- Table with prefix filter (only keys starting with '/config/')
CREATE FOREIGN TABLE etcd_config (key TEXT, value TEXT)
SERVER etcd OPTIONS (rowid_column 'key', prefix '/config/');5. Query Data
-- Read all keys
SELECT * FROM etcd_kv;
-- Filter by key pattern (pushdown supported)
SELECT * FROM etcd_kv WHERE key LIKE '/app/%';
-- Range query
SELECT * FROM etcd_kv WHERE key >= '/a' AND key < '/b';
-- Insert new key
INSERT INTO etcd_kv (key, value) VALUES ('/mykey', 'myvalue');
-- Delete key
DELETE FROM etcd_kv WHERE key = '/mykey';6. Real-time Sync with etcd
Changes made outside PostgreSQL are immediately visible:
# Insert via etcdctl
etcdctl put '/config/db_pool_size' '20'-- Instantly visible in PostgreSQL
SELECT * FROM etcd_config;
key | value
-----------------------+-------
/config/db_pool_size | 20
(1 row)Reference
Server Options
| Option | Required | Description |
|---|---|---|
connstr |
Yes | etcd endpoint (e.g., 127.0.0.1:2379) |
username |
No | Authentication username |
password |
No | Authentication password |
ssl_ca |
No | CA certificate file path |
ssl_cert |
No | Client certificate file path |
ssl_key |
No | Client private key file path |
ssl_servername |
No | Domain name for TLS verification |
connect_timeout |
No | Connection timeout (default: 10s) |
request_timeout |
No | Request timeout (default: 30s) |
Foreign Table Options
| Option | Default | Description |
|---|---|---|
rowid_column |
Required | Column used as unique row identifier |
prefix |
None | Restrict to keys with this prefix |
keys_only |
false |
Fetch only keys, skip values |
revision |
0 |
Read at specific etcd revision |
key |
\0 |
Starting key for range scan |
range_end |
None | Exclusive end key for range scan |
consistency |
l |
l (linearizable) or s (serializable) |
Query Pushdown
The following operations are pushed down to etcd for better performance:
- WHERE:
=,>=,>,<=,<,BETWEEN,LIKE 'prefix%' - ORDER BY: Remote sorting
- LIMIT/OFFSET: Remote pagination
Limitations
UPDATEon key column is not supported. Workaround:INSERTnew key, thenDELETEold key.- Requires etcd v3 API.
Last updated on