Ubah aplikasi Python dan Perl untuk mendukung migrasi database dari Microsoft SQL Server ke Amazon Aurora PostgreSQL Edisi yang kompatibel - AWS Prescriptive Guidance

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

  • Mengontrol 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

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

Migrasi aplikasi Perl atau Python dengan SQL Server ke Aurora PostgreSQL kompatibel

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

TugasDeskripsiKeterampilan yang dibutuhkan

Ikuti langkah-langkah konversi kode ini untuk memigrasikan aplikasi Anda ke PostgreSQL.

  1. Tetapkan driver dan pustaka ODBC khusus database untuk PostgreSQL. Misalnya, Anda dapat menggunakan salah satu modul CPAN untuk Perl dan pyodbc, psycopg2, atau untuk Python. SQLAlchemy

  2. Mengkonversi objek database dengan menggunakan pustaka ini untuk terhubung ke Aurora PostgreSQL kompatibel.

  3. Terapkan perubahan kode dalam modul aplikasi yang ada untuk mendapatkan pernyataan T-SQL yang kompatibel.

  4. Tulis ulang panggilan fungsi khusus database dan prosedur tersimpan dalam kode aplikasi.

  5. Menangani perubahan pada variabel aplikasi Anda dan tipe datanya yang digunakan untuk kueri SQL sebaris.

  6. Menangani fungsi khusus database yang tidak kompatibel.

  7. end-to-endPengujian lengkap kode aplikasi yang dikonversi untuk migrasi database.

  8. Bandingkan hasil dari Microsoft SQL Server dengan aplikasi yang Anda migrasi ke PostgreSQL.

  9. Lakukan benchmarking kinerja aplikasi antara Microsoft SQL Server dan PostgreSQL.

  10. Merevisi prosedur tersimpan atau pernyataan T-SQL inline yang dipanggil oleh aplikasi untuk meningkatkan kinerja.

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:

  • Tinjau dokumentasi PostgreSQL untuk memastikan bahwa semua perubahan Anda kompatibel dengan standar PostgreSQL.

  • Periksa bilangan bulat dan nilai mengambang untuk kolom.

  • Identifikasi jumlah baris yang disisipkan, diperbarui, dan diekstraksi, bersama dengan nama kolom dan date/time prangko. Anda dapat menggunakan utilitas diff atau menulis skrip untuk mengotomatiskan pemeriksaan ini.

  • Selesaikan pemeriksaan kinerja untuk pernyataan SQL inline yang besar, dan periksa kinerja keseluruhan aplikasi.

  • Periksa penanganan kesalahan yang benar untuk operasi database dan keluar program yang anggun dengan menggunakan beberapa try/catch blok.

  • Periksa untuk memastikan bahwa proses logging yang tepat sudah ada.

Pengembang aplikasi
TugasDeskripsiKeterampilan yang dibutuhkan

Analisis basis kode Python Anda yang ada.

Analisis Anda harus mencakup hal-hal berikut untuk memfasilitasi proses migrasi aplikasi:

  • Identifikasi semua objek koneksi dalam kode.

  • Identifikasi semua kueri SQL inline yang tidak kompatibel (seperti pernyataan T-SQL dan prosedur tersimpan) dan analisis perubahan yang diperlukan.

  • Tinjau dokumentasi untuk kode Anda dan lacak alur kontrol untuk memahami fungsionalitas kode. Ini akan membantu nanti ketika Anda menguji aplikasi untuk perbandingan kinerja atau beban.

  • Pahami tujuan aplikasi sehingga Anda dapat mengujinya secara efektif setelah konversi database. Sebagian besar aplikasi Python yang merupakan kandidat untuk konversi dengan migrasi database adalah feed yang memuat data dari sumber lain ke dalam tabel database, atau ekstraktor yang mengambil data dari tabel dan mengubahnya menjadi format output yang berbeda (seperti CSV, JSON, atau file datar) yang cocok untuk membuat laporan atau untuk membuat panggilan API untuk melakukan validasi. 

Pengembang aplikasi

Konversikan koneksi database Anda untuk mendukung PostgreSQL.

