56 lines
2.2 KiB
Markdown
56 lines
2.2 KiB
Markdown
|
+++
|
||
|
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.
|
||
|
|
||
|
<!--more-->
|
||
|
|
||
|
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;
|
||
|
```
|