Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Ubah aplikasi Python dan Perl untuk mendukung migrasi database dari Microsoft SQL Server ke Amazon Aurora PostgreSQL Edisi yang kompatibel
Dwarika Patra dan Deepesh Jayaprakash, Amazon Web Services
Ringkasan
Pola ini menjelaskan perubahan pada repositori aplikasi yang mungkin diperlukan saat Anda memigrasikan database dari Microsoft SQL Server ke Amazon Aurora PostgreSQL Compatible Edition. Pola mengasumsikan bahwa aplikasi ini berbasis Python atau berbasis Perl, dan memberikan instruksi terpisah untuk bahasa scripting ini.
Migrasi database SQL Server ke Aurora PostgreSQL kompatibel melibatkan konversi skema, konversi objek database, migrasi data, dan pemuatan data. Karena perbedaan antara PostgreSQL dan SQL Server (berkaitan dengan tipe data, objek koneksi, sintaks, dan logika), tugas migrasi yang paling sulit melibatkan membuat perubahan yang diperlukan pada basis kode sehingga bekerja dengan benar dengan PostgreSQL.
Untuk aplikasi berbasis Python, objek koneksi dan kelas tersebar di seluruh sistem. Juga, basis kode Python mungkin menggunakan beberapa pustaka untuk terhubung ke database. Jika antarmuka koneksi database berubah, objek yang menjalankan kueri inline aplikasi juga memerlukan perubahan.
Untuk aplikasi berbasis Perl, perubahan melibatkan objek koneksi, driver koneksi database, pernyataan SQL inline statis dan dinamis, dan bagaimana aplikasi menangani kueri dan set hasil DHTML dinamis yang kompleks.
Saat memigrasikan aplikasi, Anda juga dapat mempertimbangkan kemungkinan penyempurnaan di AWS, seperti mengganti server FTP dengan akses Amazon Simple Storage Service (Amazon S3).
Proses migrasi aplikasi melibatkan tantangan berikut:
Objek koneksi. Jika objek koneksi tersebar dalam kode dengan beberapa pustaka dan panggilan fungsi, Anda mungkin harus menemukan cara umum untuk mengubahnya untuk mendukung PostgreSQL.
Penanganan kesalahan atau pengecualian selama pengambilan rekaman atau pembaruan. Jika Anda memiliki operasi membuat, membaca, memperbarui, dan menghapus (CRUD) bersyarat pada database yang mengembalikan variabel, kumpulan hasil, atau bingkai data, kesalahan atau pengecualian apa pun dapat mengakibatkan kesalahan aplikasi dengan efek cascading. Ini harus ditangani dengan hati-hati dengan validasi yang tepat dan menyimpan poin. Salah satu titik penyimpanan tersebut adalah memanggil kueri SQL sebaris besar atau objek database di dalam blok.
BEGIN...EXCEPTION...ENDMengontrol transaksi dan validasinya. Ini termasuk komit dan rollback manual dan otomatis. Driver PostgreSQL untuk Perl mengharuskan Anda untuk selalu secara eksplisit mengatur atribut auto-commit.
Menangani query SQL dinamis. Ini membutuhkan pemahaman yang kuat tentang logika kueri dan pengujian berulang untuk memastikan bahwa kueri berfungsi seperti yang diharapkan.
Kinerja. Anda harus memastikan bahwa perubahan kode tidak mengakibatkan penurunan kinerja aplikasi.
Pola ini menjelaskan proses konversi secara rinci.
Prasyarat dan batasan
Prasyarat
Pengetahuan tentang sintaks Python dan Perl.
Keterampilan dasar dalam SQL Server dan PostgreSQL.
Memahami arsitektur aplikasi Anda yang ada.
Akses ke kode aplikasi Anda, database SQL Server, dan database PostgreSQL.
Akses ke lingkungan pengembangan Windows atau Linux (atau Unix lainnya) dengan kredensil untuk mengembangkan, menguji, dan memvalidasi perubahan aplikasi.
Untuk aplikasi berbasis Python, pustaka Python standar yang mungkin diperlukan aplikasi Anda, seperti Pandas untuk menangani frame data, dan psycopg2 atau untuk koneksi database. SQLAlchemy
Untuk aplikasi berbasis Perl, diperlukan paket Perl dengan pustaka atau modul dependen. Modul Comprehensive Perl Archive Network (CPAN) dapat mendukung sebagian besar persyaratan aplikasi.
Semua perpustakaan atau modul khusus tergantung yang diperlukan.
Kredensi database untuk akses baca ke SQL Server dan read/write akses ke Aurora.
PostgreSQL untuk memvalidasi dan men-debug perubahan aplikasi dengan layanan dan pengguna.
Akses ke alat pengembangan selama migrasi aplikasi seperti Visual Studio Code, Sublime Text, atau pgAdmin.
Batasan
Beberapa versi Python atau Perl, modul, pustaka, dan paket tidak kompatibel dengan lingkungan cloud.
Beberapa pustaka dan kerangka kerja pihak ketiga yang digunakan untuk SQL Server tidak dapat diganti untuk mendukung migrasi PostgreSQL.
Variasi kinerja mungkin memerlukan perubahan pada aplikasi Anda, untuk kueri Transact-SQL (T-SQL) sebaris, fungsi database, dan prosedur tersimpan.
PostgreSQL mendukung nama huruf kecil untuk nama tabel, nama kolom, dan objek database lainnya.
Beberapa tipe data, seperti kolom UUID, disimpan dalam huruf kecil saja. Aplikasi Python dan Perl harus menangani perbedaan kasus tersebut.
Perbedaan pengkodean karakter harus ditangani dengan tipe data yang benar untuk kolom teks yang sesuai dalam database PostgreSQL.
Versi produk
Python 3.6 atau yang lebih baru (gunakan versi yang mendukung sistem operasi Anda)
Perl 5.8.3 atau yang lebih baru (gunakan versi yang mendukung sistem operasi Anda)
Aurora PostgreSQL Compatible Edition 4.2 atau yang lebih baru (lihat detail)
Arsitektur
Tumpukan teknologi sumber
Bahasa scripting (pemrograman aplikasi): Python 2.7 atau yang lebih baru, atau Perl 5.8
Database: Microsoft SQL Server versi 13
Sistem operasi: Red Hat Enterprise Linux (RHEL) 7
Tumpukan teknologi target
Bahasa scripting (pemrograman aplikasi): Python 3.6 atau yang lebih baru, atau Perl 5.8 atau yang lebih baru
Database: Aurora PostgreSQL kompatibel 4.2
Sistem operasi: RHEL 7
Arsitektur migrasi

Alat
Layanan dan alat AWS
Aurora PostgreSQL — Compatible Edition adalah mesin basis data relasional relasional yang dikelola sepenuhnya, kompatibel dengan PostgreSQL, dan sesuai dengan asam yang menggabungkan kecepatan dan keandalan database komersial kelas atas dengan efektivitas biaya database sumber terbuka. Aurora PostgreSQL adalah pengganti drop-in untuk PostgreSQL dan membuatnya lebih mudah dan lebih hemat biaya untuk mengatur, mengoperasikan, dan menskalakan penerapan PostgreSQL Anda yang baru dan yang sudah ada.
AWS Command Line Interface (AWS CLI) adalah alat sumber terbuka yang memungkinkan Anda berinteraksi dengan layanan AWS dengan menggunakan perintah di shell baris perintah Anda.
Alat-alat lainnya
Epik
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Ikuti langkah-langkah konversi kode ini untuk memigrasikan aplikasi Anda ke PostgreSQL. |
Epos berikut memberikan instruksi terperinci untuk beberapa tugas konversi ini untuk aplikasi Python dan Perl. | Pengembang aplikasi |
Gunakan daftar periksa untuk setiap langkah migrasi. | Tambahkan yang berikut ini ke daftar periksa Anda untuk setiap langkah migrasi aplikasi, termasuk langkah terakhir:
| Pengembang aplikasi |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Analisis basis kode Python Anda yang ada. | Analisis Anda harus mencakup hal-hal berikut untuk memfasilitasi proses migrasi aplikasi:
| Pengembang aplikasi |
Konversikan koneksi database Anda untuk mendukung PostgreSQL. | Sebagian besar aplikasi Python menggunakan pustaka pyodbc untuk terhubung dengan database SQL Server sebagai berikut.
Mengkonversi koneksi database untuk mendukung PostgreSQL sebagai berikut.
| Pengembang aplikasi |
Ubah kueri SQL sebaris ke PostgreSQL. | Konversikan kueri SQL sebaris Anda ke format yang kompatibel dengan PostgreSQL. Misalnya, query SQL Server berikut mengambil string dari tabel.
Setelah konversi, kueri SQL sebaris yang kompatibel dengan PostgreSQL terlihat seperti berikut.
| Pengembang aplikasi |
Menangani query SQL dinamis. | SQL dinamis dapat hadir dalam satu skrip atau dalam beberapa skrip Python. Contoh sebelumnya menunjukkan bagaimana menggunakan fungsi penggantian string Python untuk menyisipkan variabel untuk membangun query SQL dinamis. Pendekatan alternatif adalah menambahkan string kueri dengan variabel di mana pun berlaku. Dalam contoh berikut, string kueri dibangun dengan cepat berdasarkan nilai yang dikembalikan oleh fungsi.
Jenis kueri dinamis ini sangat umum selama migrasi aplikasi. Ikuti langkah-langkah berikut untuk menangani kueri dinamis:
| Pengembang aplikasi |
Menangani set hasil, variabel, dan frame data. | Untuk Microsoft SQL Server, Anda menggunakan metode Python pyodbc (Microsoft SQL Server)
Di Aurora, untuk melakukan tugas serupa seperti menghubungkan ke PostgreSQL dan mengambil set hasil, Anda dapat menggunakan psycopg2 atau. SQLAlchemy Pustaka Python ini menyediakan modul koneksi dan objek kursor untuk melintasi catatan database PostgreSQL, seperti yang ditunjukkan pada contoh berikut. psycopg2 (Kompatibel dengan Aurora PostgreSQL)
SQLAlchemy (Kompatibel dengan Aurora PostgreSQL)
| Pengembang aplikasi |
Uji aplikasi Anda selama dan setelah migrasi. | Menguji aplikasi Python yang dimigrasi adalah proses yang berkelanjutan. Karena migrasi mencakup perubahan objek koneksi (psycopg2 atau SQLAlchemy), penanganan kesalahan, fitur baru (bingkai data), perubahan SQL sebaris, fungsi salinan massal (
| Pengembang aplikasi |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Analisis basis kode Perl Anda yang ada. | Analisis Anda harus mencakup hal-hal berikut untuk memfasilitasi proses migrasi aplikasi. Anda harus mengidentifikasi:
| Pengembang aplikasi |
Mengkonversi koneksi dari aplikasi Perl dan modul DBI untuk mendukung PostgreSQL. | Aplikasi berbasis Perl umumnya menggunakan modul Perl DBI, yang merupakan modul akses database standar untuk bahasa pemrograman Perl. Anda dapat menggunakan modul DBI yang sama dengan driver yang berbeda untuk SQL Server dan PostgreSQL. Untuk informasi selengkapnya tentang modul Perl yang diperlukan, instalasi, dan instruksi lainnya, lihat dokumentasi DBD
| Pengembang aplikasi |
Ubah kueri SQL Inline ke PostgreSQL. | Aplikasi Anda mungkin memiliki kueri SQL sebaris dengan Di SQL Server:
Untuk PostgreSQL, konversi ke:
| Pengembang aplikasi |
Menangani query SQL dinamis dan variabel Perl. | Query SQL dinamis adalah pernyataan SQL yang dibangun pada runtime aplikasi. Kueri ini dibangun secara dinamis saat aplikasi berjalan, tergantung pada kondisi tertentu, sehingga teks lengkap kueri tidak diketahui sampai runtime. Contohnya adalah aplikasi analitik keuangan yang menganalisis 10 saham teratas setiap hari, dan saham ini berubah setiap hari. Tabel SQL dibuat berdasarkan performa terbaik, dan nilainya tidak diketahui sampai runtime. Katakanlah kueri SQL sebaris untuk contoh ini diteruskan ke fungsi pembungkus untuk mendapatkan hasil yang ditetapkan dalam variabel, dan kemudian variabel menggunakan kondisi untuk menentukan apakah tabel itu ada:
Berikut adalah contoh penanganan variabel, diikuti oleh SQL Server dan PostgreSQL query untuk kasus penggunaan ini.
Server SQL:
PostgreSQL:
Contoh berikut menggunakan variabel Perl dalam SQL inline, yang menjalankan Server SQL:
PostgreSQL:
| Pengembang aplikasi |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Mengkonversi konstruksi SQL Server tambahan ke PostgreSQL. | Perubahan berikut berlaku untuk semua aplikasi, terlepas dari bahasa pemrograman.
| Pengembang aplikasi |
| Tugas | Deskripsi | Keterampilan yang dibutuhkan |
|---|---|---|
Manfaatkan layanan AWS untuk melakukan peningkatan kinerja. | Saat bermigrasi ke AWS Cloud, Anda dapat menyempurnakan desain aplikasi dan database Anda untuk memanfaatkan layanan AWS. Misalnya, jika kueri dari aplikasi Python Anda, yang terhubung ke server database yang kompatibel dengan Aurora PostgreSQL, membutuhkan waktu lebih lama daripada kueri Microsoft SQL Server asli Anda, Anda dapat mempertimbangkan untuk membuat umpan data historis langsung ke bucket Amazon Simple Storage Service (Amazon S3) dari server Aurora, dan menggunakan bucket Amazon Athena-based Kueri SQL untuk menghasilkan laporan dan kueri data analitik untuk dasbor pengguna Anda. | Pengembang aplikasi, arsitek Cloud |
Sumber daya terkait
Informasi tambahan
Baik Microsoft SQL Server dan Aurora PostgreSQL kompatibel adalah ANSI SQL-Complaint. Namun, Anda harus tetap mengetahui adanya ketidakcocokan dalam sintaks, tipe data kolom, fungsi khusus database asli, sisipan massal, dan sensitivitas huruf besar saat Anda memigrasikan aplikasi Python atau Perl dari SQL Server ke PostgreSQL.
Bagian berikut memberikan informasi lebih lanjut tentang kemungkinan inkonsistensi.
Perbandingan tipe data
Perubahan tipe data dari SQL Server ke PostgreSQL dapat menyebabkan perbedaan yang signifikan dalam data yang dihasilkan di mana aplikasi beroperasi. Untuk perbandingan tipe data, lihat tabel di situs web Sqlines
Fungsi SQL asli atau bawaan
Perilaku beberapa fungsi berbeda antara database SQL Server dan PostgreSQL. Tabel berikut memberikan perbandingan.
Microsoft SQL Server | Deskripsi | PostgreSQL |
|---|---|---|
| Mengkonversi nilai dari satu tipe data ke yang lain. | PostgreSQL |
| Mengembalikan tanggal dan waktu sistem database saat ini, dalam |
|
| Menambahkan time/date interval ke tanggal. |
|
| Mengkonversi nilai ke format data tertentu. |
|
| Mengembalikan perbedaan antara dua tanggal. |
|
| Membatasi jumlah baris dalam set |
|
Blok anonim
Kueri SQL terstruktur diatur ke dalam beberapa bagian seperti deklarasi, executable, dan penanganan pengecualian. Tabel berikut membandingkan versi Microsoft SQL Server dan PostgreSQL dari blok anonim sederhana. Untuk blok anonim yang kompleks, kami sarankan Anda memanggil fungsi basis data khusus dalam aplikasi Anda.
Microsoft SQL Server | PostgreSQL |
|---|---|
|
|
Perbedaan lainnya
Sisipan baris massal: PostgreSQL setara dengan utilitas Microsoft SQL Server bcp adalah COPY
. Sensitivitas kasus: Nama kolom peka huruf besar/kecil di PostgreSQL, jadi Anda harus mengonversi nama kolom SQL Server Anda menjadi huruf kecil atau huruf besar. Ini menjadi faktor ketika Anda mengekstrak atau membandingkan data, atau menempatkan nama kolom dalam kumpulan hasil atau variabel. Contoh berikut mengidentifikasi kolom di mana nilai mungkin disimpan dalam huruf besar atau kecil.
my $sql_qry = "SELECT $record_id FROM $exampleTable WHERE LOWER($record_name) = \'failed transaction\'";
Penggabungan: SQL Server menggunakan
+sebagai operator untuk penggabungan string, sedangkan PostgreSQL menggunakan.||Validasi: Anda harus menguji dan memvalidasi query SQL sebaris dan fungsi sebelum Anda menggunakannya dalam kode aplikasi untuk PostgreSQL.
Penyertaan Perpustakaan ORM: Anda juga dapat mencari termasuk atau mengganti pustaka koneksi database yang ada dengan pustaka ORM Python seperti dan PynoMoDB. SQLAlchemy
Ini akan membantu untuk dengan mudah query dan memanipulasi data dari database menggunakan paradigma berorientasi objek.