データを追加する(INSERT)
PostgreSQL ではテーブルに新しいデータを追加するときに INSERT コマンドを使用します。ここでは PostgreSQL でテーブルに新しいデータを追加する方法について解説します。
(Last modified: )
テーブルに新しいデータを追加する
テーブルに新しいデータを追加するには INSERT コマンドを使います。書式は次のとおりです。
INSERT INTO table_name [ ( column_name [, ...] ) ] VALUES ( { expression | DEFAULT } [, ...] )
テーブル名( table_name )に新しいデータを追加します。
データを追加するテーブル名の指定は スキーマ名.テーブル名 の形式で行います。スキーマ名を省略した場合は現在のスキーマに作成されます。(詳しくは「スキーマ検索パスを設定する」を参照されてください)。
INSERT コマンドを実行するには、コマンドを実行するロールがテーブルに対して INSERT 権限を持っている必要があります。
テーブルに含まれるすべてのカラムに値を指定してデータを追加する場合にはカラム名の指定を省略して次のように実行します。
INSERT INTO table_name VALUES (value1, value2, ...)
テーブルに含まれる特定のカラムを指定してデータを追加する場合は次のように記述します。(指定しなかったカラムにはデフォルトの値が格納されます)。カラム名の数と値の数は同じでなくてはなりません。
INSERT INTO table_name (column_name1, column_name2, ...) VALUES (value1, value2, ...)
-- --
それでは実際に試してみます。データを追加するテーブルとして次のようなテーブルを mydb データベースの myschema スキーマの中に作成しました。
create table myschema.friends ( id integer, name varchar(10), address varchar(10) );
テーブルに新しいデータを追加します。まずはすべてのカラムの値を指定してデータを追加してみます。
insert into myschema.friends values (1, 'Yamada', 'Tokyo');
データの追加が完了しました。確認のため SELECT コマンドを使ってテーブルからデータを取得してみます。
select * from myschema.friends;
テーブルにデータが追加されていることが確認できました。
次に id カラムと name カラムにだけ値を指定してデータを追加してみます。
insert into myschema.friends (id, name) values (2, 'Suzuki');
データの追加が完了しました。今回 address カラムには値を指定せずにデータを追加したので、 address カラムにはデフォルトの値( NULL )が格納されています。それでは SELECT コマンドを使って確認してみます。
テーブルにデータが追加されていることが確認できました。( NULL は表示されません)。
デフォルト値を使用するように指定してデータを追加する
INSERT コマンドを実行するときにカラムに対して値を指定するのではなくデフォルト値を使用したい場合には、 値の代わりに DEFAULT と記述することができます。
例えば先ほど作成した myschema.friends テーブルにデータを追加するときに id カラムと name カラムには値を指定するけれど address カラムにはデフォルトの値が格納されるようにするには次のように記述することがができます。
insert into myschema.friends values (3, 'Fujita', default);
これは次のように記述した場合と同じ意味です。
insert into myschema.friends (id, name) values (3, 'Fujita');
通常すべてのカラムに値を指定せずにデータを追加する場合にはカラム名を列挙する必要がありますが、値を指定しないカラムに対して DEFAULT を指定するとカラムの列挙をする必要がなくなります。
-- --
では実際に試してみます。先ほど作成したテーブルで id カラムと name カラムに値を指定し、 address カラムにはデフォルト値が格納されるようにデータを追加してみます。
insert into myschema.friends values (3, 'Fujita', default);
データの追加が完了しました。それでは SELECT コマンドを使って確認してみます。
追加されたデータの address カラムにはデフォルトの値である NULL が格納されていることが確認できました。
すべてのカラムの値をデフォルト値を使用してデータを追加する
INSERT コマンドを実行するときにすべてのカラムの値にデフォルトの値を使用してデータを追加するには次の書式を利用することができます。
INSERT INTO table_name DEFAULT VALUES;
-- --
では実際に試してみます。先ほど作成したテーブルですべてのカラムにデフォルト値が格納されるようにデータを追加してみます。
insert into myschema.friends default values;
データの追加が完了しました。それでは SELECT コマンドを使って確認してみます。
追加されたデータのすべてのカラムにはデフォルトの値である NULL が格納されていることが確認できました。
※ NULL が何も表示されないと分かりにくいので次のように実行してから再度 SELECT コマンドを実行してみます。
\pset null NULL
複数のデータをまとめて追加する
一度の INSERT コマンドで複数のデータをまとめて追加する場合には次の書式を使用してください。
INSERT INTO table_name VALUES (value_a1, value_a2, ...), (value_b1, value_b2, ...), ...
INSERT INTO table_name (column_name1, column_name2, ...) VALUES (value_a1, value_a2, ...), (value_b1, value_b2, ...), ...
-- --
では実際に試してみます。先ほど作成したテーブルに対して 3 つのデータをまとめて追加してみます。
insert into myschema.friends values (5, 'Hoshino', 'Nagoya'), (6, 'Ueda', 'Sendai'), (7, 'Ishikawa', 'Iwate');
データの追加が完了しました。それでは SELECT コマンドを使って確認してみます。
3 つのデータがまとめて追加されていることが確認できました。
-- --
INSERT コマンドを使ってテーブルにデータを追加する方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
プログラミングや開発環境構築の解説サイトを運営しています。