PostgreSQL DB Link and FDW

DB Link:

                ‘DB Link’ in PostgreSQL enables a database user to access a table present on a different postgres instance. It provides a functionality in PostgreSQL similar to that of ‘DB Link’ in Oracle, ‘Linked Server’ in SQL Server and ‘Federated tables’ in MySQL.

Options:

dblink_connect — opens a persistent connection to a remote database
dblink_disconnect — closes a persistent connection to a remote database
dblink — executes a query in a remote database
dblink_exec — executes a command in a remote database

Example:

postgres=# create extension dblink ;
CREATE EXTENSION
postgres=# create server myserver foreign data wrapper dblink_fdw OPTIONS (host'192.168.1.201',dbname'pearl',port'5432');
CREATE SERVER
postgres=# create user MAPPING FOR postgres SERVER myserver OPTIONS (user'postgres',password'post');
CREATE USER MAPPING
postgres=# select * from dblink('myserver','select * from emp') as a(id int,name text,age int);
 id |   name   | age 
----+----------+-----
  1 | muthu    |  28
  2 | siva     |  25
  3 | chandru  |  27
  4 | thanigai |  25
  5 | kathir   |  27
  6 | jana     |  28
(6 rows)
postgres=# select dblink_exec('myserver','insert into emp values(7,''regan'',25);');
 dblink_exec 
-------------
 INSERT 0 1
(1 row)

postgres=# select dblink_exec('myserver','update emp set name=''muthu siva'' where id=1;');
 dblink_exec 
-------------
 UPDATE 1
(1 row)

postgres=# select dblink_exec('myserver','delete from emp where name=''siva'';');
 dblink_exec 
-------------
 DELETE 1
(1 row)

postgres=# select * from dblink('myserver','select * from emp') as a(id int,name text,age int);
 id |    name    | age 
----+------------+-----
  3 | chandru    |  27
  4 | thanigai   |  25
  5 | kathir     |  27
  6 | jana       |  28
  7 | regan      |  25
  1 | muthu siva |  28
(6 rows)
postgres=# select dblink_connect('myconn','myserver');
 dblink_connect 
----------------
 OK
(1 row)

postgres=# select * from dblink('myconn','select * from emp') as a(id int,name text,age int);
 id |    name    | age 
----+------------+-----
  3 | chandru    |  27
  4 | thanigai   |  25
  5 | kathir     |  27
  6 | jana       |  28
  7 | regan      |  25
  1 | muthu siva |  28
(6 rows)

postgres=# select dblink_disconnect('myconn');
 dblink_disconnect 
-------------------
 OK
(1 row)


FDW:

              PostgreSQL has a useful feature called Foreign Data Wrapper, which lets you create foreign tables in a PostgreSQL database that are proxies for some other data source. When you make a query against a foreign table, the Foreign Data Wrapper will query the external data source and return the results as if they were coming from a table in your database.

Example:

postgres=# create extension postgres_fdw ;
CREATE EXTENSION
postgres=# create server myserver foreign data wrapper postgres_fdw OPTIONS (host'192.168.1.201',dbname'pearl',port'5432');
CREATE SERVER
postgres=# create user MAPPING FOR postgres SERVER myserver OPTIONS (user'postgres',password'post');
CREATE USER MAPPING
postgres=# import foreign schema public from server myserver into public;
IMPORT FOREIGN SCHEMA
postgres=# select * from emp;
 id |    name    | age 
----+------------+-----
  3 | chandru    |  27
  4 | thanigai   |  25
  5 | kathir     |  27
  6 | jana       |  28
  7 | regan      |  25
  1 | muthu siva |  28
(6 rows)

postgres=# insert into emp values (8,'moorthi',28);
INSERT 0 1
postgres=# select * from emp;
 id |    name    | age 
----+------------+-----
  3 | chandru    |  27
  4 | thanigai   |  25
  5 | kathir     |  27
  6 | jana       |  28
  7 | regan      |  25
  1 | muthu siva |  28
  8 | moorthi    |  28
(7 rows)
postgres=# select * from pg_foreign_table ;
 ftrelid | ftserver |                ftoptions                
---------+----------+-----------------------------------------
   24828 |    24826 | {schema_name=public,table_name=company}
   24831 |    24826 | {schema_name=public,table_name=emp}
   24834 |    24826 | {schema_name=public,table_name=v1}
(3 rows)

postgres=# select * from pg_foreign_server;
 srvname  | srvowner | srvfdw | srvtype | srvversion | srvacl |                 srvoptions                  
----------+----------+--------+---------+------------+--------+---------------------------------------------
 myserver |       10 |  24825 |         |            |        | {host=192.168.1.201,dbname=pearl,port=5432}
(1 row)

postgres=# select * from pg_user_mapping;
 umuser | umserver |           umoptions           
--------+----------+-------------------------------
     10 |    24826 | {user=postgres,password=post}
(1 row)

postgres=# select * from pg_user_mappings;
 umid  | srvid | srvname  | umuser | usename  |           umoptions           
-------+-------+----------+--------+----------+-------------------------------
 24827 | 24826 | myserver |     10 | postgres | {user=postgres,password=post}
(1 row)

Comments

Post a Comment

Popular posts from this blog

PostgreSQL pg_pool-II Installation and Configuration

PostgreSQL Migration Using MTK

PostgreSQL Pages and Tuples