etcd_fdw
Foreign data wrapper for etcd
Repository
cybertec-postgresql/etcd_fdw
https://github.com/cybertec-postgresql/etcd_fdw
Source
etcd_fdw-0.0.0.tar.gz
etcd_fdw-0.0.0.tar.gz
Overview
| Package | Version | Category | License | Language |
|---|---|---|---|---|
etcd_fdw | 0.0.0 | FDW | MIT | Rust |
| ID | Extension | Bin | Lib | Load | Create | Trust | Reloc | Schema |
|---|---|---|---|---|---|---|---|---|
| 8660 | etcd_fdw | No | Yes | No | Yes | No | No | - |
| Related | wrappers redis_fdw kafka_fdw postgres_fdw mysql_fdw mongo_fdw |
|---|
Version
| Type | Repo | Version | PG Ver | Package | Deps |
|---|---|---|---|---|---|
| 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 | - |
Build
You can build the RPM / DEB packages for etcd_fdw using pig build:
pig build pkg etcd_fdw # build RPM / DEB packages
Install
You can install etcd_fdw directly. First, make sure the PGDG and PIGSTY repositories are added and enabled:
pig repo add pgsql -u # Add repo and update cache
Install the extension using pig or apt/yum/dnf:
pig install etcd_fdw; # Install for current active PG version
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:
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.
Feedback
Was this page helpful?
Thanks for the feedback! Please let us know how we can improve.
Sorry to hear that. Please let us know how we can improve.