Microsoft SQL Server から Amazon Aurora Postgre SQL互換エディションへのデータベース移行をサポートするように Python および Perl アプリケーションを変更する - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

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 ベースのアプリケーションの場合、データフレームを処理するために Pandaspsycopg2、データベース接続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 

移行アーキテクチャ

Perl または Python アプリケーションを SQL Server から Aurora Postgre に移行 SQL- 互換

ツール

AWS サービスとツール

  • Aurora Postgre SQL– Compatible Edition は、フルマネージド型の Postgre SQL互換ACIDのリレーショナルデータベースエンジンで、ハイエンドの商用データベースの速度と信頼性をオープンソースデータベースの費用対効果と組み合わせています。Aurora PostgreSQL は PostgreSQL のドロップイン代替品であり、新規および既存の PostgreSQL デプロイのセットアップ、運用、スケーリングをより簡単かつ費用対効果の高いものにします。

  • AWS コマンドラインインターフェイス (AWS CLI) は、コマンドラインシェルでコマンドを使用してAWSサービスとやり取りできるオープンソースツールです。

その他のツール

エピック

タスク説明必要なスキル

以下のコード変換手順に従って、アプリケーションを Postgre に移行しますSQL。

  1. Postgre のデータベース固有のODBCドライバーとライブラリを設定しますSQL。例えば、Perl と pyodbc psycopg2、または Python SQLAlchemyのCPANモジュールのいずれかを使用できます。

  2. これらのライブラリを使用してデータベースオブジェクトを変換し、Aurora Postgre SQL互換に接続します。

  3. 既存のアプリケーションモジュールでコード変更を適用して、互換性のある T SQLステートメントを取得します。

  4. データベース固有の関数呼び出しとストアドプロシージャをアプリケーションコードに書き換えます。

  5. インラインSQLクエリに使用されるアプリケーションの変数とそのデータ型の変更を処理します。

  6. 互換性のないデータベース固有の関数を処理します。

  7. データベース移行のために変換されたアプリケーションコードの完全な end-to-endテスト。

  8. Microsoft SQL Server の結果を Postgre に移行したアプリケーションと比較しますSQL。

  9. Microsoft SQL Server と Postgre の間でアプリケーションパフォーマンスのベンチマークを実行しますSQL。

  10. パフォーマンスを向上させるために、アプリケーションによって呼び出されるストアドプロシージャまたはインライン T SQLステートメントを改訂します。

以下のエピックでは、Python および Perl アプリケーションの変換タスクの一部について詳しく説明します。

アプリ開発者

移行の各ステップでチェックリストを使用します。

アプリケーション移行の各手順 (最終ステップを含む) のチェックリストに以下の項目を追加してください。

  • PostgreSQL ドキュメントを確認して、すべての変更が PostgreSQL 標準と互換性があることを確認します。

  • 列の整数値と浮動小数点値を確認します。 

  • 挿入、更新、抽出された行の数と、列名、日付/タイムスタンプを確認します。  差分ユーティリティを使用するか、スクリプトを作成してこれらのチェックを自動化します。

  • 大きなインラインSQLステートメントのパフォーマンスチェックを完了し、アプリケーション全体のパフォーマンスを確認します。

  • 複数の try/catch ブロックを使用して、データベース操作の正しいエラー処理や、プログラムの正常な終了を確認します。

  • ログ記録の処理が適切に行われていることを確認してください。 

アプリ開発者
タスク説明必要なスキル

既存の Python コードベースを分析します。

アプリケーションの移行プロセスを円滑に進めるため、以下の項目を分析に含める必要があります。

  • コード内の接続オブジェクトをすべて特定します。

  • 互換性のないインラインSQLクエリ (T SQLステートメントやストアドプロシージャなど) をすべて特定し、必要な変更を分析します。

  • コードのドキュメントを確認し、制御フローをトレースしてコードの機能を理解しましょう。これは、後でアプリケーションのパフォーマンステストや負荷を比較するときに役立ちます。

  • アプリケーションの目的を理解しておくと、データベース変換後に効果的にテストできます。  データベース移行による変換の候補となるほとんどの Python アプリケーションは、他のソースからデータベーステーブルにデータをロードするフィードか、テーブルからデータを取得し、レポートの作成や検証APIの実行に適したさまざまな出力形式 (CSV、JSON、フラットファイルなど) に変換するエクストラクターです。 

アプリ開発者

Postgre をサポートするようにデータベース接続を変換しますSQL。

ほとんどの Python アプリケーションは、次のように pyodbc ライブラリを使用して SQL Server データベースに接続します。

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))

データベース接続を PostgreSQL をサポートするように次のように変換します。

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))
アプリ開発者

