

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
<a name="change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition"></a>

*Dwarika Patra dan Deepesh Jayaprakash, Amazon Web Services*

## Ringkasan
<a name="change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition-summary"></a>

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
<a name="change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition-prereqs"></a>

**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)](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraPostgreSQL.Updates.20180305.html#AuroraPostgreSQL.Updates.20180305.42)

## Arsitektur
<a name="change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition-architecture"></a>

**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](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/b64de64a-bd55-4db7-ba7b-0a2557862af1/images/b8fab3e2-ded5-4f58-86bf-3f645252e9fc.png)


## Alat
<a name="change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition-tools"></a>

**Layanan dan alat AWS**
+ [Aurora PostgreSQL — Compatible Edition](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) 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](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)) adalah alat sumber terbuka yang memungkinkan Anda berinteraksi dengan layanan AWS dengan menggunakan perintah di shell baris perintah Anda.

**Alat-alat lainnya**
+ [Pustaka koneksi database Python](https://www.python.org/) [dan PostgressQL seperti psycopg2 dan [SQLAlchemy](https://www.sqlalchemy.org/)](https://pypi.org/project/psycopg2/)
+ [Perl dan modul](https://www.perl.org/) [DBI-nya](https://metacpan.org/pod/DBD::Pg)
+ [Terminal interaktif PostgreSQL (psql](https://www.postgresql.org/docs/13/app-psql.html))

## Epik
<a name="change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition-epics"></a>

### Migrasikan repositori aplikasi Anda ke PostgreSQL — langkah tingkat tinggi
<a name="migrate-your-application-repository-to-postgresql-ndash-high-level-steps"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Ikuti langkah-langkah konversi kode ini untuk memigrasikan aplikasi Anda ke PostgreSQL. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition.html)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:[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition.html) | Pengembang aplikasi | 

### Analisis dan perbarui aplikasi Anda — basis kode Python
<a name="analyze-and-update-your-application-ndash-python-code-base"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Analisis basis kode Python Anda yang ada.  | Analisis Anda harus mencakup hal-hal berikut untuk memfasilitasi proses migrasi aplikasi:[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition.html) | Pengembang aplikasi | 
| Konversikan koneksi database Anda untuk mendukung PostgreSQL.  | Sebagian besar aplikasi Python menggunakan pustaka **pyodbc** untuk terhubung dengan database SQL Server sebagai berikut.<pre>import pyodbc<br />....<br />try:<br />    conn_string = "Driver=ODBC Driver 17 for SQL<br />    Server;UID={};PWD={};Server={};Database={}".format (conn_user, conn_password,<br />    conn_server, conn_database)<br />    conn = pyodbc.connect(conn_string)<br />    cur = conn.cursor()<br />    result = cur.execute(query_string)<br />    for row in result:<br />    print (row)<br />except Exception as e:<br />    print(str(e))</pre><br />Mengkonversi koneksi database untuk mendukung PostgreSQL sebagai berikut.<pre>import pyodbc<br />import psycopg2<br />....<br />try:<br />    conn_string = ‘postgresql+psycopg2://’+<br />    conn_user+’:’+conn_password+’@’+conn_server+’/’+conn_database<br />    conn = pyodbc.connect(conn_string, connect_args={‘options’:’-csearch_path=dbo’})<br />    cur = conn.cursor()<br />    result = cur.execute(query_string)<br />    for row in result:<br />    print (row)<br />except Exception as e:<br />    print(str(e))</pre> | 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.<pre>dtype = "type1"<br />stm = ‘"SELECT TOP 1 searchcode FROM TypesTable (NOLOCK)<br />WHERE code="’ + "’" + str(dtype) + "’"<br /># For Microsoft SQL Server Database Connection<br />engine = create_engine(‘mssql+pyodbc:///?odbc_connect=%s’ % urllib.parse.quote_plus(conn_string), connect_args={‘connect_timeout’:login_timeout})<br />conn = engine_connect()<br />rs = conn.execute(stm)<br />for row in rs:<br />    print(row)</pre><br />Setelah konversi, kueri SQL sebaris yang kompatibel dengan PostgreSQL terlihat seperti berikut.<pre>dtype = "type1"<br />stm = ‘"SELECT searchcode FROM TypesTable<br />WHERE code="’ + "’" + str(dtype) + "’ LIMIT 1"<br /># For PostgreSQL Database Connection<br />engine = create_engine(‘postgres+psycopg2://%s’ %conn_string, connect_args={‘connect_timeout’:login_timeout})<br />conn = engine.connect()<br />rs = conn.execute(stm)<br />for row in rs:<br />    print(row)</pre> | 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. <br />Dalam contoh berikut, string kueri dibangun dengan cepat berdasarkan nilai yang dikembalikan oleh fungsi.<pre>query = ‘"SELECT id from equity e join issues i on e.permId=i.permId where e.id’"<br />query += get_id_filter(ids) + " e.id is NOT NULL</pre><br />Jenis kueri dinamis ini sangat umum selama migrasi aplikasi. Ikuti langkah-langkah berikut untuk menangani kueri dinamis:[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition.html) | 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.<br />**pyodbc (Microsoft SQL Server)**<pre>import pyodbc <br />server = 'tcp:myserver.database.windows.net' <br />database = 'exampledb' <br />username = 'exampleusername' <br />password = 'examplepassword' <br />conn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)<br />cursor = conn.cursor()<br />cursor.execute("SELECT * FROM ITEMS") <br />row = cursor.fetchone() <br />while row: <br />    print(row[0])<br />    row = cursor.fetchone()</pre><br />**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.<br />**psycopg2 (Kompatibel dengan Aurora PostgreSQL)**<pre>import psycopg2<br />query = "SELECT * FROM ITEMS;"<br />//Initialize variables<br />host=dbname=user=password=port=sslmode=connect_timeout=""<br />connstring = "host='{host}' dbname='{dbname}' user='{user}' \<br />password='{password}'port='{port}'".format(host=host,dbname=dbname,\<br />user=user,password=password,port=port) <br />conn = psycopg2.connect(connstring)<br />cursor = conn.cursor()<br />cursor.execute(query)<br />column_names = [column[0] for column in cursor.description]<br />print("Column Names: ", column_names)<br />print("Column values: "<br />for row in cursor:<br />    print("itemid :", row[0])<br />    print("itemdescrption :", row[1])<br />    print("itemprice :", row[3]))</pre><br />**SQLAlchemy (Kompatibel dengan Aurora PostgreSQL)**<pre>from sqlalchemy import create_engine<br />from pandas import DataFrame<br />conn_string = 'postgresql://core:database@localhost:5432/exampledatabase'<br />engine = create_engine(conn_string)<br />conn = engine.connect()<br />dataid = 1001<br />result = conn.execute("SELECT * FROM ITEMS")<br />df = DataFrame(result.fetchall())<br />df.columns = result.keys()<br />df = pd.DataFrame()<br />engine.connect()<br />df = pd.read_sql_query(sql_query, engine, coerce_float=False)<br />print("df=", df)</pre> | 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 (`bcp`bukan`COPY`) dan perubahan serupa, migrasi harus diuji dengan cermat selama dan setelah migrasi aplikasi. Periksa:[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition.html) | Pengembang aplikasi | 

### Analisis dan perbarui aplikasi Anda — Basis kode Perl
<a name="analyze-and-update-your-application-ndash-perl-code-base"></a>


| 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:[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition.html) | 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.<br />Untuk informasi selengkapnya tentang modul Perl yang diperlukan, instalasi, dan instruksi lainnya, lihat dokumentasi [DBD](https://metacpan.org/pod/DBD::Pg): :Pg. Contoh berikut terhubung ke Aurora PostgreSQL kompatibel di. `exampletest-aurorapg-database.cluster-sampleclusture.us-east.-rds.amazonaws.com`<pre>#!/usr/bin/perl<br />use DBI;<br />use strict;<br />my $driver = "Pg";<br />my $hostname = "exampletest-aurorapg-database-sampleclusture.us-east.rds.amazonaws.com"<br />my $dsn = "DBI:$driver: dbname = $hostname;host = 127.0.0.1;port = 5432";<br />my $username = "postgres";<br />my $password = "pass123";<br />$dbh = DBI->connect("dbi:Pg:dbname=$hostname;host=$host;port=$port;options=$options",<br />      $username,<br />      $password,<br />      {AutoCommit => 0, RaiseError => 1, PrintError => 0}<br />      );</pre> | Pengembang aplikasi | 
| Ubah kueri SQL Inline ke PostgreSQL. | Aplikasi Anda mungkin memiliki kueri SQL sebaris dengan`SELECT`,, `DELETE``UPDATE`, 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 menangani`TOP`,`NOLOCK`, dan variabel Boolean.<br />Di SQL Server:<pre>$sqlStr = $sqlStr<br />. "WHERE a.student_id in (SELECT TOP $numofRecords c_student_id   \<br />FROM active_student_record b WITH (NOLOCK) \<br />INNER JOIN student_contributor c WITH (NOLOCK) on c.contributor_id = b.c_st)</pre><br />Untuk PostgreSQL, konversi ke:<pre>$sqlStr = $sqlStr<br />. "WHERE a.student_id in (SELECT TOP $numofRecords c_student_id  \<br />FROM active_student_record b INNER JOIN student_contributor c  \<br />on c.contributor_id = b.c_student_contr_id WHERE b_current_1 is true \<br />LIMIT $numofRecords)"</pre> | 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.<br />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:[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition.html)<br />Berikut adalah contoh penanganan variabel, diikuti oleh SQL Server dan PostgreSQL query untuk kasus penggunaan ini.<pre>my $tableexists = db_read( arg 1, $sql_qry, undef, 'writer');<br />my $table_already_exists = $tableexists->[0]{table_exists};<br />if ($table_already_exists){<br /># do some thing<br />}<br />else {<br /># do something else<br />}</pre><br />Server SQL:<pre>my $sql_qry = "SELECT OBJECT_ID('$backendTable', 'U') table_exists", undef, 'writer')";</pre><br />PostgreSQL:<pre>my $sql_qry = "SELECT TO_REGCLASS('$backendTable', 'U') table_exists", undef, 'writer')";</pre><br />Contoh berikut menggunakan variabel**** Perl dalam SQL inline, yang menjalankan `SELECT` pernyataan dengan `JOIN` untuk mengambil kunci utama dari tabel dan posisi kolom kunci.<br />Server SQL:<pre>my $sql_qry = "SELECT column_name', character_maxi mum_length \<br />FROM INFORMATION_SCHEMA.COLUMNS \<br />WHERE TABLE_SCHEMA='$example_schemaInfo' \<br />AND TABLE_NAME='$example_table' \<br />AND DATA_TYPE IN ('varchar','nvarchar');";</pre><br />PostgreSQL:<pre>my $sql_qry = "SELECT c1.column_name, c1.ordinal_position \<br />FROM information_schema.key_column_usage AS c LEFT \<br />JOIN information_schema.table_constraints AS t1 \<br />ON t1.constraint_name = c1.constraint_name \<br />WHERE t1.table_name = $example_schemaInfo'.'$example_table’ \<br />AND t1.constraint_type = 'PRIMARY KEY' ;";</pre> | Pengembang aplikasi | 

### Buat perubahan tambahan pada aplikasi berbasis Perl atau Python Anda untuk mendukung PostgreSQL
<a name="make-additional-changes-to-your-perl-based-or-python-based-application-to-support-postgresql"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Mengkonversi konstruksi SQL Server tambahan ke PostgreSQL. | Perubahan berikut berlaku untuk semua aplikasi, terlepas dari bahasa pemrograman.[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition.html) | Pengembang aplikasi | 

### Tingkatkan kinerja
<a name="improve-performance"></a>


| 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
<a name="change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition-resources"></a>
+ [Perl](https://www.perl.org/)
+ [Perl DBI Modul](https://metacpan.org/pod/DBI)
+ [Python](https://www.python.org/)
+ [psycopg2](https://pypi.org/project/psycopg2/)
+ [SQLAlchemy](https://www.sqlalchemy.org/)
+ [Salinan Massal - PostgreSQL](https://www.postgresql.org/docs/9.2/sql-copy.html)
+ [Salinan Massal - Microsoft SQL Server](https://docs.microsoft.com/en-us/sql/tools/bcp-utility?view=sql-server-ver15)
+ [PostgreSQL](https://www.postgresql.org/)
+ [Bekerja dengan Amazon Aurora PostgreSQL](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html)

## Informasi tambahan
<a name="change-python-and-perl-applications-to-support-database-migration-from-microsoft-sql-server-to-amazon-aurora-postgresql-compatible-edition-additional"></a>

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](https://www.sqlines.com/sql-server-to-postgresql).

**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. | `INTERVAL`ekspresi | 
| `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 | 
| --- |--- |
| <pre>my $sql_qry1=<br />my $sql_qry2 =<br />my $sqlqry = "BEGIN TRAN<br />$sql_qry1 $sql_qry2<br />if @\@error !=0 ROLLBACK<br />TRAN<br />else COMIT TRAN";</pre> | <pre>my $sql_qry1=<br />my $sql_qry2 =<br />my $sql_qry = " DO \$\$<br />BEGIN<br />$header_sql $content_sql<br />END<br />\$\$";</pre> | 

 

**Perbedaan lainnya**
+ **Sisipan baris massal:** [PostgreSQL setara dengan utilitas [Microsoft SQL Server bcp adalah COPY](https://docs.microsoft.com/en-us/sql/tools/bcp-utility?view=sql-server-ver15).](https://www.postgresql.org/docs/9.2/sql-copy.html)
+ **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](https://www.sqlalchemy.org/)](https://pynamodb.readthedocs.io/en/latest/quickstart.html) Ini akan membantu untuk dengan mudah query dan memanipulasi data dari database menggunakan paradigma berorientasi objek.