翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Microsoft SQL Server から Amazon Aurora Postgre SQL互換エディションへのデータベース移行をサポートするように Python および Perl アプリケーションを変更する
作成者: Dwarika Patra (AWS) と Deepesh Jayaprakash (AWS)
環境:PoC またはパイロット | ソース: SQL サーバー | ターゲット: Aurora Postgre SQL互換 |
R タイプ: リプラットフォーム | ワークロード: Microsoft、オープンソース | テクノロジー: 移行、データベース |
AWS サービス: Amazon Aurora |
[概要]
このパターンでは、Microsoft SQL Server から Amazon Aurora Postgre SQL互換エディションにデータベースを移行するときに必要となるアプリケーションリポジトリの変更について説明します。このパターンでは、これらのアプリケーションが Python または Perl ベースであることを前提としており、これらのスクリプト言語には個別の指示が記載されています。
SQL サーバーデータベースを Aurora Postgre SQL-Compatible に移行するには、スキーマ変換、データベースオブジェクト変換、データ移行、およびデータロードが必要です。PostgreSQL と SQL Server の違い (データ型、接続オブジェクト、構文、ロジックに関連する) により、最も困難な移行タスクには、Postgre で正しく動作するようにコードベースに必要な変更を加えることが含まれますSQL。
Python ベースのアプリケーションでは、接続オブジェクトとクラスはシステム全体に分散されています。また、Python コードベースは複数のライブラリを使用してデータベースに接続している場合があります。データベース接続インターフェースが変更された場合、アプリケーションのインラインクエリを実行するオブジェクトも変更する必要があります。
Perl ベースのアプリケーションの場合、変更には、接続オブジェクト、データベース接続ドライバー、静的および動的なインラインSQLステートメント、およびアプリケーションが複雑な動的DMLクエリと結果セットを処理する方法が含まれます。
アプリケーションを移行するときは、FTPサーバーを Amazon Simple Storage Service (Amazon S3) アクセスに置き換えるなどAWS、 で可能な機能強化を検討することもできます。
アプリケーションの移行プロセスには、以下の問題があります。
接続オブジェクト。接続オブジェクトが複数のライブラリと関数呼び出しでコードに分散されている場合は、Postgre をサポートするためにそれらを一般的な方法で変更する必要がある場合がありますSQL。
レコードの取得または更新中のエラーや例外の処理。変数、結果セット、またはデータフレームを返す条件付き作成、読み取り、更新、および削除 (CRUD) オペレーションがデータベースにある場合、エラーや例外があると、カスケード効果を伴うアプリケーションエラーが発生する可能性があります。これらの処理は、適切な検証を行いながら、ポイントを保存して慎重に処理する必要があります。このような保存ポイントの 1 つは、
BEGIN...EXCEPTION...END
ブロック内の大きなインラインSQLクエリまたはデータベースオブジェクトを呼び出すことです。トランザクションの制御と検証。手動および自動のコミットとロールバックが含まれます。Perl の PostgreSQL ドライバーでは、常に auto-commit 属性を明示的に設定する必要があります。
動的SQLクエリの処理。これには、クエリが意図したとおりに動作することを確実にするため、クエリロジックと反復テストを詳しく理解する必要があります。
パフォーマンス コードを変更しても、アプリケーションのパフォーマンスが低下しないようにする必要があります。
このパターンでは、変換プロセスを詳しく説明します。
前提条件と制限
前提条件
Python と Perl の構文に関する実用的な知識。
SQL Server と Postgre の基本スキルSQL。
既存のアプリケーションアーキテクチャを理解しましょう。
アプリケーションコード、SQLサーバーデータベース、PostgreSQL データベースへのアクセス。
アプリケーションの変更を開発、テスト、検証するための認証情報を使用して Windows または Linux (または他の Unix) 開発環境にアクセスできます。
Python ベースのアプリケーションの場合、データフレームを処理するために Pandas や psycopg2、データベース接続SQLAlchemyなど、アプリケーションが必要とする標準の Python ライブラリ。
Perl ベースのアプリケーションでは、依存ライブラリまたはモジュールを含む Perl パッケージが必要です。Comprehensive Perl Archive Network (CPAN) モジュールは、ほとんどのアプリケーション要件をサポートできます。
必要なすべての依存関係のあるカスタマイズされたライブラリまたはモジュール。
SQL Server への読み取りアクセスと Aurora への読み取り/書き込みアクセス用のデータベース認証情報。
PostgreSQL は、サービスとユーザーによるアプリケーションの変更を検証およびデバッグします。
Visual Studio Code、Sublime Text、 などのアプリケーション移行中の開発ツールへのアクセスpgAdmin。
制約事項
Python や Perl のバージョン、モジュール、ライブラリ、パッケージの中には、クラウド環境と互換性のないものがあります。
SQL サーバーに使用される一部のサードパーティーライブラリやフレームワークは、PostgreSQL 移行をサポートするために置き換えることはできません。
パフォーマンスの変動により、アプリケーション、インライントランザクション (T-SQL) SQLクエリ、データベース関数、ストアドプロシージャの変更が必要になる場合があります。
PostgreSQL は、テーブル名、列名、およびその他のデータベースオブジェクトの小文字名をサポートしています。
UUID 列などの一部のデータ型は、小文字でのみ保存されます。Python と Perl のアプリケーションは、このような大文字と小文字の違いを処理する必要があります。
文字エンコーディングの違いは、PostgreSQL データベース内の対応するテキスト列に対して正しいデータ型で処理する必要があります。
製品バージョン
Python 3.6 以降 (オペレーティングシステムをサポートするバージョンを使用してください)
Perl 5.8.3 以降 (オペレーティングシステムをサポートするバージョンを使用してください)
Aurora Postgre SQL- 互換エディション 4.2 以降 (詳細については「」を参照)
アーキテクチャ
ソーステクノロジースタック
スクリプト作成 (アプリケーションプログラミング) 言語: Python 2.7 以降または Perl 5.8
データベース: Microsoft SQL Server バージョン 13
オペレーティングシステム: Red Hat Enterprise Linux (RHEL) 7
ターゲットテクノロジースタック
スクリプト作成 (アプリケーションプログラミング) 言語:Python 3.6 以降または Perl 5.8 以降
データベース: Aurora Postgre SQL互換 4.2
オペレーティングシステム: RHEL 7
移行アーキテクチャ
ツール
AWS サービスとツール
Aurora Postgre SQL– Compatible Edition は、フルマネージド型の Postgre SQL互換ACIDのリレーショナルデータベースエンジンで、ハイエンドの商用データベースの速度と信頼性をオープンソースデータベースの費用対効果と組み合わせています。Aurora PostgreSQL は PostgreSQL のドロップイン代替品であり、新規および既存の PostgreSQL デプロイのセットアップ、運用、スケーリングをより簡単かつ費用対効果の高いものにします。
AWS コマンドラインインターフェイス (AWS CLI) は、コマンドラインシェルでコマンドを使用してAWSサービスとやり取りできるオープンソースツールです。
その他のツール
psycopg2
や などの Python および PostgresSQL データベース接続ライブラリ SQLAlchemy PostgreSQL インタラクティブターミナル
(psql)
エピック
タスク | 説明 | 必要なスキル |
---|---|---|
以下のコード変換手順に従って、アプリケーションを Postgre に移行しますSQL。 |
以下のエピックでは、Python および Perl アプリケーションの変換タスクの一部について詳しく説明します。 | アプリ開発者 |
移行の各ステップでチェックリストを使用します。 | アプリケーション移行の各手順 (最終ステップを含む) のチェックリストに以下の項目を追加してください。
| アプリ開発者 |
タスク | 説明 | 必要なスキル |
---|---|---|
既存の Python コードベースを分析します。 | アプリケーションの移行プロセスを円滑に進めるため、以下の項目を分析に含める必要があります。
| アプリ開発者 |
Postgre をサポートするようにデータベース接続を変換しますSQL。 | ほとんどの Python アプリケーションは、次のように pyodbc ライブラリを使用して SQL Server データベースに接続します。
データベース接続を PostgreSQL をサポートするように次のように変換します。
| アプリ開発者 |
インラインSQLクエリを Postgre に変更しますSQL。 | インラインSQLクエリを Postgre SQL互換形式に変換します。例えば、次のSQLサーバークエリはテーブルから文字列を取得します。
変換後、Postgre SQL互換のインラインSQLクエリは次のようになります。
| アプリ開発者 |
動的SQLクエリを処理します。 | 動的は、1 つのスクリプトまたは複数の Python スクリプトに存在するSQLことができます。前の例では、Python の文字列置換関数を使用して動的SQLクエリを構築するための変数を挿入する方法を示していました。別の方法として、該当する箇所に変数を使用してクエリ文字列を追加することもできます。 次の例では、関数から返された値に基づいてクエリ文字列が作成されます。
このような動的クエリは、アプリケーションの移行中によく使用されます。以下のステップに従って、動的クエリの処理を行います。
| アプリ開発者 |
結果セット、変数、データフレームを処理します。 | Microsoft SQL Server では、 pyodbc (Microsoft SQL サーバー)
Aurora では、PostgreSQL への接続や結果セットの取得などの同様のタスクを実行するには、psycopg2 または を使用できますSQLAlchemy。これらの Python ライブラリは、次の例に示すように、PostgreSQL データベースレコードを通過する接続モジュールとカーソルオブジェクトを提供します。 psycopg2 (Aurora Postgre SQL互換)
SQLAlchemy (Aurora Postgre SQL互換)
| アプリ開発者 |
移行中や移行後にアプリケーションをテストします。 | 移行後の Python アプリケーションのテストは継続的なプロセスです。移行には、接続オブジェクトの変更 (psycopg2or SQLAlchemy)、エラー処理、新機能 (データフレーム)、インラインSQL変更、一括コピー機能 (
| アプリ開発者 |
タスク | 説明 | 必要なスキル |
---|---|---|
既存の Perl コードベースを分析します。 | アプリケーションの移行プロセスを円滑に進めるため、以下の項目を分析に含める必要があります。以下の項目を特定する必要があります。
| アプリ開発者 |
Postgre をサポートするように、Perl アプリケーションとDBIモジュールから接続を変換しますSQL。 | Perl ベースのアプリケーションは通常、Perl DBIプログラミング言語の標準データベースアクセスモジュールである Perl モジュールを使用します。SQL Server と Postgre の異なるドライバーで同じDBIモジュールを使用できますSQL。 必要な Perl モジュール、インストール、およびその他の手順の詳細については、DBD::Pg ドキュメント
| アプリ開発者 |
インラインSQLクエリを Postgre に変更しますSQL。 | アプリケーションには SQL サーバー:
Postgre の場合SQL、次のように変換します。
| アプリ開発者 |
動的SQLクエリと Perl 変数を処理します。 | 動的SQLクエリは、アプリケーションランタイムに構築されるSQLステートメントです。これらのクエリは、アプリケーションのランタイムに特定の条件に応じて動的に構築されるため、特定の条件に依存するので、クエリの全文は実行時に把握できません。例としては、毎日上位 10 銘柄を分析する財務分析アプリケーションがあります。これらの株式は毎日変動します。SQL テーブルはトップパフォーマーに基づいて作成され、値はランタイムまでわかりません。 この例のインラインSQLクエリがラッパー関数に渡されて変数に結果セットを取得し、変数が条件を使用してテーブルが存在するかどうかを判断したとします。
可変処理の例を次に示します。このユースケースの SQL Server クエリと PostgreSQL クエリが続きます。
SQL サーバー:
Postgre SQL:
次の例では、インライン で Perl 変数を使用します。この変数はSQL、 を使用して SQL サーバー:
Postgre SQL:
| アプリ開発者 |
タスク | 説明 | 必要なスキル |
---|---|---|
追加のSQLサーバーコンストラクトを Postgre に変換しますSQL。 | 次の変更は、プログラミング言語にかかわらず、すべてのアプリケーションに適用されます。
| アプリ開発者 |
タスク | 説明 | 必要なスキル |
---|---|---|
AWS サービスを活用してパフォーマンスを強化します。 | AWS クラウドに移行すると、 AWSサービスを活用するためにアプリケーションとデータベースの設計を絞り込むことができます。例えば、Aurora Postgre SQL互換データベースサーバーに接続されている Python アプリケーションからのクエリが元の Microsoft SQL Server クエリよりも時間がかかる場合は、Aurora サーバーから Amazon Simple Storage Service (Amazon S3) バケットに直接履歴データのフィードを作成することを検討し、Amazon Athena ベースのSQLクエリを使用してユーザーダッシュボードのレポートと分析データクエリを生成できます。 | アプリ開発者、クラウドアーキテクト |
関連リソース
追加情報
Microsoft SQL Server と Aurora Postgre の両方SQL互換は ANSI SQL- 苦情です。ただし、Python または Perl アプリケーションを SQL Server から Postgre に移行する場合は、構文、列データ型、ネイティブデータベース固有の関数、一括挿入、大文字と小文字の区別に互換性がないことに注意してくださいSQL。
次のセクションでは、考えられる不一致について詳しく説明します。
データ型の比較
SQL Server から PostgreSQL へのデータ型の変更は、アプリケーションが動作する結果のデータに大きな違いをもたらす可能性があります。データ型の比較については、Sqlines ウェブサイト
ネイティブ関数または組み込みSQL関数
一部の関数の動作は、SQLServer データベースと PostgreSQL データベースによって異なります。次の表に例を示しています。
Microsoft SQL サーバー | 説明 | PostgreSQL |
---|---|---|
| 値を 1 つのデータ型から別のデータ型へ変換します。 | PostgreSQL |
| 現在のデータベースシステムの日付と時刻を |
|
| 日付に時刻/日付の間隔を追加します。 |
|
| 値を特定のデータ形式に変換します。 |
|
| 2 つの日付間の日数の差を返します。 |
|
|
|
|
匿名ブロック
構造化SQLクエリは、宣言、実行可能ファイル、例外処理などのセクションに編成されます。次の表は、単純な匿名ブロックの Microsoft SQL Server バージョンと PostgreSQL バージョンを比較しています。複雑な匿名ブロックの場合は、アプリケーション内でカスタムデータベース関数を呼び出すことをお勧めします。
Microsoft SQL サーバー | PostgreSQL |
---|---|
|
|
他の違い
my $sql_qry = "SELECT $record_id FROM $exampleTable WHERE LOWER($record_name) = \'failed transaction\'";
連結: SQLサーバーは文字列連結の演算子
+
として を使用し、PostgreSQL は を使用します||
。検証: Postgre のアプリケーションコードで使用する前に、インラインSQLクエリと関数をテストして検証する必要がありますSQL。
ORM ライブラリの包含: 既存のデータベース接続ライブラリを SQLAlchemy
や PynomoDB などの Python ORMライブラリに含めるか、置き換えることもできます。これにより、オブジェクト指向のパラダイムを使用して、データベースからデータを簡単にクエリして操作できるようになります。