SQL Server から PostgreSQL への変換 - AWS Schema Conversion Tool

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

SQL Server から PostgreSQL への変換

SQL Server から PostgreSQL への拡張パックをAWS SCT。この拡張パックは、変換された PostgreSQL コードの SQL Server データベース関数をエミュレートします。SQL Server から PostgreSQL への拡張パックを使用して、SQL Server エージェントと SQL Server データベースメールをエミュレートします。拡張パックの詳細については、「」を参照してください。を使用するAWS SCT拡張パック

Microsoft SQL サーバーデータベースを Amazon Aurora PostgreSQL 互換エディション (Aurora PostgreSQL) または PostgreSQL 用 Amazon Relational Database Service (Amazon RDS for PostgreSQL) に変換する場合は、次の点に注意してください。

SQL Server パーティションから PostgreSQL バージョン 10 パーティションへの変換

SQL Server で、パーティション関数を持つパーティションを作成します。SQL Server の一部のテーブルから PostgreSQL バージョン 10 のパーティション分割テーブルに変換する際は、いくつか潜在的な問題があることに注意してください。

  • SQL Server では、NOT NULL 制約を使用しない列を使用してテーブルをパーティション分割できます。この場合、すべての NULL 値は左端のパーティションに移動されます。PostgreSQL は RANGE パーティションの NULL 値をサポートしていません。

  • SQL Server では、パーティション分割されたテーブルでプライマリキーや固有キーを作成できます。PostgreSQL の場合、プライマリーキーや固有キーをパーティションごと直接作成します。したがって、PostgreSQL への移行時に親テーブルから PRIMARY または UNIQUE KEY 制約を削除する必要があります。生成されたキー名は以下の形式です。<original_key_name>_<partition_number>

  • SQL Server では、パーティション分割されたテーブルから、またはテーブルに、外部キー制約を作成できます。PostgreSQL はパーティション分割されたテーブルを参照する外部キーをサポートしていません。また、PostgreSQL は分割されたテーブルから別のテーブルへの外部キーの参照をサポートしていません。

  • SQL Server では、パーティション分割されたテーブルでインデックスを作成できます。PostgreSQL の場合、パーティションごとにインデックスを直接作成する必要があります。したがって、インデックスは PostgreSQL への移行時に親テーブルから削除する必要があります。生成されたインデックス名は <original_index_name>_<partition_number> の形式です。

  • PostgreSQL ではパーティション分割されたインデックスがサポートされていません。

移行に関する考慮事項

SQL Server スキーマを PostgreSQL に移行する際は以下の点を考慮してください。

  • PostgreSQL では、スキーマ内のすべてのオブジェクト名は、インデックスを含めて一意である必要があります。インデックス名は、ベーステーブルのスキーマで一意である必要があります。SQL Server では、異なるテーブルでは同じインデックス名を使用できます。

    インデックス名の一意性を確保するために、AWS SCT は、インデックス名が一意ではない場合に一意のインデックスを生成するオプションを提供します。これを行うには、プロジェクトのプロパティで一意のインデックス名を生成するオプションを選択します。デフォルトでは、この機能は有効になっています。このオプションが有効になっている場合、一意のインデックス名が IX_table_name_index_name 形式を使用して作成されます。このオプションが無効になっている場合、インデックス名は変更されません。

  • GOTO ステートメントとラベルを使用して、ステートメントを実行する順序を変更できます。GOTO ステートメントに続くすべての Transact-SQL ステートメントはスキップされ、ラベルで処理が継続されます。GOTO ステートメントとラベルはプロシージャ、バッチ、またはステートメントブロックの任意の場所で使用できます。GOTO ステートメントをネストすることもできます。

    PostgreSQL は GOTO ステートメントを使用しません。AWS SCT が GOTO ステートメントが含まれるコードを変換する場合、ステートメントは BEGIN...END または LOOP...END LOOP ステートメントを使用するように変換されます。次の表は、AWS SCT が GOTO ステートメントを変換する方法の一例です。

    SQL Server の GOTO ステートメントと、変換された PostgreSQL ステートメント
    SQL Server ステートメント PostgreSQL ステートメント
    BEGIN .... statement1; .... GOTO label1; statement2; .... label1: Statement3; .... END
    BEGIN label1: BEGIN .... statement1; .... EXIT label1; statement2; .... END; Statement3; .... END
    BEGIN .... statement1; .... label1: statement2; .... GOTO label1; statement3; .... statement4; .... END
    BEGIN .... statement1; .... label1: LOOP statement2; .... CONTINUE label1; EXIT label1; END LOOP; statement3; .... statement4; .... END
    BEGIN .... statement1; .... label1: statement2; .... statement3; .... statement4; .... END
    BEGIN .... statement1; .... label1: BEGIN statement2; .... statement3; .... statement4; .... END; END
  • PostgreSQL は MERGE ステートメントをサポートしていません。AWS SCT は MERGE ステートメントの動作を次の方法でエミュレートします。

    • INSERT の ON CONFLICT 句。

    • UPDATE FROM DML ステートメント (例: WHEN NOT MATCHED 句を指定しない MERGE)。

    • CURSOR (例: DELETE 句を指定した MERGE)、または複雑な MERGE ON 条件ステートメント。

  • AWS SCT は Amazon RDS がターゲットの場合にデータベーストリガーをオブジェクトツリーに追加できます。

  • AWS SCT は Amazon RDS がターゲットの場合にサーバーレベルトリガーをオブジェクトツリーに追加できます。

  • AWS SCT は Amazon RDS がターゲットの場合にリンクサーバーをオブジェクトツリーに追加できます。

  • Microsoft SQL Server から PostgreSQL に移行する場合、組み込み SUSER_SNAME 関数は次のように変換されます。

    • SUSER_SNAME - セキュリティ識別番号 (SID) に関連付けられたログイン名を返します。

    • SUSER_SNAME(<server_user_sid>) – サポート外です。

    • SUSER_SNAME() CURRENT_USER – 現在の実行コンテキストのユーザー名を返します。

    • SUSER_SNAME(NULL) – NULL が返されます。

  • テーブル値関数の変換がサポートされています。テーブル値関数はテーブルを返し、クエリ内のテーブルに代わることができます。

  • PATINDEX は、すべての有効なテキストおよび文字データ型で指定された式でパターンが最初に出現する開始位置を返します。パターンが見つからない場合は、ゼロを返します。SQL Server から Amazon RDS for PostgreSQL に変換する場合、AWS SCT は PATINDEX を使用するアプリケーションコードを、aws_sqlserver_ext.patindex (<パターン文字>、<可変の式の文字>) に置き換えます。

  • SQL Server では、ユーザー定義のテーブルタイプは、テーブル構造の定義を表すタイプです。ユーザー定義のテーブル型を使用して、ストアドプロシージャまたは関数のテーブル値パラメータを宣言します。また、ユーザー定義テーブル型を使用して、バッチまたはストアドプロシージャまたは関数の本体で使用するテーブル変数を宣言することもできます。AWS SCT は一時テーブルを作成することで PostgreSQL 内のこの型をエミュレートします。

