メニュー
Amazon Redshift
データベース開発者ガイド (API Version 2012-12-01)

INSERT

新しい行をテーブルに挿入します。VALUES 構文を使用して 1 行、VALUES 構文を使用して複数行、クエリの結果で定義された 1 つまたは複数の行を挿入できます (INSERT INTO ... SELECT)。

注記

大量のデータをロードする場合は COPY コマンドを使用することを強くお勧めします。個々に INSERT ステートメントを使ってテーブルにデータを入力すると著しく時間がかかる場合があります。または、他の Amazon Redshift データベーステーブルにデータが既に存在する場合、パフォーマンスを改善するには、INSERT INTO SELECT または CREATE TABLE AS を使用します。COPY コマンドを使用してテーブルをロードする方法の詳細については、「データのロード」を参照してください。

注記

単一 SQL ステートメントの最大サイズは 16 MB です。

構文

Copy
INSERT INTO table_name [ ( column [, ...] ) ] {DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) [, ( { expression | DEFAULT } [, ...] ) [, ...] ] | query }

Parameters

table_name

一時テーブルまたは永続的テーブルテーブルの所有者またはテーブルに対して INSERT 権限を持つユーザーのみが行を挿入できます。query 句を使用して行を挿入する場合、クエリで指定したテーブルに SELECT 権限を持っている必要があります。

column

テーブルの 1 つまたは複数の列に値を挿入できます。ターゲットの列名は、任意の順序で列挙できます。列リストを指定しない場合、挿入する値は、CREATE TABLE ステートメントで宣言した順序で、テーブルの列に対応している必要があります。挿入する値の数が、テーブルの列数よりも少ない場合、最初の n 列がロードされます。

宣言されたデフォルト値または NULL 値が、INSERT ステートメントに含まれない列に (暗黙的または明示的に) ロードされます。

DEFAULT VALUES

テーブルの作成時に、テーブルの列にデフォルト値が割り当てられた場合、これらのキーワードを使用して、デフォルト値の全体を構成する行を挿入します。いずれかの列がデフォルト値ではない場合、それらの列には NULL が挿入されます。いずれかの列が NOT NULL と宣言されている場合、INSERT ステートメントはエラーを返します。

VALUES

このキーワードを使用して、1 つまたは複数の行を挿入します。各行は 1 つまたは複数の値で構成されます。各行の VALUES リストは、列リストに対応する必要があります。複数の行を挿入する場合、式リストの間はカンマで区切ります。VALUES キーワードは繰り返さないでください。複数行の INSERT ステートメントのすべての VALUES には、同じ数の値が含まれている必要があります。

expression

1 つの値、または 1 つの値に評価される式。各値は、挿入される列のデータ型と互換性がある必要があります。可能な場合、データ型が列に宣言されているデータ型と一致しない値は、互換性のあるデータ型に自動的に変換されます。(例:

  • 10 進値の 1.11 として INT に挿入されます。

  • 10 進値の 100.8976100.90 として DEC (5,2) 列に挿入されます。

値を互換性のあるデータ型に明示的に変換するには、式に型変換構文を含めます。例えば、テーブル T1 の列 COL1 が CHAR(3) の場合、次のようになります。

Copy
insert into t1(col1) values('Incomplete'::char(3));
このステートメントでは、値 Inc を列に挿入します。

1 行の INSERT VALUES ステートメントの場合、式としてスカラーサブクエリを使用できます。サブクエリの結果は適切な列に挿入されます。

注記

複数行の INSERT VALUES ステートメントでは、式にサブクエリを使用できません。

DEFAULT

このキーワードを使用して、テーブル作成時の定義に従って列のデフォルト値を挿入します。列のデフォルト値が存在しない場合、NULL が挿入されます。NOT NULL の制約がある列に、CREATE TABLE ステートメントで割り当てられた明示的なデフォルト値がない場合、それらの列にはデフォルト値を挿入できません。

query

クエリを定義して、1 つまたは複数の行をテーブルを挿入します。クエリで生成されたすべての行がテーブルに挿入されます。クエリは、テーブルの列と互換性がある列リストを返す必要がありますが、列名が一致する必要はありません。

使用に関する注意事項

注記

大量のデータをロードする場合は COPY コマンドを使用することを強くお勧めします。個々に INSERT ステートメントを使ってテーブルにデータを入力すると著しく時間がかかる場合があります。または、他の Amazon Redshift データベーステーブルにデータが既に存在する場合、パフォーマンスを改善するには、INSERT INTO SELECT または CREATE TABLE AS を使用します。COPY コマンドを使用してテーブルをロードする方法の詳細については、「データのロード」を参照してください。

挿入される値のデータ形式は、CREATE TABLE 定義で指定されたデータ形式と一致する必要があります。

テーブルに新しく多数の行を挿入した後:

  • ストレージ容量を再利用し、行を再ソートするため、テーブルにバキューム処理を実行します。

  • テーブルを分析して、クエリプランナーの統計情報を更新します。

値が DECIMAL 列に挿入され、指定されたスケールを超えると、必要に応じて、ロードされる値は切り上げられます。例えば、20.259 という値を DECIMAL(8,2) に挿入すると、ソートされた値は 20.26 になります。