speedtech-website/content/it/blogspot/postgresql-database-link.md
2024-10-04 11:58:15 +02:00

2.2 KiB

+++ 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 :

CREATE EXTENSION IF NOT EXISTS postgres_fdw;

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)

Su serverdest :

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

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 :

IMPORT FOREIGN SCHEMA schemaorig LIMIT TO (tableorig) FROM SERVER serverorig INTO schemadest;
GRANT ALL ON TABLE schemadest.tableorig TO myuser;