Sebagian besar aplikasi Python menggunakan pustaka pyodbc untuk terhubung dengan database SQL Server sebagai berikut.

import pyodbc .... try: conn_string = "Driver=ODBC Driver 17 for SQL Server;UID={};PWD={};Server={};Database={}".format (conn_user, conn_password, conn_server, conn_database) conn = pyodbc.connect(conn_string) cur = conn.cursor() result = cur.execute(query_string) for row in result: print (row) except Exception as e: print(str(e))

Mengkonversi koneksi database untuk mendukung PostgreSQL sebagai berikut.

import pyodbc import psycopg2 .... try: conn_string = ‘postgresql+psycopg2://’+ conn_user+’:’+conn_password+’@’+conn_server+’/’+conn_database conn = pyodbc.connect(conn_string, connect_args={‘options’:’-csearch_path=dbo’}) cur = conn.cursor() result = cur.execute(query_string) for row in result: print (row) except Exception as e: print(str(e))
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.

dtype = "type1" stm = ‘"SELECT TOP 1 searchcode FROM TypesTable (NOLOCK) WHERE code="’ + "’" + str(dtype) + "’" # For Microsoft SQL Server Database Connection engine = create_engine(‘mssql+pyodbc:///?odbc_connect=%s’ % urllib.parse.quote_plus(conn_string), connect_args={‘connect_timeout’:login_timeout}) conn = engine_connect() rs = conn.execute(stm) for row in rs: print(row)

Setelah konversi, kueri SQL sebaris yang kompatibel dengan PostgreSQL terlihat seperti berikut.

dtype = "type1" stm = ‘"SELECT searchcode FROM TypesTable WHERE code="’ + "’" + str(dtype) + "’ LIMIT 1" # For PostgreSQL Database Connection engine = create_engine(‘postgres+psycopg2://%s’ %conn_string, connect_args={‘connect_timeout’:login_timeout}) conn = engine.connect() rs = conn.execute(stm) for row in rs: print(row)
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.

query = ‘"SELECT id from equity e join issues i on e.permId=i.permId where e.id’" query += get_id_filter(ids) + " e.id is NOT NULL

Jenis kueri dinamis ini sangat umum selama migrasi aplikasi. Ikuti langkah-langkah berikut untuk menangani kueri dinamis:

  • Periksa sintaks keseluruhan (misalnya, sintaks untuk SELECT pernyataan dengan JOIN klausa).

  • Verifikasi semua variabel atau nama kolom yang digunakan dalam kueri, seperti i danid.

  • Periksa fungsi, argumen, dan nilai pengembalian yang digunakan dalam kueri (misalnya, get_id_filter dan argumennyaids).

Pengembang aplikasi

Menangani set hasil, variabel, dan frame data.

Untuk Microsoft SQL Server, Anda menggunakan metode Python fetchone() seperti fetchall() atau untuk mengambil hasil yang ditetapkan dari database. Anda juga dapat menggunakan fetchmany(size) dan menentukan jumlah catatan yang akan dikembalikan dari hasil yang ditetapkan. Untuk melakukan ini, Anda dapat menggunakan objek koneksi pyodbc seperti yang ditunjukkan pada contoh berikut.

pyodbc (Microsoft SQL Server)

import pyodbc server = 'tcp:myserver.database.windows.net' database = 'exampledb' username = 'exampleusername' password = 'examplepassword' conn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password) cursor = conn.cursor() cursor.execute("SELECT * FROM ITEMS") row = cursor.fetchone() while row: print(row[0]) row = cursor.fetchone()

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)

import psycopg2 query = "SELECT * FROM ITEMS;" //Initialize variables host=dbname=user=password=port=sslmode=connect_timeout="" connstring = "host='{host}' dbname='{dbname}' user='{user}' \ password='{password}'port='{port}'".format(host=host,dbname=dbname,\ user=user,password=password,port=port) conn = psycopg2.connect(connstring) cursor = conn.cursor() cursor.execute(query) column_names = [column[0] for column in cursor.description] print("Column Names: ", column_names) print("Column values: " for row in cursor: print("itemid :", row[0]) print("itemdescrption :", row[1]) print("itemprice :", row[3]))

SQLAlchemy (Kompatibel dengan Aurora PostgreSQL)

