2025
December
19
PostgreSQLのRETURNING句でINSERT/UPDATE/DELETEの結果を即時取得する方法
今回はPostgreSQLのRETURNING句について紹介します。
データをINSERTした時にシーケンスになってるカラムの値を取得したい。
というタイミングは結構多いと思います。
その場合は再度currvalで取得したりすることが多いと思いますがRETURNING句を使えば一度のクエリで完結できます。
RETURNING句とは
RETURNING句は、INSERT、UPDATE、DELETEの実行結果として、対象となった行のデータを返す機能です。
PostgreSQL独自の機能で、SQL ServerのOUTPUT句やOracleのRETURNING INTO句に相当します。
これを使うことで、データ操作と結果取得を1つのクエリにまとめることができます。
テーブル
| 売上テーブル | |
| 注文id | 売上日 |
| 1 | 2025/12/01 |
| 2 | 2025/12/02 |
| 3 | 2025/12/03 |
※注文idにシーケンス登録中
| 売上明細テーブル | |||
| 注文明細id | 注文id | 商品名 | 個数 |
| 10 | 1 | りんご | 5 |
| 11 | 1 | みかん | 10 |
| 12 | 2 | みかん | 20 |
| 13 | 3 | ぶどう | 2 |
SQL(INSERT)
INSERT INTO 売上テーブル
(売上日)
VALUES
('2025/14/04')
RETURNING 注文id,売上日;結果
| 注文id | 売上日 |
| 4 | 2025/14/04 |
注文idを取得することができたので、このあと売上明細テーブルに注文idの登録が簡単になりました。
SQL(UPDATE)
UPDATE 売上明細テーブル
SET 個数 = 30
WHERE 売上明細id = 11
RETURNING 注文明細id, 注文id,個数;結果
| 注文明細id | 注文id | 個数 |
| 11 | 1 | 30 |
更新した内容がすぐに取得できました。
SQL(DELETE)
DELETE FROM 売上明細テーブル
WHERE 商品名 = 'みかん'
RETURNING 注文明細id, 注文id,個数;結果
| 注文明細id | 注文id | 個数 |
| 11 | 1 | 10 |
| 12 | 2 | 20 |
DELETEに関しては削除後は参照できないのでログを記入する際、かなり便利に使うことができます。
まとめ
データと更新と結果の取得がまとめて1回の処理にできるので処理を簡単にすることができるようになります!
このカテゴリの最新記事
2024.11.22
Visual Studioならたった1秒でメソッドの抽出ができる!
2025.05.30
VBAに存在しない「やり直し」ショートカットキーと同じ操作を行う方法
2025.08.28
pg_auto_failoverのインストールとセットアップ
2024.04.24
一開発者からみたRPAのメリットとデメリット