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 IDENTITYSET 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 ページの「ストレージモード」を参照してください。
ADDtable_constraintNOT VALID-
このフォームは、テーブルに新しい
CHECK制約を追加します。Aurora DSQL では、ALTER TABLE ADD CONSTRAINTを介して追加されたCHECK制約はNOT VALIDオプションを使用する必要があります。Aurora DSQL は制約を作成しますが、既存のデータに対してすぐに検証は行いません。これにより、テーブル全体をスキャンせずに制約を追加できます。この制約は、すべての新しい行と更新にすぐに適用されます。NOT VALIDで制約を追加した後、ALTER TABLE ASYNC ... VALIDATE CONSTRAINTを使用して、既存のデータも制約を満たしていることを確認します。検証は非同期 DDL ジョブとして実行されます。sys.jobsを使用して進捗状況をモニタリングできます。 ADDtable_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 のデータベース制限」を参照してください。