tds_fdw
tds_fdw : Foreign data wrapper for querying a TDS database (Sybase or Microsoft SQL Server)
Overview
| ID | Extension | Package | Version | Category | License | Language |
|---|---|---|---|---|---|---|
| 8620 | tds_fdw | tds_fdw | 2.0.5 | FDW | PostgreSQL | C |
| Attribute | Has Binary | Has Library | Need Load | Has DDL | Relocatable | Trusted |
|---|---|---|---|---|---|---|
--s-d-r | No | Yes | No | Yes | yes | no |
| Relationships | |
|---|---|
| See Also | mysql_fdw oracle_fdw babelfishpg_tsql babelfishpg_tds wrappers odbc_fdw jdbc_fdw db2_fdw |
Packages
| Type | Repo | Version | PG Major Compatibility | Package Pattern | Dependencies |
|---|---|---|---|---|---|
| EXT | PGDG | 2.0.5 | 18 17 16 15 14 | tds_fdw | - |
| RPM | PGDG | 2.0.5 | 18 17 16 15 14 | tds_fdw_$v | - |
| DEB | PGDG | 2.0.5 | 18 17 16 15 14 | postgresql-$v-tds-fdw | - |
| Linux / PG | PG18 | PG17 | PG16 | PG15 | PG14 |
|---|---|---|---|---|---|
el8.x86_64 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 |
el8.aarch64 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 |
el9.x86_64 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 |
el9.aarch64 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 |
el10.x86_64 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 |
el10.aarch64 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 |
d12.x86_64 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 |
d12.aarch64 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 |
d13.x86_64 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 |
d13.aarch64 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 |
u22.x86_64 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 |
u22.aarch64 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 |
u24.x86_64 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 |
u24.aarch64 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 |
u26.x86_64 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 |
u26.aarch64 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 | PGDG 2.0.5 |
Source
Install
Make sure PGDG repo available:
pig repo add pgdg -u # add pgdg repo and update cacheInstall this extension with pig:
pig install tds_fdw; # install via package name, for the active PG version
pig install tds_fdw -v 18; # install for PG 18
pig install tds_fdw -v 17; # install for PG 17
pig install tds_fdw -v 16; # install for PG 16
pig install tds_fdw -v 15; # install for PG 15
pig install tds_fdw -v 14; # install for PG 14Create this extension with:
CREATE EXTENSION tds_fdw;Usage
- Sources: README, foreign server, foreign table, user mapping, foreign schema, variables
tds_fdw is a foreign data wrapper for querying TDS databases such as Sybase and Microsoft SQL Server through a DB-Library implementation such as FreeTDS.
Create Server
CREATE EXTENSION tds_fdw;
CREATE SERVER mssql_svr
FOREIGN DATA WRAPPER tds_fdw
OPTIONS (servername '127.0.0.1', port '1433',
database 'tds_fdw_test', tds_version '7.1');Server Options: servername (server address or DSN, supports comma-separated failover list), port, database, dbuse (0 for direct connection, non-0 for dbuse()), tds_version (protocol version), language, character_set, msg_handler (notice or blackhole), sqlserver_ansi_mode, fdw_startup_cost, fdw_tuple_cost.
Create User Mapping
CREATE USER MAPPING FOR postgres
SERVER mssql_svr
OPTIONS (username 'sa', password 'secret');For Azure SQL databases, use the format username@servername for the username option.
Create Foreign Table
Map a remote table directly:
CREATE FOREIGN TABLE mssql_table (
id integer,
name varchar(255),
value numeric(10,2)
)
SERVER mssql_svr
OPTIONS (schema_name 'dbo', table_name 'mytable');Or use a custom SQL query:
CREATE FOREIGN TABLE mssql_query (
id integer,
name varchar(255),
total numeric(10,2)
)
SERVER mssql_svr
OPTIONS (query 'SELECT id, name, SUM(amount) AS total FROM orders GROUP BY id, name');Table Options: table_name or query (one required, mutually exclusive), schema_name, match_column_names (map by name vs position), use_remote_estimate, local_tuple_estimate, row_estimate_method (execute or showplan_all).
Column Options: column_name (remote column name if different from local).
Query and Debug
SELECT * FROM mssql_table WHERE id > 100;
-- View the remote query sent to SQL Server
EXPLAIN (VERBOSE) SELECT * FROM mssql_table WHERE id > 100;Import Foreign Schema
IMPORT FOREIGN SCHEMA dbo
FROM SERVER mssql_svr
INTO public
OPTIONS (import_default 'true');Import Options: import_default, import_not_null, and keep_custom_types for preserving Sybase user-defined types when matching PostgreSQL domains already exist.
Planner And Runtime Notes
The upstream README says the current version does not support join pushdown or write operations. It does support WHERE and column pushdown when match_column_names is enabled.
Set diagnostic memory-stat variables with PostgreSQL SET, for example:
SET tds_fdw.show_finished_memory_stats = 1;Available variables are tds_fdw.show_before_row_memory_stats, tds_fdw.show_after_row_memory_stats, and tds_fdw.show_finished_memory_stats.
Pigsty package metadata is version 2.0.5 from PGDG for PostgreSQL 14-18. Upstream docs say the FDW should support PostgreSQL 9.2+ and the current build matrix includes PostgreSQL 13-18, but this stub follows the packaged PostgreSQL versions from db/extension.csv.