AWS SCT は、SQL Server から PostgreSQL に変換するときに、SQL Server システムオブジェクトを PostgreSQL で認識可能なオブジェクトに変換します。次の表に、システムオブジェクトの変換方法を示します。

MS SQL Server ユースケース PostgreSQL の置換

SYS.SCHEMAS

AWS_SQLSERVER_EXT.SYS_SCHEMAS

SYS.TABLES

AWS_SQLSERVER_EXT.SYS_TABLES

SYS.VIEWS

AWS_SQLSERVER_EXT.SYS_VIEWS

SYS.ALL_VIEWS

AWS_SQLSERVER_EXT.SYS_ALL_VIEWS

SYS.TYPES

AWS_SQLSERVER_EXT.SYS_TYPES

SYS.COLUMNS

AWS_SQLSERVER_EXT.SYS_COLUMNS

SYS.ALL_COLUMNS

AWS_SQLSERVER_EXT.SYS_ALL_COLUMNS

SYS.FOREIGN_KEYS

AWS_SQLSERVER_EXT.SYS_FOREIGN_KEYS

SYS.SYSFOREIGNKEYS

AWS_SQLSERVER_EXT.SYS_SYSFOREIGNKEYS

SYS.FOREIGN_KEY_COLUMNS

AWS_SQLSERVER_EXT.SYS_FOREIGN_KEY_COLUMNS

SYS.KEY_CONSTRAINTS

AWS_SQLSERVER_EXT.SYS_KEY_CONSTRAINTS

SYS.IDENTITY_COLUMNS

AWS_SQLSERVER_EXT.SYS_IDENTITY_COLUMNS

SYS.PROCEDURES

AWS_SQLSERVER_EXT.SYS_PROCEDURES

SYS.INDEXES

AWS_SQLSERVER_EXT.SYS_INDEXES

SYS.SYSINDEXES

AWS_SQLSERVER_EXT.SYS_SYSINDEXES

SYS.OBJECTS

AWS_SQLSERVER_EXT.SYS_OBJECTS

SYS.ALL_OBJECTS

AWS_SQLSERVER_EXT.SYS_ALL_OBJECTS

SYS.SYSOBJECTS

AWS_SQLSERVER_EXT.SYS_SYSOBJECTS

SYS.SQL_MODULES

AWS_SQLSERVER_EXT.SYS_SQL_MODULES

SYS.DATABASES

AWS_SQLSERVER_EXT.SYS_DATABASES

INFORMATION_SCHEMA.SCHEMATA

AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_SCHEMATA

INFORMATION_SCHEMA.VIEWS

AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_VIEWS

INFORMATION_SCHEMA.TABLES

AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_TABLES

INFORMATION_SCHEMA.COLUMNS

AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_COLUMNS

INFORMATION_SCHEMA.CHECK_CONSTRAINTS

AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_CHECK_CONSTRAINTS

INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS

AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_REFERENTIAL_CONSTRAINTS

INFORMATION_SCHEMA.TABLE_CONSTRAINTS

AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_TABLE_CONSTRAINTS

INFORMATION_SCHEMA.KEY_COLUMN_USAGE

AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_KEY_COLUMN_USAGE

INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE

AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_CONSTRAINT_TABLE_USAGE

INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE

AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_CONSTRAINT_COLUMN_USAGE

INFORMATION_SCHEMA.ROUTINES

AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_ROUTINES

SYS.SYSPROCESSES

AWS_SQLSERVER_EXT.SYS_SYSPROCESSES

sys.system_objects

AWS_SQLSERVER_EXT.SYS_SYSTEM_OBJECTS