ホームページ >データベース >mysql チュートリアル >PostgreSQL の CTE は、複数テーブルの更新で RETURNING を使用して複数の INSERT を効率的に処理するにはどうすればよいでしょうか?

PostgreSQL の CTE は、複数テーブルの更新で RETURNING を使用して複数の INSERT を効率的に処理するにはどうすればよいでしょうか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-02 14:05:40922ブラウズ

How Can PostgreSQL's CTEs Efficiently Handle Multiple INSERTs with RETURNING for Multi-Table Updates?

PostgreSQL での複数テーブルの更新に対する複数の INSERT...RETURNING

テーブルから新しく挿入されたデータを参照しながら、複数の子テーブルにデータを挿入する親テーブルは困難な作業になる可能性があります。これに関連して、PostgreSQL は、データ変更共通テーブル式 (CTE) を使用する強力なソリューションを提供します。

最初に、RETURNING 句を使用して、親テーブルに新しく挿入された行の user_id を取得できます。

INSERT INTO table1 (default,'johnee','john','smith',default) RETURNING userid;

複数の INSERT を実行するには、データ変更 CTE を次のように利用できます。

WITH ins1 AS (
   INSERT INTO table1 (username, name, surname)
   VALUES ('johnee','john','smith')
   RETURNING user_id
   )
, ins2 AS (
   INSERT INTO table2 (user_id, password)
   SELECT ins1.user_id, 'secret'
   FROM ins1
   )
INSERT INTO table3 (user_id, adress, city, phone)
SELECT ins1.user_id, ...
FROM ins1
RETURNING user_id;

このコードでは、ins1 CTE は table1 への INSERT を実行し、user_id を返します。次に、ins2 CTE は、ins1 の user_id を使用して、table2 にデータを挿入します。最後に、3 番目の INSERT は、ins1 の user_id を使用して table3 にデータを挿入し、オプションで結果の user_id を返します。

データ変更 CTE を使用することで、複数の INSERT を効率的にチェーンし、新しく挿入されたデータが子に確実に挿入されるようにすることができます。テーブルは親テーブルとの必要な関係を維持します。

以上がPostgreSQL の CTE は、複数テーブルの更新で RETURNING を使用して複数の INSERT を効率的に処理するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。