Els Wrappers de dades externes (FDW, per les seves sigles en anglès) són una funcionalitat avançada de PostgreSQL que permet accedir a dades emmagatzemades en fonts externes com si fossin taules locals. Aquesta capacitat és especialment útil per integrar dades de diferents sistemes i bases de dades en una única interfície de consulta.

Conceptes clau

  1. Foreign Data Wrapper (FDW): És un mòdul que permet a PostgreSQL accedir a dades externes.
  2. Servidor extern: Representa la ubicació de les dades externes.
  3. Taula externa: Una taula en PostgreSQL que apunta a una taula o vista en una base de dades externa.
  4. Opcions de connexió: Paràmetres necessaris per connectar-se a la font de dades externa, com ara l'URL, el port, l'usuari i la contrasenya.

Instal·lació i configuració

  1. Instal·lació del mòdul FDW

Per utilitzar un FDW, primer cal instal·lar el mòdul corresponent. PostgreSQL ofereix diversos FDW per a diferents fonts de dades, com ara postgres_fdw per a altres bases de dades PostgreSQL, mysql_fdw per a MySQL, etc.

-- Instal·lar el mòdul postgres_fdw
CREATE EXTENSION IF NOT EXISTS postgres_fdw;

  1. Creació del servidor extern

Un cop instal·lat el mòdul, cal crear un servidor extern que representi la ubicació de les dades externes.

-- Crear un servidor extern per a una altra base de dades PostgreSQL
CREATE SERVER foreign_server
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host 'foreign_host', dbname 'foreign_db', port '5432');

  1. Creació de l'usuari mapejat

Després de crear el servidor extern, cal definir un mapeig d'usuari per especificar les credencials d'accés a la base de dades externa.

-- Crear un mapeig d'usuari
CREATE USER MAPPING FOR local_user
SERVER foreign_server
OPTIONS (user 'foreign_user', password 'foreign_password');

  1. Creació de la taula externa

Finalment, es crea una taula externa que apunta a una taula o vista en la base de dades externa.

-- Crear una taula externa
CREATE FOREIGN TABLE foreign_table (
    id integer,
    name text,
    value numeric
)
SERVER foreign_server
OPTIONS (schema_name 'public', table_name 'remote_table');

Exemple pràctic

Escenari

Suposem que tenim dues bases de dades PostgreSQL: local_db i remote_db. Volem accedir a la taula products de remote_db des de local_db.

Passos

  1. Instal·lar el mòdul postgres_fdw a local_db:

    CREATE EXTENSION IF NOT EXISTS postgres_fdw;
    
  2. Crear el servidor extern a local_db:

    CREATE SERVER remote_server
    FOREIGN DATA WRAPPER postgres_fdw
    OPTIONS (host 'remote_host', dbname 'remote_db', port '5432');
    
  3. Crear el mapeig d'usuari a local_db:

    CREATE USER MAPPING FOR local_user
    SERVER remote_server
    OPTIONS (user 'remote_user', password 'remote_password');
    
  4. Crear la taula externa a local_db:

    CREATE FOREIGN TABLE remote_products (
        product_id integer,
        product_name text,
        price numeric
    )
    SERVER remote_server
    OPTIONS (schema_name 'public', table_name 'products');
    

Consultar dades de la taula externa

Un cop configurada la taula externa, podem consultar les dades com si fos una taula local.

SELECT * FROM remote_products;

Exercicis pràctics

Exercici 1

Objectiu: Crear una taula externa que apunti a una taula employees en una base de dades MySQL.

  1. Instal·la el mòdul mysql_fdw.
  2. Crea un servidor extern per a la base de dades MySQL.
  3. Defineix un mapeig d'usuari.
  4. Crea una taula externa que apunti a la taula employees.

Solució

-- Instal·lar el mòdul mysql_fdw
CREATE EXTENSION IF NOT EXISTS mysql_fdw;

-- Crear un servidor extern per a MySQL
CREATE SERVER mysql_server
FOREIGN DATA WRAPPER mysql_fdw
OPTIONS (host 'mysql_host', dbname 'mysql_db', port '3306');

-- Crear un mapeig d'usuari
CREATE USER MAPPING FOR local_user
SERVER mysql_server
OPTIONS (username 'mysql_user', password 'mysql_password');

-- Crear una taula externa
CREATE FOREIGN TABLE mysql_employees (
    employee_id integer,
    employee_name text,
    salary numeric
)
SERVER mysql_server
OPTIONS (dbname 'mysql_db', table_name 'employees');

Exercici 2

Objectiu: Consultar dades de la taula externa mysql_employees creada en l'exercici anterior.

SELECT * FROM mysql_employees;

Conclusió

Els Wrappers de dades externes (FDW) són una eina poderosa per integrar dades de diverses fonts en una única base de dades PostgreSQL. Aquesta funcionalitat permet als desenvolupadors i administradors de bases de dades accedir i gestionar dades de manera eficient, independentment de la seva ubicació física. Amb la configuració adequada, les taules externes es poden utilitzar com si fossin taules locals, facilitant la integració i l'anàlisi de dades.

Curs de PostgreSQL

Mòdul 1: Introducció a PostgreSQL

Mòdul 2: Operacions bàsiques de SQL

Mòdul 3: Consultes SQL avançades

Mòdul 4: Disseny de bases de dades i normalització

Mòdul 5: Funcionalitats avançades de PostgreSQL

Mòdul 6: Optimització i millora del rendiment

Mòdul 7: Seguretat i gestió d'usuaris

Mòdul 8: Treballant amb JSON i funcionalitats NoSQL

Mòdul 9: Extensions i eines avançades

Mòdul 10: Estudis de cas i aplicacions del món real

© Copyright 2024. Tots els drets reservats