1. Ana Sayfa
  2. Microsoft Azure
  3. MS-SQL Server’dan PostgreSQL 10’a Veritabanı Geçişi

MS-SQL Server’dan PostgreSQL 10’a Veritabanı Geçişi

MS-SQL Server’dan PostgreSQL 10’a Veritabanı Geçişi

Bir dönemdir üzerinde çalışmalar yapıyorum ve merak ettiğim bir konu tarafında üzerinde çalışma yapacağım örnek bir veritabanı bulamamak olmuştu. Aklıma Microsoft ’ın örnek veritabanlarından “AdventureWorks” veritabanı geldi. Acaba AdventureWorks2014 veritabanı ’e nasıl geçirebilirim diye düşündüm ve işte bu yazıyı yazdım.

İlk olarak “AdventureWorks2014” veritabanın olduğu bir SQL Server’a ihtiyacınız var. İkinci olarak ise PostgreSQL 10 versiyonun kurulu olduğu bir Windows / Linux bir sisteme ihtiyacınız var. SQL Server olarak kendi bilgisayarımda kurulu, PostgreSQL 10 için ise Azure’da PaaS olarak kullanıyor olacağım. ( Azure PostgreSQL Hakkında Yazımız var : )

Resim-1

Resim1’de görüldüğü gibi platformlarımız hazır. Şimdi hızlı ve kolay bir geçiş işlemi için “https://github.com/isapir/Migrate2Postgres” hazır olan projeyi kullanacağız. Bilgisayarımıza projeyi download ediyoruz.

Resim-2

Projeyi de indirdikten sonra examples > bin içerisinde yer alan “.bat” dosyası ve examples → conf içerisinde yer alan “MsSqlAWT2Postgres.conf” dosyalarını aynı projenin olduğu ana dizine alıyoruz.

Resim-3

Sıra Conf dosyasını editleme işlemine geldi. Conf dosyasını bir metin düzenleyicisi ile açınca karşımıza “AdventureWorks” için hazır bir template geliyor olacak. Biz sadece burada gerekli bilgileri giriyor olacağız. Dosya desenizmi JSON Formatındandır.

{

/**

* Migration Projesi için İsim Tanımlaması

*/

name : “AdventureWorks Migration Project”

,template : “ms-sql-server” /* Uygulamanın Hangi Template Seçeceği – Default . */

,information_schema : {

/**

* This value is required for information_schema.query in the ms-sql-server template

*/

database_name : “AdventureWorks” /* Aktarımını yapacağınız Veritabanın Adı */

}

,source : “mssql” /* Aktarım işleminde kullanacağımız kaynak – Default */

,target : “postgres” /* Aktarım işleminde kullanacağımız hedef – Default */

/**

* Defines the available database connections. Each connection must

* have a connectionString key. Other keys are optional and will be

* added to the Properties object when connecting to the database.

*/

,connections : {

mssql : {

connectionString : “jdbc:sqlserver://SunucuBilgisi:ERİŞİMPORTU

,user : “dbuserName

,password : “dbuserPassword

,databaseName : “AdventureWorks” /*Migrate İşlemi yapılacak DB Name*/

}

,postgres : {

connectionString : “jdbc:postgresql://adventureworks2014-dmc.postgres.database.azure.com:5432/DBNAME?user=dbUserName&password=dbUserPassword

,user : “dbUserName

,password : “dbUserPassword

}

}

/**

* Mappings for schema names from source to target, e.g. HumanResources -> hr

*/

,schema_mapping : {

dbo : “public”,

HumanResources : “hr”

/* Schema Mapping yaparken dikkat etmeniz gereken kücük harf metin içermeli.*/

}

/**

* Mappings for table names from source to target, e.g. HumanResources -> hr

* runs before table_transform

*/

,table_mapping : {

ProductModelProductDescriptionCulture : “ProductModelProdDescCulture”

}

/**

* Mappings for column names in case the source db has keyword names like “group”

* or “primary”, or has a space that we want to remove.

* runs before column_transform

*/

,column_mapping : {

“Database Version” : “db_version”

,group : “group_name”

,primary : “is_primary”

}

,dml : {

/**

* rollback – roll back the current transaction, default

* // TODO: continue – ignore the error

* // TODO: abort – aborts the whole operation

*/

on_error : “rollback”

/**

JDBC type mapping used for DML, e.g. longnvarchar -> longvarchar

see https://docs.oracle.com/javase/8/docs/api/java/sql/JDBCType.html

and https://docs.oracle.com/javase/8/docs/api/constant-values.html#java.sql.Types.ARRAY

*/

,jdbc_type_mapping : {

longnvarchar : “longvarchar” // MSSQL ntext

,nchar : “char”

,nclob : “clob”

,nvarchar : “varchar”

}

/**

* Wrap columns with prefix and suffix in case a column name is a keyword, e.g. [key]

*/

,source_column_quote_prefix : “[”

,source_column_quote_suffix : “]”

}

/**

* Specify whether to transform the table and/or column names. Available transforms are:

* lower_case – transforms MyTableName to mytablename

* upper_case – transforms MyTableName to MYTABLENAME

* camel_to_snake_case – transforms MyTableName to my_table_name

*/

,table_transform : “camel_to_snake_case”

,column_transform : “camel_to_snake_case”

}

