Standardul SQL/MED (Management of External Data) este implementat în PostgreSQL prin mecanismul de Foreign Data Wrappers (FDW). Modulul nativ postgres_fdw permite unei instanțe PostgreSQL să se conecteze transparent la o altă instanță PostgreSQL la distanță și să acceseze tabelele acesteia ca și cum ar fi tabele locale (inclusiv operațiuni de JOIN între tabele locale și tabele remote, INSERT, UPDATE și DELETE).
-- 1. Activăm extensia oficială pe serverul local
CREATE EXTENSION IF NOT EXISTS postgres_fdw;
-- 2. Înregistrăm serverul remote de destinație
CREATE SERVER server_plati
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host '10.0.1.50', dbname 'baza_plati', port '5432');
-- 3. Mapăm utilizatorul local la credențialele de pe serverul remote
CREATE USER MAPPING FOR user_aplicatie
SERVER server_plati
OPTIONS (user 'readonly_user', password 'ParolaSecretaPlati2026!');
-- 4. Importăm automat definiția schemei din serverul remote:
CREATE SCHEMA IF NOT EXISTS plati_remote;
IMPORT FOREIGN SCHEMA public
LIMIT TO (tranzactii_card, facturi_generate)
FROM SERVER server_plati
INTO plati_remote;
-- 5. Acum putem interoga direct tabelul extern ca pe un tabel local!
SELECT u.email, t.suma, t.moneda
FROM utilizatori_locali u
JOIN plati_remote.tranzactii_card t ON u.id = t.user_id
WHERE t.status = 'aprobat';
Mecanismul de Optimizare Query Pushdown
În versiunile timpurii de FDW, interogările aduceau toate rândurile brute de pe serverul la distanță pe mașina locală pentru a aplica filtrele WHERE și agregările SUM()/GROUP BY. În versiunile moderne de PostgreSQL (14-17), optimizatorul aplică Query Pushdown:
- Clauzele
WHERE,ORDER BYși funcțiile agregate sunt transmise direct serverului remote. - Serverul remote procesează datele local folosindu-și proprii indecși și returnează doar rezultatul final gata filtrat și agregat, economisind lățime de bandă și timp de rețea.
-- Configurăm serverul foreign să trimită calculele direct la sursă:
ALTER SERVER server_plati OPTIONS (
ADD use_remote_estimate 'true',
ADD fdw_tuple_cost '0.05'
);
Cazuri Recomandate de Utilizare
- Rapoarte Cross-Database: Generarea de rapoarte BI care combină date din microservicii diferite (ex: CRM, Billing, Inventar) fără a construi un pipeline ETL greoi.
- Migrări de date fără downtime: Mutarea graduală a clienților între noduri diferite de baze de date prin scrieri transparente în foreign tables.
- Arhivare pe servere secundare (Cold Storage): Păstrarea datelor active din ultimul an pe SSD-uri locale ultra-rapide și interogarea datelor istorice de pe un server remote FDW dotat cu discuri mari de arhivă.