Press ESC to close

SQL Server & PostgreSQL Foreign Data Wrapper (FDW) Ubuntu Server FWD Installation

Bir PostgreSQL Servardan SQL Serverdaki verilere erişmek için FDW kullanabiliriz, burada bu extension nasıl kurulur, ve SQL serverdaki bir tablo, PostgreSQL içerisinden nasıl sorgulanır, bunları örnekleyeceğiz;

Öncelikle Kurulumunu gerçekleştirelim;

# sudo apt-get update
# sudo apt-get install libsybdb5 freetds-dev freetds-common
# sudo apt install postgresql-server-dev-14
# sudo apt install make
# sudo apt install gcc
# sudo apt-get install gnupg

TDS fwd kurulumu için https://github.com/tds-fdw/tds_fdw/blob/master/InstallUbuntu.md

# export TDS_FDW_VERSION="2.0.3"
# sudo apt-get install wget
# wget https://github.com/tds-fdw/tds_fdw/archive/v${TDS_FDW_VERSION}.tar.gz
# tar -xvzf v${TDS_FDW_VERSION}.tar.gz
# cd tds_fdw-${TDS_FDW_VERSION}/
# find / -type f -name "pg_config"

	# /usr/bin/pg_config
	# /usr/lib/postgresql/14/bin/pg_config

# make USE_PGXS=1 
--Birden fazla Cluster varsa
--# make USE_PGXS=1 PG_CONFIG=/usr/lib/postgresql/14/bin/pg_config
# sudo make USE_PGXS=1 install

tds_fdw extension create komutunu çalıştıralım;

postgres=# CREATE EXTENSION tds_fdw;
CREATE EXTENSION

Şimdi Mssql Server bağlantısı için FDW de ne yapmalıyız;

İlk olarak bir server create ediyoruz;

postgres=# CREATE SERVER mssql_server FOREIGN DATA WRAPPER tds_fdw OPTIONS(servername '192.168.5.134 ',database 'Test',port '1433');
CREATE SERVER

Server içerisine bir Mssql user, database ile postgres database mapping işlemini yapıyoruz

postgres=# CREATE USER MAPPING FOR postgres SERVER mssql_server OPTIONS (username  'sa', password 'Welcome123');
CREATE USER MAPPING

Şimdi ise mssql ortamında olan bir tabloyu alarak postgreSQL tarafında bağlama sürecini yapacağız;

SQL Serverda ki tablomuzu kontrol edelim;

PostgreSQL de Foreign Tablomuzu oluşturalım;

CREATE FOREIGN TABLE test(
	id int,
	isim nchar(10),
	soyisim nchar(10) ,
	tel bigint,
	adres text 
) 
SERVER mssql_server 
OPTIONS (query 'SELECT * FROM dbo.test');

Postgresteki Foreign Tabloya sorgu atalım;

postgres=# select * from test;
NOTICE:  tds_fdw: Query executed correctly
NOTICE:  tds_fdw: Getting results
 id |    isim    |  soyisim   |    tel     | adres
----+------------+------------+------------+--------
  1 | Faruk      | Cevik      | 5051112233 | Ankara
(1 row)

Planına bakalım;

postgres=# explain
postgres-# select * from test;
NOTICE:  tds_fdw: Query executed correctly
NOTICE:  tds_fdw: Getting results
                          QUERY PLAN
--------------------------------------------------------------
 Foreign Scan on test  (cost=200.00..200.01 rows=1 width=100)
(1 row)

postgres=# explain analyse
postgres-# select * from test;
NOTICE:  tds_fdw: Query executed correctly
NOTICE:  tds_fdw: Getting results
                                               QUERY PLAN
--------------------------------------------------------------------------------------------------------
 Foreign Scan on test  (cost=200.00..200.01 rows=1 width=100) (actual time=0.732..0.734 rows=1 loops=1)
 Planning Time: 7.395 ms
 Execution Time: 6.446 ms
(3 rows)

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir