PostgreSQL

[PostgreSQL] postgres_fdw 설치 & 가이드

리거니 2023. 4. 12. 11:24
postgres_fdw

Oracle DB-Link 처럼 물리적으로 떨어져 있는 데이터베이스를 사용하기 위한 Extension
PostgresqlDB Link 보안 취약점 타파를 위해 Oracle DB Link와 다르게 Link를 사용할 연동 테이블 별로 각각 Link 생성
전체 데이터베이스에 링크 생성 불가

 


extension 설치 

create extension postgres_fdw;

 

extension 조회

experdb=# \dx+ postgres_fdw
Objects in extension "postgres_fdw"
-[ RECORD 1 ]------+--------------------------------------------
Object description | foreign-data wrapper postgres_fdw
-[ RECORD 2 ]------+--------------------------------------------
Object description | function postgres_fdw_disconnect(text)
-[ RECORD 3 ]------+--------------------------------------------
Object description | function postgres_fdw_disconnect_all()
-[ RECORD 4 ]------+--------------------------------------------
Object description | function postgres_fdw_get_connections()
-[ RECORD 5 ]------+--------------------------------------------
Object description | function postgres_fdw_handler()
-[ RECORD 6 ]------+--------------------------------------------
Object description | function postgres_fdw_validator(text[],oid)

 


postgres_fdw 사용 방법

 

※ superuser 권한이 있는 user 만 가능

 

foreign server 생성

experdb=# create server [Server Name] foreign data wrapper postgres_fdw options 
          ( host '', port '', dbname '' );
          ( Target DB (연결 할 원격지))

 

Source DB 의 현 User 와 Target DB 간 mapping

experdb=# create user mapping for [Schema Name] server [Server Name] options ( user '', password '' );
                                                                             ( Target DB 의 계정 정보 (연결 할 원격지))

CREATE USER MAPPING

 

Source DB 에서 원격지로 연결할 User 에 대해 권한 부여

experdb=# grant usage on foreign server foreign_server TO [user] ;    (접근 권한 부여)

GRANT


연결할 원격지에 있는 foregin table 생성 (Target DB의 Table 과 동일하게)

experdb=# create foreign table [Target DB의 table NAME] ( idx int, test_string text, random_string text ) server [Server Name];
                                                        ( Target DB 의 Table Column )

CREATE FOREIGN TABLE

 

원격지 table 접속

experdb=# select * from [Target DB의 table NAME] ;

 

※ postgres 15v 부터 postgres_fdw 에서의 CASE WHEN 표현식이 가능하다 .

 

F.38. postgres_fdw

F.38. postgres_fdw F.38.1. FDW Options of postgres_fdw F.38.2. Functions F.38.3. Connection Management F.38.4. Transaction Management F.38.5. Remote Query Optimization F.38.6. Remote …

www.postgresql.org

 


fdw 조회 쿼리 

experdb=# \deu
List of user mappings
-[ RECORD 1 ]-------------
Server    | foreign_server
User name | experdba

experdb=# \des
List of foreign servers
-[ RECORD 1 ]--------+---------------
Name                 | foreign_server
Owner                | experdba
Foreign-data wrapper | postgres_fdw

experdb=# \det
List of foreign tables
-[ RECORD 1 ]----------
Schema | experdba
Table  | vacuum_test
Server | foreign_server

 


다음 주제는 이와 유사하게 원격지에 접속하여 연결이 가능한 db_link 를 통해서 뵙겠습니다 !!