Yukarıdaki açıklamalara göre Config file desenimizi tamamladıktan sonra PostgreSQL sunucumuzda “AdventureWorks” isimli bir DB oluşturuyoruz. PostgreSQL’de DB oluşturma işlemini de tamamladıktan sonra aşağıdaki şekilde migrate.bat dosyasını çalıştırıyoruz.

Resim-4

Kırmızı ile işaretlediğim alanda belirtildiği gibi yazılan config file dosyasını kullanarak belirtilen path de bir sql dosyası oluşturmuştur.

Resim-5

Oluşan dosyası bir text editörü ile açıp, postgreSQL’de çalıştırmanız gerekiyor. Bu işlem ile kaynak veritabanın ddl yapısını postgreSQL tarafında oluşturmuş oluyorsunuz. DDL Scripti çalıştırdıktan sonra hatasız bir şekilde PostgreSQL tarafında “ AdventureWorks” veritabanı oluşturulduğunu görebilirsiniz.

Resim-6

Yukarıdaki resimde gördüğünüz gibi işlemimiz başarılı Microsoft Örnek veritabanlarından “ AdventureWorks” DDL obje yapısını benzer bir şekiled PostgreSQL 10 da oluşturmuş olduk. Tek yapmamız gereken SQL Server’da var olan DML içerikleri de aktarmak bunun içinde aşağıdaki gibi migrate.bat dosyasını çalıştırmamız yeterli olacaktır.

Resim-7

Yukarıdaki resimde gördüğünüz gibi DML işlemlerimiz başarılı bir şekilde başlamış ve devam ediyor. Aktarımları 4 Thread olarak yapıyor ve DDL aktarımında da kullandığı config file dan gerekli tanımlamarı alarak işlem gerçekleştiriyor.

Benzer bir aktarım işlemini SSIS ile de gerçekleştirilebilir, farklı third party uygulamalar ile de yapılabilir. Fakat PostgreSQL’in open source bir ürün oluyor olmasından ötürü github üzerinde yer alan Open Source bir yapı ile hızlı ve basitce nasıl aktarabileceğimizi göstermek istedim. PostgreSQL’e yeni başlayacak olanlar / pgsql çalışmak için dummy data arayanlar için güzel bir kaynak olacaktır.

Farklı veritabanlarınlarını da benzer şekilde migrate edebilirsiniz, fakat sql server’da tanımlı olan function, stored procedure, udf,udt,clr gibi objelerin geçişlerinini programlama bilginiz dahilinde tekrar yazmanız gerekecektir. ( https://wiki.postgresql.org/wiki/Microsoft_SQL_Server_to_PostgreSQL_Migration_by_Ian_Harding )

Aktarımlar tamamlandıktan sonra kontrol ettiğinizde SQL Server’da var olan verilerinizinde PostgreSQL’e aktarılmış olacağını göreceksiniz. Özellikle aşağıdaki sorguda version bilgisini de ekledim 🙂

Resim-8

Bu konuyla ilgili sorularınızı https://forum.mshowto.org linkini kullanarak ulaşacağınız forum sayfamızda sorabilirsiniz.

Referanslar

www.mshowto.org

TAGs:, , migrate, Postgres, PostGreSQL, , SQL Server, ,

Yorum Yap

Yazar Hakkında

Milenyumdan beri ilginç bir merak duygusu ile başlayan bilgisayar ve teknoloji dünyası merakı sayesinde eğitim yaşantımı doğup büyüdüğüm Düzce'de geçirdim. Sonrasında Düzce'nin kendimi geliştirmek adına yeterli imkanlara sahip olmadığından İstanbul'a gelip Bilge Adam Eğitim Kurumlarından Yazılım ve Veritabanı eğitimi aldım. Eğitimimi tamamlarken çeşitli Windows ve Web uygulamaları geliştirdim. Sırası ile Sentez Yazılım, Nebim Yazılım, Ciceksepeti, Doğan Holding, Kariyer.Net, TurkNet gibi firmalarında Yönetici / Müdür pozisyonlarında farklı ünvanlarda ( Yazılım Geliştirici / Raporlama ve Veritabanı Yöneticisi gibi) görev aldım. Şimdilerde ise DMC Bilgi Teknolojileri firmasının Kurucu Ortaklığını ve Veritabanı Danışmalığı Hizmeti vermekteyim.

Yorum Yap