SQL Server Üzerinden PostgreSQL e Data Migration

SQL Server üzerinde tuttuğumuz veritabanı içerisinde yer alan birkaç tabloyu PostgreSQL e taşımayı istiyoruz. Evet ama nasıl yapabiliriz sorularını sorduğunuzu duyuyorum. SQL Server Integrtion Services üzeirnde bir ETL paketi oluşturup bunu yapmaya çalışacağız.

Bunun için PostgreSQL in SSIS için ODBC driver ını indirp kurulumunu yapmamız gerekmektedir. Aşağıda ki linki kullanarak gerekli sürüm indirme işlemini sağlayabilirsiniz.

https://www.postgresql.org/ftp/odbc/versions/msi/

Genel tanıtım içinde,

https://docs.microsoft.com/en-us/sql/integration-services/import-export-data/connect-to-a-postgresql-data-source-sql-server-import-and-export-wizard?view=sql-server-2017  linke gidebilirsiniz.

Bu kurulumların ardından şimdi ise sql server tarafında yer alan sunucumuzda bir demo db oluşturup içerisine birkaç kayıt atıp daha sonra bu kayıtların PostgreSQL e taşınmasını adım adım işleyelim.

Şimdi SQL Server üzerinde bulunan SQLTurkiye veritabanında iki adet demo tablosu olusturup içerisine data basıyoruz.

Tabloları olusturuyoruz…

USE SQLTurkiye
GO
CREATE TABLE dbo.Personel_demo1 (
ID INT IDENTITY (1, 1)
   ,CONSTRAINT PK_demosqltr1_ID PRIMARY KEY (ID)
   ,FNAME NVARCHAR(150)
   ,SNAME NVARCHAR(150)
   ,INUMBER CHAR(11)
)
GO

USE SQLTurkiye
GO
CREATE TABLE dbo.Customer_demo1 (
ID INT IDENTITY (1, 1)
   ,CONSTRAINT PK_Customer_demo1_ID PRIMARY KEY (ID)
   ,FIRM_NAME NVARCHAR(200)
   ,FIRM_ID INT
   ,FIRM_ADDRESS NVARCHAR(MAX)
)

Demo tablolara data basıyoruz ….

INSERT INTO Personel_demo1 (FNAME, SNAME, INUMBER)
VALUES (N'Yusuf', N'Kahveci', '1111111111'), (N'Yasar', N'Kahveci', '2222222222'), (N'Max', N'Well', '33333333333')

INSERT INTO Customer_demo1 (FIRM_NAME, FIRM_ID, FIRM_ADDRESS)
VALUES (N'SQL Turkiye A.Ş.', 1, N'Beşiktaş / İstanbul'), (N'SQL Turkiye A.Ş.', 1, N'Beşiktaş / İstanbul'), (N'Amazon.', 1, N'Beşiktaş / İstanbul')

Tablolarımızı kontrol edelim ,

SELECT
*
FROM Personel_demo1
GO
SELECT
*
FROM Customer_demo1
GO

PostgreSQL üzerine dataları taşıyacağımız tablomuzu da oluşturalım. (sqltr adında veritabanı içerisinde Personel tablosuna veriler aktarılacak.)

CREATE TABLE public.Personel
(
  ID SERIAL,
  FNAME VARCHAR(200),
  SNAME varchar(200),
  INUMBER CHAR(11)
)

Şimdi ise SSIS paketimizi oluşturalım. Amacımız ilk etapta SQL Server üzerinde yer alan  Personel_demo1 isimli tablomuzu PostgreSQL üzerine taşımak.

New Project diyoruz ve aşağıda ki Proje oluşturma ekranında gerekli yerleri doldurup projemizi başlatıyoruz.

Name bölümüne Proje ismini giriyoruz (SQLServerToPostgreSQL)  ve Integration services Project olarak seçip OK butonuna basıyoruz.

