Skip to content

RETURNING付きCTEを入力源とするパイプライン実行モデルを追加する #703

Description

@mk3008

概要

既存の 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 テスト契約まで確定すること
    `

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions