+++ images = ['images/blog/postgresql.jpg'] categoriesspot = ['Solutions', 'Technology'] tagsspot = ['Server', 'Database', 'PostgreSQL'] date = '2022-12-11' lastmod = '2022-12-11' title = 'Database link con PostgreSQL' published = true translationKey ='blog-postgresql-database-link' slug = 'postgresql-database-link' +++ In PostgreSQL è possibile creare dei database links e connettere due database separati, sia che risiedano sullo stesso server o su servers separati, purchè siano accessibili tramite rete. La nomenclatura utilizzata è la seguente : - ```serverorig``` : il server principale di origine - ```databaseorig``` : il database sul server principale di origine - ```serverdest``` : il server secondario di destinazione sul quale verrà creato il database link che punta a ```serverorig``` - ```schemaorig``` : lo schema di origine sul server principale - ```schemadest``` : lo schema di destinazione sul server secondario #### 1. Installazione dell'estensione Il primo passo da compiere è installare su ```serverdest``` l'estensione ```postgres_fdw``` come utente ```postgres``` : ```sql CREATE EXTENSION IF NOT EXISTS postgres_fdw; ``` #### 2. Creazione utente per accesso tramite database link Su ```serverorig``` creare un utente che consenta la connessione da ```serverdest``` e gli accessi allo schema ```schemaorig``` e tabelle interessate. Per semplicità l'utente sarà ```userdest``` con password ```passworddest``` e dovrà avere accesso alla tabella ```tableorig``` con i privilegi desiderati : (```SELECT, INSERT, UPDATE, DELETE```) #### 3. Creazione del database link Su ```serverdest``` : ```sql CREATE serverorig FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host 'serverorig', port 'portorig', dbname 'databaseorig'); ``` Creare su ```serverdest``` il mapping per l'utente (```myuser```) che deve poter usare il database link ```sql CREATE USER MAPPING FOR myuser SERVER serverorig OPTIONS ( user 'userdest' , password 'passworddest'); ``` #### 5. Importare la struttura delle tabelle dallo schema principale ed assegnare i permessi Su ```serverdest``` : ```sql IMPORT FOREIGN SCHEMA schemaorig LIMIT TO (tableorig) FROM SERVER serverorig INTO schemadest; GRANT ALL ON TABLE schemadest.tableorig TO myuser; ```