Paket oluşturacağımız ekran yukarıdaki gibi karşımıza gelmektedir. Sol tarafta kullanacağımız Component ler yer almaktadır.

Data aktarma işlemi gerçekleştireceğimizden Data Flow Task Componentini kullanacağız ve bu yüzden sol taraftan ana ekrana sürükleyerek bırakıyoruz Componentimizi. Çift tıklasyarak Componentimizin içerisine giriş yapıyoruz. Aşağıda ki  ekranda Componentimizin içine girdiğimizi görmektesiniz.

Daha sonra aktarım işlemini yapacağımız Componentlerimizi Data Flow Task ın içerisine sürüklüyoruz ve gerekli ayarlamaları gerçekleştiriyoruz. Source olarak SQL Server ı belirlediğimiz için OLE DB Source Componentini sürüklüyoruz ve aşağıda ki gibi işlem sahasına  bırakıyoruz.

OLE DB Source component inin ayarlarını gerçekleştirmek için içerisine giriyoruz ve OLE DB Source Editor karşımıza çıkmakta. Bu ekran da OLE DB connection manager bölümünde bağlantı yapılacak connection bilgileri giriliyor. New butonuna basarak yeni bağlantı bilgilerimizi gireceğiz.

Server Name kısmına bağlantı kurulacak server bilgisi giriliyor.Log on to the server bölümünde Connection tipini secmelisiniz. Windos Auth. mı yoksa SQL Server Auth.  olarak mı bağlantı kuracağınız belirtip bilgileri ona göre girmeniz gerekmektedir. Bizim örneğimizde SQL Aut. ı kullanacağız.

Connect to a database bölümünde ise hangi veritabanında işlem yapılacak ise onu seçiyoruz.

Test Connection butonuna basaraka bağlantınızın doğruluğunu kontrol edebilirsiniz. Ben kontrol etmek için bastığımda aşağıda ki gibi sağlıklı Connection olduğunu görmekteyim

Connection işlemlerini tamamladıktan sonra Data Access Mode bölümünde data çekim işlem şeklini belirtmeniz ve ona göre işlem yapmanız gerekmektedir.

Ben tüm tabloyu değilde sadece belili kolonları almak istediğim için query yazdım ve bu yüzden SQL command mode unu seçerek gelen text ekranına query mi  yazdım.

SELECT
    FNAME
   ,SNAME
   ,INUMBER
FROM Personel_demo1

Daha sonra query min syntax hatası olup olmadığını görmek için sağ tarafta yer alan Parse Query e basarak yazdığım query kontrol edilmesini sağladım ve herhangi bir problem olmadığını gördüm.

Source Editor ün solunda Columns bölümüne tıkladığımızda query de gelen kolonları burada görebilirsiniz ve tekrar buradada bir ön kontrol sağlamış olursunuz. OK diyerek Source işlemlerini tamamlıyoruz.

Şimdi ise sıra Destination da. Destinitation bölümünde hedef PostgreSQL olduğundan ODBC Destination Componentini kullanıyoruz. Componenti sürükleyip çalışma alanına bırakıyoruz aşağıda ki ekranda da gördüğünüz üzere.

Source Componentinin ayarlarını gerçekleştirdiğimiz gibi Destination Componentimiz olan ODBC Destination Componentinin de üzerine iki kere tıklayarak ayar ekranını açıyoruz.

İlk etapta Connection manager bölümünden yeni bir Connection tamamlamamız gerekiyor. New butonuna basıyoruz ve aşağıda  Configure ODBC Connection Manager ekranı karşımıza geliyor.

Connection Manager ekranında bağlantı bilgilerini gireceğiz.

Data Source bölümünde Use connection string i seçiyoruz ve Build… butonuna basıyoruz.

SELECT Data Source ekranı karşımıza gelmekte ve buradan Machine Data Source tabına geçiyoruz.

