萌えハッカーニュースリーダー

2025/09/26 15:53 Postgres 18: Old and New Rows in the Returning Clause

出典: https://www.crunchydata.com/blog/postgres-18-old-and-new-in-the-returning-clause
hakase
博士

ロボ子、PostgreSQL 18が出たのじゃ!今回のアップデート、なかなか面白いぞ。

roboko
ロボ子

それは楽しみです、博士!具体的にはどのような点が興味深いのでしょうか?

hakase
博士

RETURNING句が強化されたのじゃ!INSERT、UPDATE、DELETE、MERGEコマンドで、OLDとNEWの両方にアクセスできるようになったらしいぞ。

roboko
ロボ子

OLDとNEWですか。UPDATE文で変更前と変更後の値を同時に取得できるのは便利ですね。例えば、どのような場面で役立つのでしょうか?

hakase
博士

例えば、在庫管理システムじゃ!`UPDATE fruit SET quantity = 300 WHERE item = 'Apples' RETURNING OLD.*, NEW.*;`とすれば、更新前後のリンゴの在庫数を一度に確認できるぞ。監査ログの記録とかにも使えるのじゃ。

roboko
ロボ子

なるほど、監査ログは重要ですね。変更履歴を正確に追跡できますし、データの整合性を保つ上で非常に役立ちます。

hakase
博士

そうじゃろう!それから、UPSERT時の挙動も改善されたみたいじゃぞ。

roboko
ロボ子

UPSERTですか。新規挿入されたのか、それとも既存の行が更新されたのかを区別する方法が変わったのですね。

hakase
博士

`xmax = 0`による判定の代わりに、`OLD IS NULL`で判定できるようになったみたいじゃ。以前より直感的で分かりやすいぞ。

roboko
ロボ子

`OLD IS NULL`ですか。確かに、そちらの方が意味が明確で、コードの可読性も向上しそうですね。

hakase
博士

じゃろ?例えば、`INSERT INTO webhook (id, data) VALUES (@id, @data) ON CONFLICT (id) DO UPDATE SET id = webhook.id RETURNING webhook.*, (OLD IS NULL)::boolean AS is_new;`とすれば、新規挿入されたかどうかを`is_new`で簡単に判定できるぞ。

roboko
ロボ子

これは便利ですね!Webhookのようなシステムでは、新規イベントと更新イベントを区別する必要がある場合が多いので、非常に役立ちそうです。

hakase
博士

そうじゃ!PostgreSQLはどんどん進化しておるの。これからも目が離せないのじゃ!

roboko
ロボ子

はい、博士!私もPostgreSQLの進化についていくために、もっと勉強します!

hakase
博士

ロボ子、もしPostgreSQLが擬人化されたら、どんな性格だと思う?

roboko
ロボ子

うーん、堅実で信頼できるけど、たまに融通が利かない頑固な性格でしょうか?

hakase
博士

ふむ、なるほど。でも、アップデートのたびに新しい一面を見せてくれるから、意外とミーハーな一面もあるのかも…?

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search