標準テーブルから無制限テーブルへの変換
標準テーブルをシャードテーブルまたはリファレンステーブルに変換できます。変換中、データは標準テーブルから分散テーブルに移動され、ソースの標準テーブルは削除されます。データは INSERT INTO SELECT FROM
コマンドを使用して移動されます。
シャードテーブルの作成
シャードテーブルを作成するには、標準テーブルで rds_aurora.limitless_alter_table_type_sharded
プロシージャを実行します。このプロシージャでは、標準テーブルと列のリストを取得し、その列のリストをシャードキーとして使用して、指定されたテーブルを分散します。プロシージャは同期的に実行され、テーブルの ACCESS EXCLUSIVE
ロックを取得します。
プロシージャが正常に終了すると、ソースの標準テーブルが削除され、同じ名前のシャードテーブルが使用可能になります。
rds_aurora.limitless_alter_table_type_sharded
プロシージャでは次の構文を使用します。
postgres=>
CALL rds_aurora.limitless_alter_table_type_sharded('schema
.table
', ARRAY['shard_key1
', 'shard_key2
', ... 'shard_keyn
']);
このプロシージャには以下のパラメータが必要です。
-
schema
– シャーディングするテーブルを含むデータベーススキーマ。スキーマが指定されていない場合、プロシージャはsearch_path
を使用します。 -
table
- シャーディングするテーブル。 -
shard_keyn
– シャードキーとして使用するテーブル列の配列。シャードキー値は文字列リテラルであるため、大文字と小文字が区別されます。シャードキーに一重引用符 (') が含まれている場合は、別の一重引用符を使用してエスケープします。例えば、テーブル列の名前が
customer's id
の場合、シャードキーとしてcustomer''s id
を使用します。バックスラッシュ (\) と二重引用符 (") はエスケープする必要はありません。
注記
すべてのプライマリキーと一意のキーには、シャードキーが含まれている必要があります。つまり、シャードキーはプライマリキーまたは一意のキーのサブセットです。
シャードテーブルでは、CHECK
制約は式をサポートしていません。
詳細については、「制約」を参照してください。
シャードテーブルを作成するには
次の例は、シャードキー customer
を使用してシャードテーブル customer_id
を作成する方法を示しています。
-
標準テーブルを作成します。
CREATE TABLE customer (customer_id INT PRIMARY KEY NOT NULL, zipcode INT, email VARCHAR);
-
標準テーブルをシャードテーブルに変換します。
postgres=>
CALL rds_aurora.limitless_alter_table_type_sharded('public.customer', ARRAY['customer_id']);postgres=>
\d List of relations Schema | Name | Type | Owner --------+--------------+-------------------+-------------------- public | customer | partitioned table | postgres_limitless public | customer_fs1 | foreign table | postgres_limitless public | customer_fs2 | foreign table | postgres_limitless public | customer_fs3 | foreign table | postgres_limitless public | customer_fs4 | foreign table | postgres_limitless public | customer_fs5 | foreign table | postgres_limitless (6 rows)
コロケーションテーブルの作成
同じシャードキーを使用して 2 つ以上のテーブルがシャードされている場合は、それらのテーブルを明示的に整列 (コロケーション) できます。2 つ以上のテーブルがコロケーションされると、同じシャードキー値を持つテーブルの行が同じシャードに配置されます。コロケーションは、一部のオペレーションを単一のシャードに制限するのに役立ちます。これにより、パフォーマンスが向上します。
次の構文で rds_aurora.limitless_alter_table_type_sharded
プロシージャを使用します。
postgres=>
CALL rds_aurora.limitless_alter_table_type_sharded('schema
.collocated_table
', ARRAY['shard_key1
', 'shard_key2
', ... 'shard_keyn
'], 'schema
.sharded_table
');
このプロシージャには以下のパラメータが必要です。
-
schema
– コロケーションするテーブルを含むデータベーススキーマ。スキーマが指定されていない場合、プロシージャはsearch_path
を使用します。 -
collocated_table
– コロケーションするテーブル。 -
shard_keyn
– シャードキーとして使用するテーブル列の配列。元のシャードテーブルと同じシャードキーを使用する必要があります。これには、同じ列名と列タイプが含まれます。
-
sharded_table
–collocated_table
をコロケーションするシャードテーブル。
コロケーションテーブルを作成するには
-
「シャードテーブルの作成」の手順に従って、最初のシャードテーブルを作成します。
-
コロケーションテーブルの標準テーブルを作成します。
CREATE TABLE mytable2 (customer_id INT PRIMARY KEY NOT NULL, column1 INT, column2 VARCHAR);
-
標準テーブルをコロケーションテーブルに変換します。
postgres=>
CALL rds_aurora.limitless_alter_table_type_sharded('public.mytable2', ARRAY['customer_id'], 'public.customer');postgres=>
\d List of relations Schema | Name | Type | Owner --------+--------------+-------------------+-------------------- public | customer | partitioned table | postgres_limitless public | customer_fs1 | foreign table | postgres_limitless public | customer_fs2 | foreign table | postgres_limitless public | customer_fs3 | foreign table | postgres_limitless public | customer_fs4 | foreign table | postgres_limitless public | customer_fs5 | foreign table | postgres_limitless public | mytable2 | partitioned table | postgres_limitless public | mytable2_fs1 | foreign table | postgres_limitless public | mytable2_fs2 | foreign table | postgres_limitless public | mytable2_fs3 | foreign table | postgres_limitless public | mytable2_fs4 | foreign table | postgres_limitless public | mytable2_fs5 | foreign table | postgres_limitless (12 rows)
リファレンステーブルの作成
リファレンステーブルを作成するには、標準テーブルで rds_aurora.limitless_alter_table_type_reference
プロシージャを実行します。このプロシージャでは、特定のテーブルを DB シャードグループ内のすべてのシャードにレプリケートし、テーブルタイプをリファレンスに変更します。プロシージャは同期的に実行され、テーブルの ACCESS EXCLUSIVE
ロックを取得します。
プロシージャが正常に終了すると、ソースの標準テーブルが削除され、同じ名前のリファレンステーブルが使用可能になります。
rds_aurora.limitless_alter_table_type_reference
プロシージャでは次の構文を使用します。
postgres=>
CALL rds_aurora.limitless_alter_table_type_reference('schema
.table
');
ストアドプロシージャには、次のパラメータが必要です。
-
schema
– レプリケートするテーブルを含むデータベーススキーマ。スキーマが指定されていない場合、プロシージャはsearch_path
を使用します。 -
table
– レプリケートするテーブル。
注記
リファレンステーブルを作成する元の標準テーブルには、プライマリキーが必要です。
リファレンステーブルでは、CHECK
制約は式をサポートしていません。
前の関数 limitless_table_alter_type_reference
は廃止されました。
リファレンステーブルを作成するには
次の例は、リファレンステーブル zipcodes
の作成方法を示しています。
-
標準テーブルを作成します。
CREATE TABLE zipcodes (zipcode INT PRIMARY KEY, details VARCHAR);
-
標準テーブルをリファレンステーブルに変換します。
CALL rds_aurora.limitless_alter_table_type_reference('public.zipcodes');
postgres=>
\d List of relations Schema | Name | Type | Owner --------+--------------+-------------------+-------------------- public | customer | partitioned table | postgres_limitless public | customer_fs1 | foreign table | postgres_limitless public | customer_fs2 | foreign table | postgres_limitless public | customer_fs3 | foreign table | postgres_limitless public | customer_fs4 | foreign table | postgres_limitless public | customer_fs5 | foreign table | postgres_limitless public | zipcodes | foreign table | postgres_limitless (7 rows)出力には、シャードテーブル
customer
とリファレンステーブルzipcodes
が表示されます。