PostgreSQLでレコードを挿入する方法4パターン

  • 2020.03.14
  • SQL
PostgreSQLでレコードを挿入する方法4パターン

レコードの挿入はSQLの基本であるが、多くのサイトでは基本的な挿入方法しか説明しておらず、複数レコードを挿入する方法やSELECTの結果を挿入する方法、ファイルからデータを挿入する方法などを説明しているサイトは少ない。

Advertisement

基本的な挿入方法

まずは、よく見る基本的な挿入の方法。

構文

INSERT INTO <テーブル名> (<カラム名1>, <カラム名2>, ...) VALUES(<データ1>, <データ2>, ...);

記述例

INSERT INTO sample (id, name) VALUES(1, '太郎');
INSERT INTO test(id, title, content) VALUES(2, 'レコードを挿入する', 'SQLの基本で・・・・');

MySQLのようにINTOは省略できないが、同じようにカラム名リストを省略することができる。 PostgreSQLではカラム名リストを省略したときに、全てのカラムに値を代入しなくても、残ったカラムにはデフォルト値が与えられる。

また、MySQLと同じくDEFAULTと書いて明示的にデフォルト値を与えることもできる。 PostgreSQLではDEFAULT VALUESと書くことで全てのカラムにデフォルト値を与えることもできる。

構文

INSERT INTO <テーブル名> VALUES(<データ1>, <データ2>, ...);

記述例

INSERT INTO sample VALUES(1, '太郎');
INSERT INTO article VALUES(2, 'レコードを挿入する', 'SQLの基本で・・・・');
INSERT INTO article VALUES(3, 'レコードを削除する');
INSERT INTO article VALUES(DEFAULT, 'レコードを更新する');
INSERT INTO article DEFAULT VALUES;

複数レコードの挿入方法

INSERT文による複数レコードの挿入はPostgreSQL8.2以降でサポートされる。

構文

INSERT INTO <テーブル名> (<カラム名1>, <カラム名2>, ...) VALUES(<データ1-1>, <データ1-2>, ...), (<データ2-1>, <データ2-2>, ...), ...;

記述例

INSERT INTO sample (id, name) VALUES(1, '太郎'), (2, '次郎'), (3, '三郎');
INSERT INTO test (id, title) VALUES(3, 'テスト'), (4, 'サンプル');

SELECTの結果を挿入する方法

以下のように書くことでSELECTの結果を挿入することができ、この場合もカラム名リストは省略できる。

構文

INSERT INTO <テーブル名> (<カラム名1>, <カラム名2>, ...) <SELECT 文>;

記述例

INSERT INTO sample (id) SELECT test.id FROM test;
INSERT INTO sample (id, name) SELECT book.id, book.title FROM book WHERE price >= 2300;
INSERT INTO sample SELECT test.id + 100 FROM test;

ファイルのデータを挿入する方法

PostgreSQLではCOPYコマンドを使ってファイルのデータを挿入することもできる。

構文

COPY <テーブル名> FROM <ファイルパス>;

記述例

COPY sample FROM '/home/user/test.txt';
COPY book FROM '/home/user/public_html/data.txt';

ファイルパスは相対パスで書くこともできるが、その相対パスは、クライアントの作業ディレクトリではなく、サーバプロセスの作業ディレクトリからの相対パスになる。 デフォルトでは区切り文字はタブ、NULLのデータは「\N」なっていて以下のようなファイルを読み込ませる。

読み込ませるファイルの例

1   PHPプログラミング入門    2300
2   PHP+PostgreSQLによるブログ製作  3200
3   犬でもわかるSQL入門 2600
4   PostgreSQLのススメ  \N

これらは以下のように指定することで変更できる。

構文

COPY <テーブル名> FROM <ファイルパス> WITH DELIMITER <区切り文字> NULL <NULLを意味する文字>;

記述例

COPY sample FROM '/home/user/test.txt' WITH DELIMITER '|' NULL 'DB::NULL';
COPY book FROM '/home/user/public_html/data.txt' WITH DELIMITER '@' NULL '#';

どのようなファイルを読み込ませればいいのかわからなければ、COPY TOでテーブルの中身を出力してみるとわかりやすい。

Advertisement