Machine Data Source tabına geçiş sonrası yeni bir Data Source tanımlamak için New butonuna basıyoruz.User Data Source u seçip Next butonuna basıyoruz.

Driver ı seçeceğimiz ekran karşımıza gelmekte. Default ta burada PostgreSQL Driver ları bulunmamakta ama makalenin en başında da anlattığım gibi verdiğim likteki driver ı indirip kurduğunuzda bu driver bilgileri buraya gelmektedir. PostgreSQL driver ını seçip NEST butonuna basıyoruz.

NEXT  dedikten sonra psqlODBC Setup ekranında Connection bilgilerini giriyoruz.

Girdiğimiz bilgileri Test butonuna basarak teyid edebiliriz ki ben ettiğimde bilgilerin doğru olduğunu aşağıda ki ekranda görmekteyim.

Connection kontrolünden sonra Save butonuna basarak Connection ımızı kontrol ediyoruz.

Connection ekranı önümüze gelmekte ve son kez Check edip OK butonuna basıyoruz.

Connection Manager ekranına bilgilerimiz aşağıda gördüğünüz üzere gelmektedir.Connection  String bölümü dolmakta ve Login bilgileri eklenmiş durumda.

 

Connection String “

Dsn=PostgreSQL;database=sqltr;server=pgsql_sqltr7;port=5432;uid=dba;sslmode=disable;readonly=0;protocol=7.4;fakeoidindex=0;showoidcolumn=0;rowversioning=0;showsystemtables=0;fetch=100;unknownsizes=0;maxvarcharsize=255;maxlongvarcharsize=8190;debug=0;commlog=0;usedeclarefetch=0;textaslongvarchar=1;unknownsaslongvarchar=0;boolsaschar=1;parse=0;lfconversion=1;updatablecursors=1;trueisminus1=0;bi=0;byteaaslongvarbinary=1;useserversideprepare=1;lowercaseidentifier=0;xaopt=1

OK butonuna basıyoruz ve Configure ODBC Connection Manager ekranı geliyor burayı da Check ettikten sonraOK butonuna basıyoruz.

Connection Managers bölümü bittikten sonra şimdi sıra Data access mode bölümüne geldi. Orada direkt Table Name- Batch i seçerek sqltr db si içerisinde oluşturduğum Personel tablosunu seçeceğim.

Tablomu seçiyorum. batch Size ımıda burada belirleyebiliyorum. Bu değeri sisteminize ve yoğunluğuna göre ayarlayabilirsiniz.

gerekli access mode u sağladıktan sonra sol tarafta ki Mapping sekmesine tıklıyoruz ve Source – Destination ların kolonlarının mapping lerini kontrol ediyoruz. Gerekli kontroller sağlandıktan sonra OK diyoruz.

Artık Source ve Destination süreçlerini tmamladık ve aktarıma başlayabiliriz.

Component lerin üzerine gelip rename diyerek isimlerini değiştirip daha anlaşılabilir yapılır. Bu şekilde ETL paketinizi okumanız daha hızlı ve kolay olabilir. Daha fazla component kullandığınız da bu karmaşanın önüne geçmiş olursunz. Ben aşağıda ki gibi Source ve Destination Component lerine isimlendirdim.

Data Flow Task Componentini de isimlendirerek hoş bir görüntü sağladım paket içerisine.

Start tuşuna basarak pakeri EXEC ediyoruz.

 

Data Flow Task ın içine girdiğimizde source ve destination componentlerimiz içerisinde ki aktarım değerlerini ve sağlıklılığını görebiliyoruz ki bizim örneğimizde aşağıda ki ekran da da görüldüğü üzere 3 adet kayıdımız da sağlıklı bir şekilde aktarılmıştır.

PostgreSQL tarafında tablomuzu kontrol ettiğimizde dataların teyidini yapmış oluyoruz.

 

Kolay Gelsin

 

Leave a Reply

Your email address will not be published. Required fields are marked *