Ana içeriğe geç

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

İlk olarak “AdventureWorks2014” veritabanın olduğu bir SQL Server’a ihtiyacınız var. İkinci olarak ise PostgreSQL 10/11/12/13 versiyonun kurulu olduğu bir Windows / Linux bir sisteme ihtiyacınız var.

örnekdb

yukarıdaki resimde görüldüğü gibi aktarımını yapacağımız veritabanı hazır durumda. Ş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.

Dosya

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

aktarım sonucu Dosya

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.

Conf dosyasının içindeki düzeltilecek yerler.

 {
    /**
     * Migration project name 
     */
     name : "AdventureWorks"  //**projenin adı**
    /**
     * Template that will be used for DDL and DML settings. The settings from this file
     * will be merged with the template's settings.  If a template is not used
     * then all of the settings must be in this config file.
     */
    ,template : "ms-sql-server"
    ,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ı**
    }
    /**
     * The names of the connections that will be used as source (copy from) and target (copy to).
     * The keys of source and target must appear in the connections segment of the config.
     */
    ,source : "mssql"
    ,target : "postgres"
    /**
     * 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://localhost:1433"
             ,user             : "%connections.mssql.user%" //**veritabanının kullanıcı adı**
             ,password         : "%connections.mssql.password%" //**veritabanı kullanıcı şifresi**
             ,databaseName     : "AdventureWorks" //**veritabanı adı**
        }
        ,postgres : {
              connectionString : "jdbc:postgresql://localhost:5432/adventure_works"
             ,user             : "postgres"//**veritabanının kullanıcı adı**
             ,password         : "" //**veritabanı kullanıcı şifresi**
        }
    }
    /**
     * Mappings for schema names from source to target, e.g. HumanResources -> hr
     */
    ,schema_mapping : {
         dbo            : "public"
        ,HumanResources : "hr"
    }
    /**
     * 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"
    }
    /**
     * 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 veritabanı oluşturuyoruz.

ve devamında dosyamızı cmd de açıyoruz

migrate.bat ddl
ve kodu giriyoruz migrate dosyamızı çalıştırıyoruz

çalışan kod

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

oluşan dosya

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.

son 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.

migrate.bat dml
Aktarımlar tamamlandıktan sonra kontrol ettiğinizde SQL Server’da var olan verilerinizinde PostgreSQL’e aktarılmış olacağını göreceksiniz.