117+ Foreign Data Wrappers Extensions for PostgreSQL

postgres_fdw, oracle_fdw, mysql_fdw, mongo_fdw, and other Postgres foreign data wrappers — query remote systems as native tables. Ranked by GitHub stars.

Last reviewed: June 5, 2026
45 extensions
1
wrappers
846+6 30d

Foreign data wrappers developed by Supabase

Foreign Data Wrappers·Apache-2.0·Rust
2
Multicorn
703+1 30d

Foreign data wrapper that lets you implement custom FDWs in Python to fetch external data as Postgres tables.

Foreign Data Wrappers·PostgreSQL·Python
3
mysql_fdw
5960 30d

Foreign data wrapper for querying a MySQL server

Foreign Data Wrappers·BSD-3-Clause·C
4
oracle_fdw
542+3 30d

foreign data wrapper for Oracle access

Foreign Data Wrappers·PostgreSQL·C
5
redis_fdw
534−1 30d

Foreign data wrapper for querying a Redis server

Foreign Data Wrappers·PostgreSQL·C
6
tds_fdw
428+3 30d

Foreign data wrapper for querying a TDS database (Sybase or Microsoft SQL Server)

Foreign Data Wrappers·PostgreSQL·C
7
parquet_fdw
387+2 30d

Read-only foreign data wrapper for querying Apache Parquet files as PostgreSQL tables.

Foreign Data Wrappers·PostgreSQL·C++
8
mongo_fdw
3400 30d

foreign data wrapper for MongoDB access

Foreign Data Wrappers·LGPL-3.0·C
9
sqlite_fdw
260+1 30d

SQLite Foreign Data Wrapper

Foreign Data Wrappers·PostgreSQL·C
10

Queries ClickHouse from PostgreSQL via a foreign data wrapper, with aggregate and join pushdown for analytics workloads.

Foreign Data Wrappers·PostgreSQL·C
11

aws_s3 postgres extension to import/export data from/to s3

Foreign Data Wrappers·Apache-2.0·SQL
12
holycorn
1650 30d

Implements foreign data wrappers in Ruby via an embedded mruby VM, with built-in support for Redis and other backends.

Foreign Data Wrappers·LGPL-3.0·C
13
hdfs_fdw
1400 30d

foreign-data wrapper for remote hdfs servers

Foreign Data Wrappers·BSD-3-Clause·C
14
pgrocks-fdw
1320 30d

Foreign data wrapper that exposes RocksDB and other LSM-tree key-value stores as PostgreSQL tables.

Foreign Data Wrappers·Apache-2.0·C
15
www_fdw
1260 30d

Foreign data wrapper that exposes remote web services (JSON, XML) as PostgreSQL tables.

Foreign Data Wrappers·PostgreSQL·C
16
multicorn2
113+1 30d

Fetch foreign data in Python in your PostgreSQL server.

Foreign Data Wrappers·PostgreSQL·C
17
kafka_fdw
1120 30d

kafka Foreign Data Wrapper for CSV formatted messages

Foreign Data Wrappers·PostgreSQL·C
18
json_fdw
1100 30d

Queries local or remote line-delimited JSON files as PostgreSQL foreign tables with read and write support.

Foreign Data Wrappers·C
19

Provides a writable foreign data wrapper for Redis, supporting SELECT, INSERT, UPDATE, DELETE on strings, sets, hashes, lists, zsets, and pubsub.

Foreign Data Wrappers·C
20
jdbc_fdw
780 30d

foreign-data wrapper for remote servers available over JDBC

Foreign Data Wrappers·PostgreSQL·C
21

Foreign data wrapper that fetches tweets from the Twitter API and exposes them as a queryable table.

Foreign Data Wrappers·PostgreSQL·C
22
s3_fdw
700 30d

Provides a foreign data wrapper for reading Amazon S3 files using PostgreSQL's built-in COPY format.

Foreign Data Wrappers·C
23