インラインSQLクエリを Postgre に変更しますSQL。

インラインSQLクエリを Postgre SQL互換形式に変換します。例えば、次のSQLサーバークエリはテーブルから文字列を取得します。

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)

変換後、Postgre SQL互換のインラインSQLクエリは次のようになります。

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)
アプリ開発者

動的SQLクエリを処理します。

動的は、1 つのスクリプトまたは複数の Python スクリプトに存在するSQLことができます。前の例では、Python の文字列置換関数を使用して動的SQLクエリを構築するための変数を挿入する方法を示していました。別の方法として、該当する箇所に変数を使用してクエリ文字列を追加することもできます。 

次の例では、関数から返された値に基づいてクエリ文字列が作成されます。

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

このような動的クエリは、アプリケーションの移行中によく使用されます。以下のステップに従って、動的クエリの処理を行います。

  • 全体的な構文 (JOIN 句を含む SELECT ステートメントの構文など) をチェックします。

  • クエリで使用している変数や列名 (iid など) をすべて確認してください。

  • クエリで使用されている関数、引数、戻り値 (get_id_filter およびその引数 ids など) を確認します。

アプリ開発者

結果セット、変数、データフレームを処理します。

Microsoft SQL Server では、 fetchone() や などの Python メソッドfetchall()を使用して、データベースから結果セットを取得します。fetchmany(size) を使用して、結果セットから返されるレコードの数を指定することもできます。これを実行するには、次の例に示すように、pyodbc 接続オブジェクトを使用します。

pyodbc (Microsoft SQL サーバー)

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()

Aurora では、PostgreSQL への接続や結果セットの取得などの同様のタスクを実行するには、psycopg2 または を使用できますSQLAlchemy。これらの Python ライブラリは、次の例に示すように、PostgreSQL データベースレコードを通過する接続モジュールとカーソルオブジェクトを提供します。

psycopg2 (Aurora Postgre SQL互換)

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 (Aurora Postgre SQL互換)

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)
アプリ開発者

移行中や移行後にアプリケーションをテストします。

移行後の Python アプリケーションのテストは継続的なプロセスです。移行には、接続オブジェクトの変更 (psycopg2or SQLAlchemy)、エラー処理、新機能 (データフレーム)、インラインSQL変更、一括コピー機能 ( bcpではなくCOPY)、および同様の変更が含まれるため、アプリケーションの移行中および移行後に慎重にテストする必要があります。以下の項目を確認してください。

  • エラー条件と処理 

  • 移行後のレコードの不一致

  • レコードの更新または削除

  • アプリケーション実行の所要時間 

アプリ開発者
タスク説明必要なスキル

既存の Perl コードベースを分析します。

アプリケーションの移行プロセスを円滑に進めるため、以下の項目を分析に含める必要があります。以下の項目を特定する必要があります。

  • INI または設定ベースのコード

  • データベース固有の標準 Open Database Connectivity (ODBC) Perl ドライバーまたはカスタマイズされたドライバー

  • インラインクエリと T-SQL クエリに必要なコード変更

  • さまざまな Perl モジュール間のインタラクション (例えば、複数の機能コンポーネントによって呼び出されるか使用される単一の Perl ODBC接続オブジェクト)

  • データセットと結果セットの処理

  • 外部の依存 Perl ライブラリ

  • アプリケーションでAPIs使用されているもの

  • Perl バージョンの互換性とドライバーの Aurora Postgre との互換性 SQL- 互換

アプリ開発者

Postgre をサポートするように、Perl アプリケーションとDBIモジュールから接続を変換しますSQL。

Perl ベースのアプリケーションは通常、Perl DBIプログラミング言語の標準データベースアクセスモジュールである Perl モジュールを使用します。SQL Server と Postgre の異なるドライバーで同じDBIモジュールを使用できますSQL。

必要な Perl モジュール、インストール、およびその他の手順の詳細については、DBD::Pg ドキュメント を参照してください。次の例では、 で Aurora Postgre SQL互換に接続します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} );
アプリ開発者

インラインSQLクエリを Postgre に変更しますSQL。

アプリケーションにはSELECT、PostgreSQL がサポートしていないSQLクエリ句を含む、DELETEUPDATE、、および同様のステートメントを含むインラインクエリがある場合があります。例えば、 TOPや などのクエリキーワードNOLOCKは Postgre ではサポートされていませんSQL。次の例では、TOPNOLOCK、およびブール型変数の処理方法を示しています。

SQL サーバー:

$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)

Postgre の場合SQL、次のように変換します。

$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)"
アプリ開発者

動的SQLクエリと Perl 変数を処理します。

