を使用したSQLサーバーから PostgreSQL への移行 AWS Schema Conversion Tool - AWS Schema Conversion Tool

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

を使用したSQLサーバーから PostgreSQL への移行 AWS Schema Conversion Tool

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

ターゲットデータベースとしての PostgreSQL の権限

PostgreSQL をターゲットとして使用するには、 CREATE ON DATABASE 権限 AWS SCT が必要です。ターゲット PostgreSQL データベースごとにこの権限を付与してください。

変換されたパブリックシノニムを使用するには、データベースのデフォルト検索パスを "$user", public_synonyms, public に変更します。

次のコード例を使用してデータベースユーザーを作成し、権限を付与できます。

CREATE ROLE user_name LOGIN PASSWORD 'your_password'; GRANT CREATE ON DATABASE db_name TO user_name; ALTER DATABASE db_name SET SEARCH_PATH = "$user", public_synonyms, public;

前の例では、user_name ユーザーの名前を入力します。次に、db_name ターゲットデータベースの名前。最後に、your_password 安全なパスワードを使用します。

Postgre ではSQL、スキーマ所有者または のみがスキーマを削除superuserできます。スキーマ所有者が一部のオブジェクトを所有していない場合でも、スキーマとスキーマに含まれるすべてのオブジェクトを削除できます。

異なるユーザーを使用して異なるスキーマを変換し、ターゲットデータベースに適用すると、 AWS SCT がスキーマを削除できない場合にエラーメッセージが表示されることがあります。このエラーメッセージを回避するには、superuser ロールを使用してください。

SQL サーバーから PostgreSQL への変換設定

SQL サーバーから PostgreSQL への変換設定を編集するには、設定 を選択し、変換設定 を選択します。上部のリストからサーバー SQL を選択し、SQLサーバー – Postgre を選択しますSQL。 AWS SCT はSQL、サーバーから PostgreSQL への変換に使用できるすべての設定を表示します。

SQL のサーバーから PostgreSQL への変換設定 AWS SCT には、以下のオプションが含まれています。

  • 変換されたコード内のアクション項目に関するコメントの数を制限する。

    選択した重要度以上のアクションアイテムの変換されたコードにコメントを追加する で、アクションアイテムの重要度を選択します。選択した重要度以上のアクションアイテムの変換されたコードにコメント AWS SCT を追加します。

    たとえば、変換したコード内のコメントの数を最小限に抑えるには、[エラーのみ] を選択します。変換したコードのすべてのアクション項目にコメントを含めるには、[すべてのメッセージ] を選択します。

  • が SQL Server の異なるテーブルで同じ名前のインデックスを使用できるようにするには。

    Postgre ではSQL、スキーマで使用するすべてのインデックス名は一意である必要があります。がすべてのインデックスに一意の名前 AWS SCT を生成するようにするには、「インデックスに一意の名前を生成する」を選択します。

  • SQL サーバープロシージャを PostgreSQL 関数に変換するには。

    PostgreSQL バージョン 10 以前では、プロシージャはサポートされていません。Postgre でのプロシージャの使用に慣れていないお客様はSQL、プロシージャを 関数に変換 AWS SCT できます。このためには、[プロシージャを関数に変換] を選択します。

  • EXEC の出力をテーブルでエミュレートする。

    ソースSQLサーバーデータベースは、 の出力をEXECテーブルに保存できます。 は、一時テーブルと、この機能をエミュレートする追加の手順 AWS SCT を作成します。このエミュレーションを使用するには、[オープンデータセットを処理するための追加ルーチンを作成する] を選択します。

  • 変換されるコード内のスキーマ名に使用するテンプレートを定義する。[スキーマ名生成テンプレート] では、次のオプションのいずれかを選択します。

    • <source_db> – Postgre のスキーマ名としてSQLサーバーデータベース名を使用しますSQL。

    • <source_schema> – Postgre のスキーマ名としてSQLサーバースキーマ名を使用しますSQL。

    • <source_db>_<schema> – Postgre のスキーマ名としてSQLサーバーデータベース名とスキーマ名の組み合わせを使用しますSQL。

  • ソースオブジェクト名の大文字と小文字を維持する。

    オブジェクト名が小文字に変換されないようにするには、[大文字と小文字を区別する操作では小文字へのキャストを避ける] を選択します。このオプションは、ターゲットデータベースで大文字と小文字の区別オプションをオンにした場合にのみ適用されます。

  • ソースデータベースのパラメータ名をそのまま使用する。

    変換されたコード内のパラメータ名に二重引用符を追加するには、[元のパラメータ名を保持] を選択します。

SQL サーバーパーティションを PostgreSQL バージョン 10 パーティションに変換する

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

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

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

  • SQL サーバーでは、パーティションテーブルのプライマリキーと一意のキーを作成できます。Postgre ではSQL、パーティションごとにプライマリキーまたは一意のキーを直接作成します。したがって、Postgre に移行するときは、親テーブルから PRIMARYまたは UNIQUEKEY制約を削除する必要がありますSQL。生成されたキー名は <original_key_name>_<partition_number> の形式です。

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

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

  • PostgreSQL はパーティション化されたインデックスをサポートしていません。

移行に関する考慮事項

SQL サーバースキーマを Postgre に移行するときに考慮すべき点は次のとおりですSQL。

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

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

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

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

    SQL サーバーGOTOステートメントと変換された PostgreSQL ステートメント
    SQL サーバーステートメント Postgre SQLステートメント
    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 statement をサポートしていません。 は、次の方法でMERGEステートメントの動作を AWS SCT エミュレートします。

    • INSERT ON CONFLICT構造による。

    • WHEN NOT MATCHED MERGE 句を使用しない場合など、 UPDATEFROMDMLステートメントを使用します。

    • with DELETEMERGE句を使用するCURSOR、または複雑な MERGE ON 条件ステートメントを使用するなど、 を使用します。

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

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

  • SQL サーバーは、 テーブルと insertedテーブルを自動的に作成deletedおよび管理します。これらの一時的なメモリ常駐テーブルを使用して、特定のデータ変更の影響をテストし、DMLトリガーアクションの条件を設定できます。 はDML、トリガーステートメント内でこれらのテーブルの使用を変換 AWS SCT できます。

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

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

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

    • SUSER_SNAME(<server_user_sid>) – サポートされていません。

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

    • SUSER_SNAME(NULL) – を返しますNULL。

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

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

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

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

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

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