from sqlalchemy import create_engine from pandas import DataFrame conn_string = 'postgresql://core:database@localhost:5432/exampledatabase' engine = create_engine(conn_string) conn = engine.connect() dataid = 1001 result = conn.execute("SELECT * FROM ITEMS") df = DataFrame(result.fetchall()) df.columns = result.keys() df = pd.DataFrame() engine.connect() df = pd.read_sql_query(sql_query, engine, coerce_float=False) print("df=", df)
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 (bcpbukanCOPY) dan perubahan serupa, migrasi harus diuji dengan cermat selama dan setelah migrasi aplikasi. Periksa:

  • Kondisi kesalahan dan penanganan 

  • Ketidakcocokan catatan apa pun setelah migrasi

  • Rekam pembaruan atau penghapusan

  • Waktu yang dibutuhkan untuk menjalankan aplikasi 

Pengembang aplikasi
TugasDeskripsiKeterampilan yang dibutuhkan

Analisis basis kode Perl Anda yang ada.

Analisis Anda harus mencakup hal-hal berikut untuk memfasilitasi proses migrasi aplikasi. Anda harus mengidentifikasi:

  • Kode ini atau berbasis konfigurasi apa pun

  • Driver Perl Open Database Connectivity (ODBC) standar khusus database atau driver apa pun yang disesuaikan

  • Perubahan kode diperlukan untuk kueri inline dan T-SQL

  • Interaksi antara berbagai modul Perl (misalnya, objek koneksi Perl ODBC tunggal yang disebut atau digunakan oleh beberapa komponen fungsional)

  • Set data dan penanganan set hasil

  • Pustaka Perl eksternal dan tergantung

  • Apa pun APIs yang digunakan dalam aplikasi

  • Kompatibilitas versi Perl dan kompatibilitas driver dengan Aurora PostgreSQL kompatibel

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: :Pg. Contoh berikut terhubung ke Aurora PostgreSQL kompatibel di. exampletest-aurorapg-database.cluster-sampleclusture.us-east.-rds.amazonaws.com

#!/usr/bin/perl use DBI; use strict; my $driver = "Pg"; my $hostname = "exampletest-aurorapg-database-sampleclusture.us-east.rds.amazonaws.com" my $dsn = "DBI:$driver: dbname = $hostname;host = 127.0.0.1;port = 5432"; my $username = "postgres"; my $password = "pass123"; $dbh = DBI->connect("dbi:Pg:dbname=$hostname;host=$host;port=$port;options=$options", $username, $password, {AutoCommit => 0, RaiseError => 1, PrintError => 0} );
Pengembang aplikasi

Ubah kueri SQL Inline ke PostgreSQL.

Aplikasi Anda mungkin memiliki kueri SQL sebaris denganSELECT,, DELETEUPDATE, dan pernyataan serupa yang menyertakan klausa kueri yang tidak didukung PostgreSQL. Misalnya, kata kunci kueri seperti TOP dan NOLOCK tidak didukung di PostgreSQL. Contoh berikut menunjukkan bagaimana Anda dapat menanganiTOP,NOLOCK, dan variabel Boolean.

Di SQL Server:

$sqlStr = $sqlStr . "WHERE a.student_id in (SELECT TOP $numofRecords c_student_id \ FROM active_student_record b WITH (NOLOCK) \ INNER JOIN student_contributor c WITH (NOLOCK) on c.contributor_id = b.c_st)

Untuk PostgreSQL, konversi ke:

$sqlStr = $sqlStr . "WHERE a.student_id in (SELECT TOP $numofRecords c_student_id \ FROM active_student_record b INNER JOIN student_contributor c \ on c.contributor_id = b.c_student_contr_id WHERE b_current_1 is true \ LIMIT $numofRecords)"
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:

  • Jika tabel ada, jangan membuatnya; lakukan beberapa pemrosesan.

  • Jika tabel tidak ada, buat tabel dan lakukan juga beberapa pemrosesan.

Berikut adalah contoh penanganan variabel, diikuti oleh SQL Server dan PostgreSQL query untuk kasus penggunaan ini.