動的SQLクエリは、アプリケーションランタイムに構築されるSQLステートメントです。これらのクエリは、アプリケーションのランタイムに特定の条件に応じて動的に構築されるため、特定の条件に依存するので、クエリの全文は実行時に把握できません。例としては、毎日上位 10 銘柄を分析する財務分析アプリケーションがあります。これらの株式は毎日変動します。SQL テーブルはトップパフォーマーに基づいて作成され、値はランタイムまでわかりません。

この例のインラインSQLクエリがラッパー関数に渡されて変数に結果セットを取得し、変数が条件を使用してテーブルが存在するかどうかを判断したとします。

  • テーブルが存在する場合は作成せずに、何らかの処理を行ってください。

  • テーブルが存在していない場合は、テーブルを作成し、処理を行います。

可変処理の例を次に示します。このユースケースの SQL Server クエリと PostgreSQL クエリが続きます。

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 }

SQL サーバー:

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

Postgre SQL:

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

次の例では、インライン で Perl 変数を使用します。この変数はSQL、 を使用してSELECTステートメントを実行して、テーブルのプライマリキーとキー列の位置JOINを取得します。

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

Postgre SQL:

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' ;";
アプリ開発者
タスク説明必要なスキル

追加のSQLサーバーコンストラクトを Postgre に変換しますSQL。

次の変更は、プログラミング言語にかかわらず、すべてのアプリケーションに適用されます。

  • アプリケーションが使用するデータベースオブジェクトを、新しい適切なスキーマ名で修飾します。

  • Postgre の照合機能とSQL大文字と小文字を区別して一致するLIKE演算子を処理します。

  • DATEDIFFDATEADDGETDATECONVERTCAST 演算子など、サポートされていないデータベース固有の関数を処理します。同等の Postgre SQL互換関数については、「追加情報」セクションの「ネイティブ関数または組み込みSQL関数」を参照してください。 

  • 比較ステートメントのブール値を処理します。

  • 関数からの戻り値を処理します。レコードセット、データフレーム、変数、ブール値などが該当します。  Postgre をサポートするために、アプリケーションの要件に従ってこれらを処理しますSQL。

  • ユーザー定義の新しい PostgreSQL 関数を使用して、匿名ブロック ( などBEGIN TRAN) を処理します。

  • 行の一括挿入を変換します。アプリケーション内から呼び出されるSQLサーバー一括コピー (bcp) ユーティリティに相当する PostgreSQL は ですCOPY

  • 列の連結演算子を変換します。SQL サーバーは文字列連結+に を使用しますが、PostgreSQL は を使用します||

アプリ開発者
タスク説明必要なスキル

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

CAST 

値を 1 つのデータ型から別のデータ型へ変換します。

PostgreSQL type :: operator

GETDATE()

現在のデータベースシステムの日付と時刻を YYYY-MM-DD hh:mm:ss.mmm 形式で返します。

CLOCK_TIMESTAMP

DATEADD

日付に時刻/日付の間隔を追加します。 

INTERVAL expression

CONVERT

値を特定のデータ形式に変換します。

TO_CHAR

DATEDIFF

2 つの日付間の日数の差を返します。

DATE_PART

TOP

SELECT 結果セットの行数を制限します。

LIMIT/FETCH

匿名ブロック

構造化SQLクエリは、宣言、実行可能ファイル、例外処理などのセクションに編成されます。次の表は、単純な匿名ブロックの Microsoft SQL Server バージョンと PostgreSQL バージョンを比較しています。複雑な匿名ブロックの場合は、アプリケーション内でカスタムデータベース関数を呼び出すことをお勧めします。 

Microsoft SQL サーバー

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

 

他の違い

  • 行の一括挿入: Microsoft Server bcp ユーティリティと同等の PostgreSQL は ですCOPY SQL

  • 大文字と小文字の区別: Postgre では列名は大文字と小文字が区別されるためSQL、SQLサーバー列名を小文字または大文字に変換する必要があります。これは、データを抽出または比較したり、結果セットや変数に列名を入力するときの要因になります。次の例では、値を大文字または小文字で保存できる列を表示しています。

my $sql_qry = "SELECT $record_id FROM $exampleTable WHERE LOWER($record_name) = \'failed transaction\'";
  • 連結: SQLサーバーは文字列連結の演算子+として を使用し、PostgreSQL は を使用します||

  • 検証: Postgre のアプリケーションコードで使用する前に、インラインSQLクエリと関数をテストして検証する必要がありますSQL。

  • ORM ライブラリの包含: 既存のデータベース接続ライブラリを SQLAlchemyPynomoDB などの Python ORMライブラリに含めるか、置き換えることもできます。これにより、オブジェクト指向のパラダイムを使用して、データベースからデータを簡単にクエリして操作できるようになります。