Mssql veritabanından PostgreSql veritabanına geçiş notlarım
Yıllar önce MSSQL veritabanından PSQL veritabanına geçiş yaparken aldığım notları sizinle paylaşmak istedim . Umarım faydalı olur
Başlamadan önce bilinmesi gerekenler :
- Programınızı psql çevirmeden önce mutlaka çalışmayan sql sorgularını size mail atacak bir yapı kurun ve çalışmayan sql olduğunda ekrana hata verdirin.
- Programınız bir kopyasını sade psql de çalışacak şekilde ayrı olarak kodlarını değiştirin hem sql hemde psql çalışan ayrı dosyalarınız bir kenarda dursun.
- Tablo isimlerini küçük harfle oluşturun ulaşmakta sıkıntı çekebilirsiniz.
- Sıkça sorular sorulara göz atmakta fayda var(tarihi eski ama çoğu şey aynıdır)
https://www.postgresql.org/message-id/attachment/17832/FAQ_turkish.html#2.3
Veritabanı aktarma araçları:
Malesef tam çalışan bir uygulama yok. Ama şöyle bir yol izlenebilir. Öncelikle full convert programı(https://www.spectralcore.com/fullconvert) ile tüm verileri aktarın daha sonra program trial sürüm olduğu için verileri tekrar her tablodan silin navicat veya başka bir programla veri aktarma yapın(seçeneklerden tablo oluşturmayı işaretlemeyin hata alırsınız).
SQL Sorgularını Dönüştürme notlarım :
- string birleştirme + yerine || kullanın
- integer bir alana string olarak yani boş string ‘’ ekleyemezsiniz. Örn: Şube alanı int.
INSERT INTO kayit ( okulno, kod, sube)
VALUES (‘150301009′,’03017506′,”)
- convert olayları CONVERT(int,alan_adi) yerine alan_adi::int
- sorguları ve fonk çevirmek için online araç http://www.sqlines.com/online ( %100 çevirmez)
- sql’de [ ] karakterleri psql de yok kullanmayın.
- tablo ve alan isimlerinde büyük küçük duyarlılığı kullanıma göre değişiyor.
Örneğin : Anket tablosuna aşağıdaki kodla erişmezsiniz. SELECT * from Anket LIMIT 1 ->Sonuç: tablo hatası
Eğer tablonuzu tümünü küçük harfle yazmışsanız tabloya ister büyük harfle yazılsın ister küçük harfle her türlü erişilebilmektedir. Tablo isimleri büyükse tek erişim yöntemi çift tırnak içerisinde yazmak gereklidir. Örn: SELECT * from “Anket” LIMIT 1 ->Sonuç: tablo verileri çekme başarılı
- Execute yerine dönüş türü tablo ise “SELECT * FROM fonksiyon_adi” gibi olmalıdır.
- ::char ile yapılan çevirmeler tek karakter olarak geliyor dikkat onun yerine ::varchar kullanılmalı
Özetle Büyük harfli tablo ve alan isimleri sıkıntı çıkartıyor hepsi küçük olması sıkıntısız çalıştırıyor.
- GETDATE() yerine NOW(). Not:Bunun için kendiniz GETDATE fonksiyonu oluşturabilirsiniz dönüştürülmesine gerek kalmaz.
- LEN fonksiyonu LENGTH Not:bBunun için kendiniz LEN fonksiyonu oluşturabilirsiniz dönüştürülmesine gerek kalmaz.
- ISNULL yerine COALESCE fonksiyonu kullanılmalı
- TOP yerine LIMIT sorgunun sonunda kullanılması gerekiyor.
- Datediff fonksiyonu bulunmuyor kendiniz oluşturun
- CONVERT yerine CAST fonksiyonu kullanabilir
örn: CONVERT(Date,”10.12.2205”) yerine CAST(“10.12.2005”) AS DATE)
Yararlanılan kaynaklar
genel bilgiler
http://www.postgresqltutorial.com
Func procuder kullanımı plsql dili:
PL/SQL Tutorial
Son yorumlar