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

レコードの挿入はSQLの基本であるが、多くのサイトでは基本的な挿入方法しか説明しておらず、複数レコードを挿入する方法やSELECTの結果を挿入する方法、ファイルからデータを挿入する方法などを説明しているサイトは少ない。
基本的な挿入方法
まずは、よく見る基本的な挿入の方法。
構文
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でテーブルの中身を出力してみるとわかりやすい。
-
前の記事
PostgreSQLでカラムを削除する方法 2020.03.13
-
次の記事
お風呂のお湯が出なくなった!賃貸で給湯器が壊れた時の修理代は家主持ちになる?【経験談】 2020.03.15