En fdw er en extension til PostgreSQL
Med foreign data wrappers (fdw) er det enkelt at tilføje data fra andre datakilder til PostgreSQL. Datakilder kan være hvad som helst som f.eks. tesktfiler,csv filer, webservices, andre databaser eller andre PostgreSQL databser. Der findes mange 3 parts fdw'er og enkelte indbyggede i PostgresSQL kernen.
Fdw's kan således også anvende stil dataimport fra andre systemer, hvor man traditionelt ville have anvendt dump/restore eller ETL værktøjer, herunder ogr2ogr Med en FDW er "fremmede" data direkte indlejret i databasen.
Det giver også mulighed for at gradvist migrere fra Oracle til PstgreSQL
se mere på:
https://wiki.postgresql.org/wiki/Foreign_data_wrappers
http://www.postgresql-sessions.org/en/4/start
Kan bruges til at forbinde til at andre PostgreSQL databaser
Kan bruges til oprette forbidnelse til CSV fil som om det var en tabel i databasen
Der arbejdes på højtryk på Spatial support med denne fdw: https://github.com/laurenz/oracle_fdw/issues/5
Man kan tilbyde at hjælpe med finansieringen
Er et eksempel på hvordan ODBC kan bruges mod SQL server:
Multicorn er den datawrapper til mange forskellige RDMBS'er samt filer,rss feeds m.m. Er skrevet i Python og egne fdw'er skulle være "rimelig enkle at skrive.
create extension oracle_fdw;
CREATE SERVER oradb FOREIGN DATA WRAPPER oracle_fdw
OPTIONS (dbserver '//10.211.55.5/xe');
GRANT USAGE ON FOREIGN SERVER oradb TO mbj
CREATE USER MAPPING FOR mbj SERVER oradb
OPTIONS (user 'septimadb', password 'septima4you');
-- Der er andre authentification metoder
DROP FOREIGN TABLE IF EXISTS oracle.demo_orders;
CREATE FOREIGN TABLE oracle.demo_orders (
ORDER_ID integer OPTIONS (key 'true') NOT NULL,
CUSTOMER_ID numeric,
ORDER_TOTAL numeric,
ORDER_TIMESTAMP date,
USER_ID integer
) SERVER oradb OPTIONS (table 'DEMO_ORDERS');
-- Vi kan læse fra tabellen
SELECT * FROM oracle.demo_orders;
--- Vi kan opdatere til tabellen
UPDATE oracle.demo_orders SET order_total = 666 WHERE order_id = 1
--- VI kan oprette i tabellen
INSERT INTO oracle.demo_orders (order_id, customer_id, order_total,order_timestamp,user_id) VALUES(777, 2, 999,'2014-09-28', 2)
CREATE EXTENSION postgres_fdw;
CREATE SERVER pg_asiaq
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host 'localhost', port '5432', dbname 'asiaq');
CREATE USER MAPPING FOR public SERVER
pg_asiaq
OPTIONS (user 'mbj', password '123Portal');
DROP FOREIGN TABLE IF EXISTS asiaq.bygninger;
--Dette kan være udvalgte kolnner fra tabellen
CREATE FOREIGN TABLE asiaq.bygninger (
id serial,
geom geometry(Polygon,32622),
"Info" character varying(50),
"Objekttype" character varying(50),
"Z" double precision,
"Konverteret" character varying(16)
)
SERVER pg_asiaq OPTIONS (schema_name 'att0902', table_name 'bygninger');
SELECT * FROM asiaq.bygninger;
-- Vi kan opdatere
UPDATE asiaq.bygninger SET "Z" = 99.99 WHERE id=1
SELECT * FROM asiaq.bygninger;
-- Vi kan slette
DELETE FROM asiaq.bygninger WHERE id =1
-- Vi kan orpette nye records
INSERT INTO ASIAQ.bygninger(
geom, "Info", "Objekttype", "Z", "Konverteret")
VALUES (ST_GeomFromText('POLYGON((390309.70572787 7538535.16303447,390306.811436522 7538533.90329089,390307.759708616 7538531.72373453,390304.79120467 7538530.44399502,390308.015329789 7538522.94552131,390322.478540685 7538529.21424533,390319.097744523 7538536.62273735,390310.637508276 7538532.97348015,390309.70572787 7538535.16303447))',32622),
'--', 'SKUR', 66.66, '20110110');
SELECT * FROM asiaq.bygninger;