2ndQuadrant » foreign data wrapper https://blog.2ndquadrant.it Il blog sui database di 2ndQuadrant Italia Thu, 25 Jan 2018 11:36:59 +0000 en-US hourly 1 http://wordpress.org/?v=4.3.15 PostgreSQL 9.5: IMPORT FOREIGN SCHEMA https://blog.2ndquadrant.it/postgresql-9-5-import-foreign-schema/ https://blog.2ndquadrant.it/postgresql-9-5-import-foreign-schema/#comments Wed, 08 Apr 2015 08:30:22 +0000 http://blog.2ndquadrant.it/?p=2104 Il rilascio di PostgreSQL 9.5 è vicino ed è arrivato il momento di analizzare le novità di questa nuova release.
Una funzionalità molto interessante della versione 9.5 sarà la possibilità di importare uno schema da un database remoto, tramite l’utilizzo di Foreign Data Wrapper e del comando IMPORT FOREIGN SCHEMA.

import-foreign-schema

I Foreign Data Wrapper (FDW)

Prima dell’introduzione dei Foreign Data Wrapper l’unico modo per connettere un database Postgres con una fonte dati esterna era il modulo dblink.
Nel 2003 viene definito all’interno del linguaggio SQL l’insieme di regole per la gestione in maniera standard di fonti di dati esterne: SQL/MED (management of external Data).

All’interno di PostgreSQL 9.1, una prima implementazione dello standard SQL/MED viene introdotta con i Foreign Data Wrapper, fornendo a Postgres l’accesso diretto a fonti di dati come file o altri database (Oracle, Mysql…), permettendone l’utilizzo come tabelle.
Il vantaggio di questo approccio è evidente: la possibilità di interrogare una fonte di dati esterna per poterne estrarre dati in maniera nativa eseguendo una semplice query. Il non dover ricorrere a moduli esterni per ottenere questo risultato è una notevole semplificazione del lavoro per i DBA.

Per saperne di più, potete dare una occhiata all’articolo pubblicato nel 2011, prima dell’uscita di PostgreSQL 9.1,  sul nostro blog: “PostgreSQL 9.1: Tabelle esterne con SQL/MED“.

Piccolo esempio di uso di un FDW

PostgreSQL 9.3 introduce il supporto ai foreign data wrapper in scrittura ed aggiunge anche il supporto al foreign data wrapper per PostgreSQL. Vediamo adesso un semplice esempio di utilizzo di un FDW connettendo fra loro due database Postgres.
Creiamo due database:

CREATE DATABASE source;
CREATE DATABASE destination;

All’interno di source creiamo una tabella di test con dei dati di test:

\c source
CREATE TABLE test1 AS SELECT id, md5(random()::text) FROM generate_series(1,5) id;

Connettiamoci adesso al db di destinazione e connettiamo i due database:

\c destination
CREATE EXTENSION postgres_fdw ;
CREATE SERVER src_srv FOREIGN DATA WRAPPER postgres_fdw OPTIONS( dbname 'source' );
CREATE USER MAPPING FOR postgres SERVER src_srv OPTIONS ( user 'postgres' );

Qualcuno di voi, giustamente, si sarà alzato in piedi, lamentandosi per la pessima scelta in fatto di sicurezza! Molto bene!

Per semplicità, ho infatti deciso di connetterci con l’utente amministratore “postgres” – anche per non deviare troppo dall’argomento principale dell’articolo. Sappiate che in un ambiente di produzione, per motivi di sicurezza, dovrete prendere altre scelte – ad esempio utilizzando un utente specifico per la vostra applicazione.

Ad ogni modo, una volta stabilita la connessione, possiamo creare sul database di destinazione una tabella esterna che punti a test1 sul database source:

CREATE FOREIGN TABLE test1_ft (id integer, md5 text) server src_srv options(table_name 'test1');

Possiamo adesso confrontare il contenuto fra le due tabelle di test:

select * from test1_ft ;
 id |               md5
----+----------------------------------
  1 | 63e5bc545b45f5c3961522f2609bedd9
  2 | d74af95e495d946d4a0887c51eb2cbe2
  3 | acce7cba66967332d01d51b74eb293f7
  4 | c5bb57ca54036004de334cf793792d4e
  5 | 02f32751b09042cf28b78cc29321a32e
(5 rows)

\c source

select * from test1 ;
 id |               md5
----+----------------------------------
  1 | 63e5bc545b45f5c3961522f2609bedd9
  2 | d74af95e495d946d4a0887c51eb2cbe2
  3 | acce7cba66967332d01d51b74eb293f7
  4 | c5bb57ca54036004de334cf793792d4e
  5 | 02f32751b09042cf28b78cc29321a32e
(5 rows)

