View a markdown version of this page

ALTER TABLE - Amazon Aurora DSQL

ALTER TABLE

ALTER TABLE は、テーブルの定義を変更します。

サポートされている構文

ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ] action [, ... ] ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ] RENAME [ COLUMN ] column_name TO new_column_name ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ] RENAME CONSTRAINT constraint_name TO new_constraint_name ALTER TABLE [ IF EXISTS ] name RENAME TO new_name ALTER TABLE [ IF EXISTS ] name SET SCHEMA new_schema ALTER TABLE ASYNC [ IF EXISTS ] [ ONLY ] name [ * ] VALIDATE CONSTRAINT constraint_name where action is one of: ADD [ COLUMN ] [ IF NOT EXISTS ] column_name data_type [ STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT } ] DROP [ COLUMN ] [ IF EXISTS ] column_name [ RESTRICT | CASCADE ] ALTER [ COLUMN ] column_name SET DEFAULT expression ALTER [ COLUMN ] column_name DROP DEFAULT ALTER [ COLUMN ] column_name DROP NOT NULL ALTER [ COLUMN ] column_name DROP EXPRESSION [ IF EXISTS ] ALTER [ COLUMN ] column_name ADD GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( sequence_options ) ] ALTER [ COLUMN ] column_name { SET GENERATED { ALWAYS | BY DEFAULT } | SET sequence_option | RESTART [ [ WITH ] restart ] } [...] ALTER [ COLUMN ] column_name DROP IDENTITY [ IF EXISTS ] ALTER [ COLUMN ] column_name SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT } ADD table_constraint NOT VALID ADD table_constraint_using_index DROP CONSTRAINT [ IF EXISTS ] constraint_name [ RESTRICT | CASCADE ] OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER } and table_constraint is: [ CONSTRAINT constraint_name ] CHECK ( expression ) and table_constraint_using_index is: [ CONSTRAINT constraint_name ] UNIQUE USING INDEX index_name

説明

ADD [ COLUMN ] [ IF NOT EXISTS ]

このフォームは、CREATE TABLE と同じ構文を使用して、テーブルに新しい列を追加します。IF NOT EXISTS が指定されていて、この名前の列が既に存在する場合、エラーはスローされません。

DROP [ COLUMN ] [ IF EXISTS ]

このフォームは、テーブルから列を削除します。列に関連するインデックスとテーブルの制約は、プライマリキーの制約を除き、自動的に削除されます。プライマリキー列の削除はサポートされていません。削除された列を参照する多変量統計は、列の削除により統計に単一の列のデータしか含まれなくなる場合には削除されます。外部キーの参照やビューなど、テーブル外の何かが列に依存している場合は、CASCADE を指定する必要があります。IF EXISTS が指定されていて、列が存在しない場合、エラーはスローされません。この場合、代わりに通知が発行されます。

SET/DROP DEFAULT

これらのフォームは、列のデフォルト値を設定または削除します (削除はデフォルト値を NULL に設定するのと同等です)。新しいデフォルト値は、後続の INSERT または UPDATE コマンドにのみ適用され、テーブルに既にある行は変更されません。

DROP NOT NULL

このフォームでは、null 値を許可するように列を変更します。

DROP EXPRESSION [ IF EXISTS ]

このフォームは、保存された生成列を通常のベース列に変換します。列内の既存のデータは保持されますが、今後の変更には生成式が適用されなくなります。DROP EXPRESSION IF EXISTS が指定されていて、列が生成された列でない場合、エラーはスローされません。この場合、代わりに通知が発行されます。

ADD GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY
SET GENERATED { ALWAYS | BY DEFAULT }
DROP IDENTITY [ IF EXISTS ]

これらのフォームは、列が ID 列であるかどうかを変更したり、既存の ID 列の生成属性を変更したりします。詳細については、「CREATE TABLE」を参照してください。SET DEFAULT と同様に、これらの形式は後続の INSERT コマンドと UPDATE コマンドの動作にのみ影響します。テーブル内の既存の行が変更されることはありません。

sequence_option は、INCREMENT BY などの ALTER SEQUENCE でサポートされるオプションです。これらのフォームは、既存の ID 列の基盤となるシーケンスを変更します。

注記

Amazon Aurora DSQL では、ADD GENERATED AS IDENTITY を使用するときに明示的な CACHE 値が必要です。さらに、ID 列は bigint 列でのみサポートされています。

ID 列を使用する場合は、キャッシュ値を慎重に検討する必要があります。詳細については、「CREATE SEQUENCE」ページの重要なコールアウトを参照してください。

ワークロードパターンに基づいて ID 列を使用する最適な方法のガイダンスについては、「シーケンスと ID 列の使用」を参照してください。

SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT }

このフォームは、列のストレージモードを設定します。使用可能なストレージモードの詳細については、CREATE TABLE ページの「ストレージモード」を参照してください。

ADD table_constraint NOT VALID

このフォームは、テーブルに新しい CHECK 制約を追加します。Aurora DSQL では、ALTER TABLE ADD CONSTRAINT を介して追加された CHECK 制約は NOT VALID オプションを使用する必要があります。Aurora DSQL は制約を作成しますが、既存のデータに対してすぐに検証は行いません。これにより、テーブル全体をスキャンせずに制約を追加できます。この制約は、すべての新しい行と更新にすぐに適用されます。