Queries InfluxDB 1.8 and 2.7 time-series data as PostgreSQL foreign tables with pushdown of GROUP BY time intervals.

Foreign Data Wrappers·PostgreSQL·C
24
dump_fdw
540 30d

Foreign data wrapper that queries data directly from PostgreSQL custom-format dump files for selective restore and analytics.

Foreign Data Wrappers·BSD-3-Clause·C
25
git_fdw
490 30d

PostgreSQL Git Foreign Data Wrapper

Foreign Data Wrappers·MIT·C
26

Foreign data wrapper for Firebird

Foreign Data Wrappers·PostgreSQL·C
27

Foreign data wrapper that exposes MonetDB columnar database tables as PostgreSQL foreign tables.

Foreign Data Wrappers·C
28

Provides a Rust foreign data wrapper for querying Google Cloud Bigtable and HBase-compatible databases as PostgreSQL tables.

Foreign Data Wrappers·MIT·Rust
29
kt_fdw
390 30d

Foreign data wrapper that exposes Kyoto Tycoon key/value stores as PostgreSQL tables, supporting reads, writes, and transactions.

Foreign Data Wrappers·MIT·C
30

Extension for querying PgBouncer stats from normal SQL views & running pgbouncer commands from normal SQL functions

Foreign Data Wrappers·PostgreSQL·SQL
31
go-fdw
350 30d

Go project template for Foreign Data Wrappers for PostgreSQL

Foreign Data Wrappers·MIT·Go
32
ldap_fdw
350 30d

Foreign data wrapper that exposes LDAP directory servers as queryable PostgreSQL tables.

Foreign Data Wrappers·PostgreSQL·C
33
neo4j_fdw
340 30d

Foreign data wrapper that exposes Neo4j Cypher query results as PostgreSQL tables.

Foreign Data Wrappers·C
34
sqlite_fdw
340 30d

Provides an experimental foreign data wrapper for querying SQLite databases as PostgreSQL tables.

Foreign Data Wrappers·C
35

Foreign data wrapper for querying CouchDB document databases as PostgreSQL foreign tables.

Foreign Data Wrappers·C
36

Foreign data wrapper that exposes delimited file rows as a single text[] column for variable field counts.

Foreign Data Wrappers·C
37

Send redis pub/sub messages to Redis from PostgreSQL Directly

Foreign Data Wrappers·MIT·C
38

Foreign data wrapper that reads OpenStreetMap PBF files as queryable PostgreSQL tables.

Foreign Data Wrappers·C
39
db2_fdw
290 30d

foreign data wrapper for DB2 access

Foreign Data Wrappers·PostgreSQL·C
40

Queries IBM Informix databases as PostgreSQL foreign tables via the ESQL/C Client SDK, with read and write support.

Foreign Data Wrappers·PostgreSQL·C
41
odbc_fdw
280 30d

Foreign data wrapper that queries remote databases through ODBC driver managers and DSN connections.

Foreign Data Wrappers·C
42

foreign-data wrapper for remote PGSpider servers

Foreign Data Wrappers·PostgreSQL·C
43
lsm
270 30d

Provides a foreign data wrapper for accessing RocksDB key-value storage as PostgreSQL tables.

Foreign Data Wrappers·Apache-2.0·C
44
jdbc2_fdw
260 30d

Queries remote JDBC-compatible data sources from PostgreSQL with predicate push-down via a deparser.

Foreign Data Wrappers·C
45

foreign-data wrapper for Postgres log file access

Foreign Data Wrappers·Apache-2.0·C

What is a PostgreSQL Foreign Data Wrapper?

A foreign data wrapper (FDW) is a Postgres extension that exposes a remote system — another database, an HTTP API, an object store, a file — as a set of foreign tables. You declare a foreign server, map credentials with a user mapping, define a foreign table schema, and then SELECT (and sometimes INSERT/UPDATE) from that table. Postgres translates the query, routes it to the remote system, and returns the rows back into your transaction. The FDW interface itself is part of core Postgres (SQL/MED standard), but each target system needs its own wrapper implementation — postgres_fdw for cross-Postgres queries, mysql_fdw, oracle_fdw, mongo_fdw, file_fdw, and dozens more.

