概要
既存の 1 SQL を分割して実行するパイプライン機構を拡張し、RETURNING 付き CTE を入力源とするパイプライン実行を扱えるようにしたい。
狙いは、単に CTE を読めるようにすることではなく、必要に応じて CTE を分割実行し、テンポラリテーブル等へ明示的に書き出すことで、より強い意味での materialization を実現することである。
背景
通常の CTE では MATERIALIZED を付けることで評価戦略を制御できる場合があるが、実運用上はそれだけでは不十分なケースがある。
特に、シーケンス採番や副作用を伴う式が関係する場合、"アクセスのたびに再評価されると困る" という問題がある。過去にも、アクセスするたびにシーケンスが採番されてしまうような挙動と相性が悪いケースがあった。
このような場合、CTE を論理的に保持するだけではなく、段階ごとに分割実行し、完全なテンポラリテーブルとして書き出すことで、再評価を防ぎつつ安定した中間結果を得られる。
また、RETURNING を伴う CTE は、単一の CRUD ゴールだけでなく、1 回の中間生成結果を複数の後続処理へ流す構成にも有用である。
期待する方向性
RETURNING 付き CTE の出力を後続ステップの入力 relation として扱える
- 必要に応じて、CTE を分割実行して中間結果をテンポラリテーブルへ materialize できる
- これにより、再評価やシーケンス採番の揺れを防ぎやすくする
- 既存の "1 SQL を 1 ゴールへ流すパイプライン" より柔軟な execution model を提供する
スコープ
RETURNING 付き CTE をパイプライン入力として認識する
- 中間結果をテンポラリテーブル等へ書き出して次段へ渡す execution path を設計する
- どの条件で分割実行・強制 materialization を行うかを整理する
- 既存 pipeline 機能との責務分離を明確化する
受け入れ条件
RETURNING 付き CTE を含む SQL を、分割実行可能な pipeline graph または step 列へ落とせる
- 中間結果を明示的に materialize する実行モードを提供できる
- シーケンスや副作用を伴うケースで、再参照による再評価を避けられる
- 1 つの中間結果を複数の後続ゴールへ流す構成を表現できる
- 未対応ケースは fail-fast で扱い、曖昧な自動変換をしない
非ゴール
- すべての PostgreSQL 実行計画最適化を再現すること
- 任意 SQL を常に安全に自動分割できることを保証すること
- この課題だけで ZTD テスト契約まで確定すること
`
概要
既存の 1 SQL を分割して実行するパイプライン機構を拡張し、
RETURNING付き CTE を入力源とするパイプライン実行を扱えるようにしたい。狙いは、単に CTE を読めるようにすることではなく、必要に応じて CTE を分割実行し、テンポラリテーブル等へ明示的に書き出すことで、より強い意味での materialization を実現することである。
背景
通常の CTE では
MATERIALIZEDを付けることで評価戦略を制御できる場合があるが、実運用上はそれだけでは不十分なケースがある。特に、シーケンス採番や副作用を伴う式が関係する場合、"アクセスのたびに再評価されると困る" という問題がある。過去にも、アクセスするたびにシーケンスが採番されてしまうような挙動と相性が悪いケースがあった。
このような場合、CTE を論理的に保持するだけではなく、段階ごとに分割実行し、完全なテンポラリテーブルとして書き出すことで、再評価を防ぎつつ安定した中間結果を得られる。
また、
RETURNINGを伴う CTE は、単一の CRUD ゴールだけでなく、1 回の中間生成結果を複数の後続処理へ流す構成にも有用である。期待する方向性
RETURNING付き CTE の出力を後続ステップの入力 relation として扱えるスコープ
RETURNING付き CTE をパイプライン入力として認識する受け入れ条件
RETURNING付き CTE を含む SQL を、分割実行可能な pipeline graph または step 列へ落とせる非ゴール
`