[11/15開催: PostgreSQL Conference Japan 2019 参加受付中] 
他のバージョンの文書 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

INSERT

Name

INSERT  -- テーブルに新しい行を作成

Synopsis

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

入力

table

既存のテーブルの名前です (スキーマ修飾名でも可)。

column

table 内の列名です。

DEFAULT VALUES

すべての列には NULL 値、または DEFAULT 句を使用してテーブルを作成した時に指定した値が格納されます。

expression

column に挿入する有効な式または値です。

DEFAULT

この列には、列の DEFAULT 句、またはデフォルトが使用できない場合には NULL が入ります。

query

有効な問い合わせです。有効な引数に関するより詳細な説明については SELECT文を参照して下さい。

出力

INSERT oid 1

1行だけ挿入された場合に返されるメッセージです。 oid は挿入された行のOID番号です。

INSERT 0 #

2 つ以上の行が挿入された場合に返されるメッセージです。# は挿入された行の数です。

説明

INSERT を使用して、テーブルに新しい行を挿入することができます。1 度に 1 つの行を挿入することも可能ですし、問い合わせの結果として複数の行を挿入することもできます。対象リスト内の列はどのような順番でも指定できます。

対象リストに無い各列には、DEFAULT句の値として宣言されたデフォルト値、 または、NULLが挿入されます。 NOT NULL と宣言された列に NULL が挿入されると、PostgreSQL はその新しい列を拒否します。

各列の表示が正しいデータ型でない場合は、自動的に型の強制が行なわれます。

テーブルに追加するためには、そのテーブルに対してINSERT権限を持っている必要があります。 また、WHERE句で指定したテーブル全てに対して SELECT権限を持っている必要があります。

使用方法

下記のコマンドはfilmsテーブルに1つの行を挿入します。

INSERT INTO films VALUES
    ('UA502','Bananas',105,'1971-07-13','Comedy',INTERVAL '82 minute');
   

この例では、最後の列lenを省略しています。 したがって、そこにはデフォルト値NULLが入ります。

INSERT INTO films (code, title, did, date_prod, kind)
    VALUES ('T_601', 'Yojimbo', 106, DATE '1961-06-16', 'Drama'); 
   

3 つ目の例では、エントリを指定せずに日付列に DEFAULT 値を指定します。

INSERT INTO films VALUES
    ('UA502','Bananas',105,'1971-07-13','Comedy',INTERVAL '82 minute');
INSERT INTO films (code, title, did, date_prod, kind)
    VALUES ('T_601', 'Yojimbo', 106, DEFAULT, 'Drama');
   

テーブル distributors に、単一行を挿入します。 ここで name という列のみが指定されていることに注意してください。 このため、省略された did列にはそのデフォルト値が代入されることになります。

INSERT INTO distributors (name) VALUES ('British Lion');
   

テーブルtmpからテーブル films に複数の行を挿入します。

INSERT INTO films SELECT * FROM tmp;
   

配列に挿入します (配列に関するより詳細な情報については PostgreSQL ユーザガイドを参照して下さい)。

-- 三目並べ用の 3x3 マスのゲーム盤を作成します。
-- (全ての問い合わせは同じboard 属性を作成します。
INSERT INTO tictactoe (game, board[1:3][1:3])
    VALUES (1,'{{"","",""},{},{"",""}}');
INSERT INTO tictactoe (game, board[3][3])
    VALUES (2,'{}');
INSERT INTO tictactoe (game, board)
    VALUES (3,'{{,,},{,,},{,,}}');
   

互換性

SQL92

INSERTSQL92と完全に互換性があります。query 句の機能についての考えられる制限は、 SELECT にて記述されています。