When to Use a Foreign Data Wrapper

Use an FDW when you need cross-system reads without copying data — joining Postgres tables with MySQL inventory, querying S3 Parquet files from a stored procedure, federated reads across regional databases, or one-time migrations with `INSERT INTO local SELECT FROM foreign`. FDWs are NOT a replacement for replication when you need consistent local reads or sub-millisecond latency: every query hits the remote system, and predicate pushdown quality varies wildly between wrappers. For analytical workloads at scale, look at pg_lakehouse or ParadeDB's lakehouse engine instead. For real-time replication, use logical replication or Debezium. For one-off ETL, FDWs shine.

Frequently Asked Questions

What is a PostgreSQL foreign data wrapper (FDW)?
An FDW is an extension that lets a Postgres database query data stored in a remote system — another Postgres instance, MySQL, Oracle, MongoDB, files on disk, S3, BigQuery, Snowflake, REST APIs — as if it were a local table. The mechanism is part of the SQL/MED standard and built into Postgres core; specific wrappers are distributed as extensions (postgres_fdw, oracle_fdw, mysql_fdw, file_fdw, etc.). Once configured, you write normal SELECT statements and Postgres handles the remote round-trip.
What's the difference between postgres_fdw and dblink?
postgres_fdw is the modern, recommended way to connect two Postgres databases — you declare foreign tables once and query them with standard SQL, and Postgres handles connection pooling, transactions, and predicate pushdown. dblink is the older approach: you call `dblink('connection string', 'SELECT ...')` inline as a function, which returns rows but requires explicit type casts and bypasses Postgres' query planner. For new code, use postgres_fdw. dblink is still useful for ad-hoc remote calls and DDL operations the FDW interface can't express.
Do FDWs work on AWS RDS, Aurora, and Supabase?
Yes — every major managed service supports postgres_fdw (cross-Postgres queries) and a curated set of additional FDWs. AWS RDS and Aurora support postgres_fdw, dblink, oracle_fdw (RDS only), mysql_fdw, and tds_fdw (for SQL Server). Supabase ships postgres_fdw plus its own wrappers for Stripe, Firebase, and ClickHouse via the `wrappers` extension. Neon supports postgres_fdw. Restrictions: most providers block outbound network access to arbitrary hosts, so you'll need to configure VPC peering or allow-list the remote system.
How do I install a PostgreSQL foreign data wrapper?
Install the FDW's OS package (e.g. `apt install postgresql-17-mysql-fdw` or `yum install mysql_fdw_17`), then inside the target database run `CREATE EXTENSION mysql_fdw;`. Next, define the connection: `CREATE SERVER mysrv FOREIGN DATA WRAPPER mysql_fdw OPTIONS (host '...', port '3306');`, attach credentials with `CREATE USER MAPPING FOR current_user SERVER mysrv OPTIONS (username '...', password '...');`, and declare foreign tables with `CREATE FOREIGN TABLE`. On managed services, the binary is pre-installed — only the SQL steps are needed.
Which FDW should I use for Oracle, MySQL, MongoDB, or S3?
For Oracle: oracle_fdw — the most mature non-Postgres wrapper, used in production for years. For MySQL/MariaDB: mysql_fdw is standard. For MongoDB: mongo_fdw works for simple JSON document reads. For S3 / Parquet / Iceberg: pg_lakehouse or ParadeDB's wrappers give the best performance — they push predicates down into the columnar format. For BigQuery / Snowflake / Redshift: Supabase's `wrappers` collection or commercial wrappers from CrunchyData. For arbitrary REST APIs: multicorn (Python-based FDW framework) lets you write a custom wrapper in 50 lines.

Manage PostgreSQL Visually

1bench is a modern GUI client for PostgreSQL — install extensions, write queries, and inspect schemas without leaving the IDE.

Try 1bench for PostgreSQL