55 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| +++
 | |
| images = ['images/blog/postgresql.jpg']
 | |
| categories = ['Soluzioni', 'Technology']
 | |
| tags = ['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;
 | |
| ```
 | 