my $tableexists = db_read( arg 1, $sql_qry, undef, 'writer'); my $table_already_exists = $tableexists->[0]{table_exists}; if ($table_already_exists){ # do some thing } else { # do something else }

Server SQL:

my $sql_qry = "SELECT OBJECT_ID('$backendTable', 'U') table_exists", undef, 'writer')";

PostgreSQL:

my $sql_qry = "SELECT TO_REGCLASS('$backendTable', 'U') table_exists", undef, 'writer')";

Contoh berikut menggunakan variabel Perl dalam SQL inline, yang menjalankan SELECT pernyataan dengan JOIN untuk mengambil kunci utama dari tabel dan posisi kolom kunci.

Server SQL:

my $sql_qry = "SELECT column_name', character_maxi mum_length \ FROM INFORMATION_SCHEMA.COLUMNS \ WHERE TABLE_SCHEMA='$example_schemaInfo' \ AND TABLE_NAME='$example_table' \ AND DATA_TYPE IN ('varchar','nvarchar');";

PostgreSQL:

my $sql_qry = "SELECT c1.column_name, c1.ordinal_position \ FROM information_schema.key_column_usage AS c LEFT \ JOIN information_schema.table_constraints AS t1 \ ON t1.constraint_name = c1.constraint_name \ WHERE t1.table_name = $example_schemaInfo'.'$example_table’ \ AND t1.constraint_type = 'PRIMARY KEY' ;";
Pengembang aplikasi
TugasDeskripsiKeterampilan yang dibutuhkan

Mengkonversi konstruksi SQL Server tambahan ke PostgreSQL.

Perubahan berikut berlaku untuk semua aplikasi, terlepas dari bahasa pemrograman.

  • Memenuhi syarat objek database yang digunakan aplikasi Anda dengan nama skema baru dan sesuai.

  • Tangani operator LIKE untuk pencocokan peka huruf besar/kecil dengan fitur pemeriksaan di PostgreSQL.

  • Menangani fungsi spesifik database yang tidak didukung sepertiDATEDIFF,DATEADD,, GETDATECONVERT, dan CAST operator. Untuk fungsi yang kompatibel dengan PostgreSQL yang setara, lihat Fungsi SQL asli atau bawaan di bagian Informasi tambahan. 

  • Menangani nilai Boolean dalam pernyataan perbandingan.

  • Menangani nilai pengembalian dari fungsi. Ini bisa berupa kumpulan rekaman, bingkai data, variabel, dan nilai Boolean. Tangani ini sesuai dengan persyaratan aplikasi Anda dan untuk mendukung PostgreSQL.

  • Tangani blok anonim (sepertiBEGIN TRAN) dengan fungsi PostgreSQL baru yang ditentukan pengguna.

  • Konversi sisipan massal untuk baris. PostgreSQL setara dengan utilitas SQL Server bulk copy bcp (), yang dipanggil dari dalam aplikasi, adalah. COPY

  • Mengkonversi operator penggabungan kolom. SQL Server menggunakan + untuk penggabungan string, tetapi PostgreSQL menggunakan. ||

Pengembang aplikasi
TugasDeskripsiKeterampilan 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

CAST 

Mengkonversi nilai dari satu tipe data ke yang lain.

PostgreSQL type :: operator

GETDATE()

Mengembalikan tanggal dan waktu sistem database saat ini, dalam YYYY-MM-DD hh:mm:ss.mmm format.

CLOCK_TIMESTAMP

DATEADD

Menambahkan time/date interval ke tanggal.

INTERVALekspresi

CONVERT

Mengkonversi nilai ke format data tertentu.

TO_CHAR

DATEDIFF

Mengembalikan perbedaan antara dua tanggal.

DATE_PART

TOP

Membatasi jumlah baris dalam set SELECT hasil.

LIMIT/FETCH

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

my $sql_qry1= my $sql_qry2 = my $sqlqry = "BEGIN TRAN $sql_qry1 $sql_qry2 if @\@error !=0 ROLLBACK TRAN else COMIT TRAN";
my $sql_qry1= my $sql_qry2 = my $sql_qry = " DO \$\$ BEGIN $header_sql $content_sql END \$\$";

 

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\'";