È evidente, osservando questo esempio, che uno dei più grandi limiti all’utilizzo dei Foreign Data Wrapper è la necessità di definire separatamente, conoscendone la struttura, ogni tabella.
L’accesso a dati esterni quindi risulta laborioso qualora si voglia importare tabelle più complesse o, addirittura, interi schemi.

Fino ad adesso, operazioni del genere venivano fatte per mezzo di script in grado di connettersi al database sorgente e generare la struttura delle tabelle esterne in maniera automatica.
Fortunatamente la funzionalità IMPORT FOREIGN SCHEMA, presente nella prossima release di PostgreSQL, ci viene in aiuto.

IMPORT FOREIGN SCHEMA: sinossi

L’istruzione IMPORT FOREIGN SCHEMA, permette di importare uno schema intero da una fonte dati esterna, senza dover specificare la struttura di ogni singola tabella:

IMPORT FOREIGN SCHEMA remote_schema_name
FROM SERVER server_name INTO destination_schema;

Qualora non sia necessario importare uno schema intero, è possibile usare la clausola LIMIT TO e circoscrivere l’importazione unicamente alle tabelle a cui siamo interessati:

IMPORT FOREIGN SCHEMA remote_schema_name LIMIT TO (table_name, table_name, ...)
FROM SERVER server_name INTO destination_schema;

Altrimenti, se siamo interessati a escludere solo alcune tabelle dallo schema, è possibile filtrarle con la clausola EXCLUDE:

IMPORT FOREIGN SCHEMA remote_schema_name EXCLUDE (table_name, table_name, ...)
FROM SERVER server_name INTO destination_schema;

Esempio

Vediamo nel dettaglio come utilizzare questo comando, andando a estendere l’esempio usato in precedenza.
Connettiamoci al database sorgente e aggiungiamo due tabelle a quella che già è presente:

\c source
create table test2 as select id, md5(random()::text) from generate_series(1,20) as id;
create table test3 as select id, md5(random()::text) from generate_series(1,50) as id;

Creiamo adesso nel database di destinazione uno schema che useremo come target dell’istruzione IMPORT FOREIGN SCHEMA:

\c destination
create schema imported;

Adesso possiamo importare lo schema che abbiamo appena ampliato, contando sulla connessione aperta nell’esempio precedente:

IMPORT FOREIGN SCHEMA public FROM SERVER src_srv INTO imported;

Facciamo una rapida ispezione di tutte le tabelle sul database di destinazione per osservare il risultato dell’importazione dello schema:

\dE *.*

               List of relations
  Schema  |   Name   |     Type      |  Owner
----------+----------+---------------+----------
 imported | test1    | foreign table | postgres
 imported | test2    | foreign table | postgres
 imported | test3    | foreign table | postgres
 public   | test1_ft | foreign table | postgres

All’interno dello schema public notiamo la tabella che abbiamo creato in precedenza, mentre il risultato dell’importazione “in massa” è visibile nello schema imported.

Con questo esempio è possibile constatare quanto è più veloce e immediato l’utilizzo delle tabelle esterne con IMPORT FOREIGN SCHEMA.

Conclusioni

Con PostgreSQL 9.5, grazie a questa nuova funzionalità, le migrazioni dei dati diventeranno sempre più semplici e veloci.
Attualmente l’istruzione IMPORT FOREIGN SCHEMA è supportata solo da postgres_fdw e richiede che gli sviluppatori dei singoli driver la implementino nel modo più consono alla fonte di dati.
Aumentando il numero di driver in grado di supportare questa funzionalità si aprono scenari sempre più interessanti per PostgreSQL e per l’integrazione dei dati.

]]>
https://blog.2ndquadrant.it/postgresql-9-5-import-foreign-schema/feed/ 0
Rilasciato PostgreSQL 9.1 https://blog.2ndquadrant.it/rilasciato_postgresql_91/ https://blog.2ndquadrant.it/rilasciato_postgresql_91/#comments Mon, 12 Sep 2011 14:26:00 +0000 http://2ndblog.dev.xcon.it/rilasciato_postgresql_91/ Il PostgreSQL Global Development Group annuncia il rilascio di PostgreSQL 9.1. Quest’ultima versione del leader dei database open source offre tecnologie innovative, estensibilità senza paragoni e nuove funzionalità come replica sincrona, estensioni, tabelle esterne ("foreign data wrapper"), indici "K-Nearest Neighbor".

Nei mesi scorsi, 2ndQuadrant aveva pubblicato una serie di articoli su alcune delle novità di PostgreSQL 9.1, fra cui tabelle unlogged, tabelle esterne ed estensioni.

