アプリ開発でPostgresを利用している時に、
Insertした後に登録したデータを返してほしい
と思った事はないでしょうか。
CakephpやLaravel等フレームワークを使っていると簡単に取得できますが、
スクラッチで開発している場合はどうでしょう。
今回はそのあたりを解説したいと思います。
ちなみにCakephpで直接SQL実行(queryメソッド)時にも使える方法です。
このブログは現役のエンジニア(プログラマー歴が約12年)の僕(よしたか)が2019年12月後半から日々更新しております。
もしもアフィリエイトは会員登録後も無料です!
今すぐ会員登録してアフィリエイトを始めよう!
PostgresでInsertした後に登録したデータを返却する方法
ではデータ返却する方法を見ていきたいと思います。
RETURNING句
RETURNING句を使うと簡単に取得できます。
ちなみにPostgres8.2~利用できる為、古いPostgres利用時にはこの方法は使えません。
RETURNING句の使い方
RETURNING句の使い方を見ていきましょう。
ステップ①-テスト用のテーブル作成
CREATE TABLE test (
id bigserial NOT NULL primary key
,name varchar(255)
,note text
);
とりあえずテスト用のテーブルができたと思います。
ステップ②-テスト用のテーブルにデータ投入
INSERT INTO test (name, note) VALUES ('name1', 'note1');
INSERT INTO test (name, note) VALUES ('name2', 'note2');
INSERT INTO test (name, note) VALUES ('name3', 'note3');
これで3つデータができたと思います。
ステップ③-RETURNING句を使って登録したデータを返す
INSERT INTO test (name, note) SELECT name, note FROM test WHERE id = 1 RETURNING id;
実際に返却する方法ですが、クエリの末尾に「RETURNING ~」を追加するだけでOKです。
結果を見てみると、データ登録したidが返されている事が分かります。
ちなみに、
INSERT INTO test (name, note) SELECT name, note FROM test WHERE id = 1 RETURNING id, name, note;
このようにすると、データ登録したidとnameとnoteが返却できます。
まとめ
いかがだったでしょうか。
日頃からフレームワークを使っていると便利な反面、スクラッチで開発を行うと以外とこういう事がわからなかったりしますよね。
PostgresのRETURNING句はUpdate文にも利用できますので、スクラッチ開発時の参考になればと思います。