NOT VALID で制約を追加した後、ALTER TABLE ASYNC ... VALIDATE CONSTRAINT を使用して、既存のデータも制約を満たしていることを確認します。検証は非同期 DDL ジョブとして実行されます。sys.jobs を使用して進捗状況をモニタリングできます。

ADD table_constraint_using_index

このフォームは、既存の一意のインデックスに基づいてテーブルに新しい UNIQUE 制約を追加します。インデックスのすべての列が制約に含まれます。

インデックスは VALID 状態である必要があります。インデックスが現在構築中である場合、そのインデックスを使用して一意の制約を追加することはサポートされていません。

制約名を指定すると、制約名と一致するようにインデックス名が変更されます。指定しない場合、制約はインデックスと同じ名前になります。

このコマンドを実行すると、インデックスは通常の CREATE UNIQUE INDEX ASYNC コマンドで構築した場合と同じ方法で、制約によって「所有」されます。特に、制約を削除すると、インデックスも消えます。

VALIDATE CONSTRAINT

このフォームは、以前に NOT VALID オプションで作成された制約を検証します。このコマンドは、他のトランザクションをブロックしない非同期 DDL オペレーションです。ALTER TABLE ASYNC ... VALIDATE CONSTRAINT を実行すると、Aurora DSQL はすぐに job_id を返します。

この非同期ジョブのステータスは、sys.jobs システムビューでモニタリングできます。sys.wait_for_job('job_id') を使用して、検証が完了または失敗するまで現在のセッションをブロックすることもできます。

検証ジョブはテーブル全体をスキャンして、既存のすべての行が制約を満たしていることを確認します。検証が正常に完了すると、Aurora DSQL は制約を有効としてマークし、クエリプランナーはそれをすべてのクエリに適用します。既存の行が制約に違反しているために検証に失敗した場合、ジョブは失敗し、制約は NOT VALID 状態のままになります。

このコマンドは、NOT VALID オプションで作成した制約のみを検証します。既に有効な制約を検証しようとすると、エラーが発生します。

DROP CONSTRAINT [ IF EXISTS ]

このフォームは、制約の基盤となるインデックスとともに、テーブルの指定された制約を削除します。IF EXISTS が指定されていて、制約が存在しない場合、エラーはスローされません。この場合、代わりに通知が発行されます。

OWNER TO

このフォームは、テーブルの所有者を指定されたユーザーに変更します。

RENAME

RENAME フォームは、テーブルの名前、テーブル内の個々の列の名前、またはテーブルの制約の名前を変更します。基盤となるインデックスを持つ制約の名前を変更すると、そのインデックスの名前も変更されます。保存されたデータには影響しません。

SET SCHEMA

このフォームは、テーブルを別のスキーマに移動します。テーブル列が所有する関連付けられたインデックス、制約、シーケンスも移動されます。

パラメータ

IF EXISTS

テーブルが存在しなかったとしてもエラーになりません。この場合、通知が発行されます。

name

変更対象となる既存のテーブルの名前 (オプションでスキーマ修飾可) です。テーブル名の前に ONLY が指定されている場合、そのテーブルのみが変更されます。ONLY が指定されていない場合、テーブルとそのすべての子テーブル (存在する場合) が変更されます。オプションで、子テーブルが含まれていることを明示的に示すために、テーブル名の後に * を指定できます。

column_name

新規または既存の列の名前です。

new_column_name

既存の列の新しい名前です。

new_name

テーブルの新しい名前。

data_type

新しい列のデータ型。

table_constraint

CHECK 制約の定義。Aurora DSQL では、CHECK 制約は ALTER TABLE ADD CONSTRAINT を使用して NOT VALID オプションで追加する必要があります。完全な CHECK 制約構文については、「CREATE TABLE」を参照してください。

constraint_name

新規または既存の制約の名前です。

CASCADE

削除された列または制約に依存するオブジェクト (その列を参照するビューなど) を自動的に削除し、それらのオブジェクトに依存するすべてのオブジェクトも自動的に削除します。

RESTRICT

依存オブジェクトがある場合は、列または制約の削除を拒否します。これがデフォルトの動作です。

new_owner

テーブルの新しい所有者のユーザー名です。

new_schema

テーブルの移動先となるスキーマの名前です。

注意事項

DROP COLUMN フォームは列を物理的には削除しませんが、SQL オペレーションには表示されなくなります。テーブルに対する後続の挿入および更新オペレーションでは、その列に NULL 値が保存されます。したがって、列の削除は迅速ですが、削除された列が占有する領域は再利用されないため、テーブルのディスク上のサイズはすぐには縮小されません。既存の行が更新されると、その領域は時間の経過とともに再利用されます。

削除された列がプライマリキーの INCLUDE 列として参照されている場合、プライマリキー定義が更新され、削除された列が除去されます。

Aurora DSQL のテーブルには、一度に最大 255 のアクティブな列を含めることができ、テーブルの存続期間全体で最大 1,600 の列を含めることができます。列を削除しても、その属性番号は再利用されません。アクティブな列のセットから削除されますが、削除された列は引き続き、存続期間における 1,600 列の制限にカウントされます。詳細については、「Aurora DSQL のデータベース制限」を参照してください。