| 
									
										
										
										
											2024-10-04 11:58:15 +02:00
										 |  |  | +++ | 
					
						
							|  |  |  | images = ['images/blog/postgresql.jpg'] | 
					
						
							| 
									
										
										
										
											2025-09-15 08:46:36 +02:00
										 |  |  | categories = ['Soluzioni', 'Technology'] | 
					
						
							|  |  |  | tags = ['Server', 'Database', 'PostgreSQL'] | 
					
						
							| 
									
										
										
										
											2024-10-04 11:58:15 +02:00
										 |  |  | 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; | 
					
						
							|  |  |  | ``` |