"PostgreSQL 9.1 fornisce alcune delle più avanzate funzionalità a disposizione di tutti i database open source ed è sostenuto da una comunità attiva e innovativa, con dimostrata esperienza di successo in ambito aziendale. PostgreSQL è inoltre ben posizionato per costruire ed eseguire applicazioni nel cloud", afferma Charles Fan (Vice presidente, Dipartimento di Ricerca e sviluppo, VMware).

Risponde a importanti richieste degli utenti

La versione 9.1 introduce molte funzionalità che per anni sono state richieste dagli utenti, rimuovendo diverse barriere nell’adozione di nuove applicazioni o nella migrazione a PostgreSQL. Fra le altre, sono degne di nota:

  • replica sincrona: sicurezza e consistenza dei dati (perdita zero) all’interno di un cluster in alta disponibilità di server PostgreSQL;
  • collation a livello di colonna: definizione delle regole di ordinamento delle stringhe a livello di database, tabella o colonna;
  • tabelle "unlogged": miglioramenti prestazionali per dati volatili (i.e. caching o sessioni web).

"Heroku offre il più grande servizio cloud per PostgreSQL del mondo come ‘database-as-a-service’", svela James Lindenbaum, co-fondatore di Heroku. "Il rilascio della replica sincrona dei dati nella 9.1 fornisce ai nostri clienti modalità innovative per la protezione di dati mission-critical. Consacra inoltre PostgreSQL come una delle soluzioni di memorizzazione dati più dinamiche al momento disponibili".

Avanza lo stato dell’arte

La nostra comunità di sviluppatori è in grado di innovare con funzionalità all’avanguardia. La versione 9.1 ne comprende diverse che rappresentano vere e proprie novità nell’industria dei database anche non open source, come:

  • indicizzazione "K-Nearest-Neighbor": indici basati sul concetto di distanza, che permettono interrogazioni più veloci nel campo delle ricerche testuali e geografiche;
  • "Serializable Snapshot Isolation": garanzia di consistenza fra transazioni concorrenti senza necessariamente doverle bloccare, mettendo in pratica il concetto di "true serializability";
  • "Writeable Common Table Expression": esecuzione di complessi aggiornamenti ai dati su più passi, utilizzando una singola query;
  • "Security-Enhanced Postgres": implementa la sicurezza di livello militare e il controllo d’accesso vincolato ("Mandatory Access Control").

"OpenERP si è sempre avvalso delle funzionalità di classe enterprise di PostgreSQL per dotare di una base veloce, affidabile e scalabile le applicazioni che aiutano a gestire le operazioni quotidiane delle aziende nostre clienti. L’integrità dei dati in contesti altamente concorrenti e transazionali è un argomento di importanza critica per noi, e siamo veramente entusiasti della funzionalità ‘Serializable Snapshot Isolation’ introdotta in PostgreSQL 9.1!", aggiunge Olivier Dony, Community Manager di OpenERP.

Estende il motore del database

L’estensibilità di PostgreSQL consente agli utenti di aggiungere nuove funzionalità ad un database già in produzione e di sfruttarlo per compiti che nessun altro sistema di gestione di database è in grado di fare. La versione 9.1 aggiunge nuovi strumenti per l’estensibilità, fra cui:

  • tabelle esterne tramite "Foreign Data Wrapper": permette di collegare e interrogare altri database direttamente da PostgreSQL;
  • estensioni: rende più facile creare, caricare e gestire nuove funzionalità del database.

Tutte le funzionalità descritte sopra e molte altre sono descritte in dettaglio sia nella pagina del wiki di PostgreSQL intitolata "What’s New In 9.1" che nelle note di rilascio.

Nel 25° anniversario dello sviluppo del database PostgreSQL, la nostra comunità continua a migliorare la tecnologia dei database ad ogni rilascio annuale. Scarica subito la versione 9.1 e prova il più avanzato sistema di database open source al mondo.

Su PostgreSQL: PostgreSQL è il leader dei sistemi di gestione di database open source, con una comunità internazionale costituita da migliaia di utenti e sviluppatori nonché decine di aziende ed enti provenienti da tutte le parti del mondo. Il progetto PostgreSQL vanta 25 anni di attività di ingegneria del software, cominciata all’Università di California a Berkeley e oggi può vantare un ritmo di sviluppo senza uguali. La gamma di funzionalità mature messe a disposizione da PostgreSQL non soltanto è in grado di competere con quelle offerte da sistemi di database proprietari, ma le migliora in termini di funzionalità avanzate, estensibilità, sicurezza e stabilità. Scopri maggiori informazioni su PostgreSQL e partecipa attivamente alla nostra comunità su http://www.postgresql.org e, per l’Italia, http://www.itpug.org.

Per maggiori informazioni in italiano sul rilascio: Press Kit di PostgreSQL 9.1

]]>
https://blog.2ndquadrant.it/rilasciato_postgresql_91/feed/ 0