On Mon, Dec 28, 2020 at 02:32:35AM +0000, PG Doc comments form wrote:
> The following documentation comment has been logged on the website:
> 
> Page: https://www.postgresql.org/docs/13/executor.html
> Description:
> 
> It's located within the parentheses of the last paragraph.
> 
> >(A simple INSERT ... VALUES command creates a trivial plan tree consisting
> of a single Result node, which computes just one result row, and ModifyTable
> above it to perform the insertion. But INSERT ... SELECT can demand the full
> power of the executor mechanism.)
> 
> I'm under the impression that the second inline code block refers to `INSERT
> ... VALUES`.

I think the text is correct, but I also think it is trying to do too
much in one paragraph.  Here is a doc patch to improve this.

-- 
  Bruce Momjian  <br...@momjian.us>        https://momjian.us
  EnterpriseDB                             https://enterprisedb.com

  The usefulness of a cup is in its emptiness, Bruce Lee

diff --git a/doc/src/sgml/arch-dev.sgml b/doc/src/sgml/arch-dev.sgml
new file mode 100644
index 7883c3c..ade0ad9
*** a/doc/src/sgml/arch-dev.sgml
--- b/doc/src/sgml/arch-dev.sgml
***************
*** 529,554 ****
     </para>
  
     <para>
!     The executor mechanism is used to evaluate all four basic SQL query types:
!     <command>SELECT</command>, <command>INSERT</command>, <command>UPDATE</command>, and
!     <command>DELETE</command>.  For <command>SELECT</command>, the top-level executor
!     code only needs to send each row returned by the query plan tree off
!     to the client.  For <command>INSERT</command>, each returned row is inserted
!     into the target table specified for the <command>INSERT</command>.  This is
!     done in a special top-level plan node called <literal>ModifyTable</literal>.
!     (A simple
!     <command>INSERT ... VALUES</command> command creates a trivial plan tree
!     consisting of a single <literal>Result</literal> node, which computes just one
!     result row, and <literal>ModifyTable</literal> above it to perform the insertion.
!     But <command>INSERT ... SELECT</command> can demand the full power
!     of the executor mechanism.)  For <command>UPDATE</command>, the planner arranges
!     that each computed row includes all the updated column values, plus
!     the <firstterm>TID</firstterm> (tuple ID, or row ID) of the original target row;
!     this data is fed into a <literal>ModifyTable</literal> node, which uses the
!     information to create a new updated row and mark the old row deleted.
!     For <command>DELETE</command>, the only column that is actually returned by the
!     plan is the TID, and the <literal>ModifyTable</literal> node simply uses the TID
!     to visit each target row and mark it deleted.
     </para>
  
    </sect1>
--- 529,564 ----
     </para>
  
     <para>
!     The executor mechanism is used to evaluate all four basic SQL query
!     types: <command>SELECT</command>, <command>INSERT</command>,
!     <command>UPDATE</command>, and <command>DELETE</command>.
!     For <command>SELECT</command>, the top-level executor code
!     only needs to send each row returned by the query plan tree
!     off to the client.  <command>INSERT ... SELECT</command>,
!     <command>UPDATE</command>, and <command>DELETE</command>
!     are effectively <command>SELECT</command>s under a special
!     top-level plan node called <literal>ModifyTable</literal>.
!    </para>
! 
!    <para>
!     <command>INSERT ... SELECT</command> feeds the rows up
!     to <literal>ModifyTable</literal> for insertion.  For
!     <command>UPDATE</command>, the planner arranges that each
!     computed row includes all the updated column values, plus the
!     <firstterm>TID</firstterm> (tuple ID, or row ID) of the original
!     target row; this data is fed up to the <literal>ModifyTable</literal>
!     node, which uses the information to create a new updated row and
!     mark the old row deleted.  For <command>DELETE</command>, the only
!     column that is actually returned by the plan is the TID, and the
!     <literal>ModifyTable</literal> node simply uses the TID to visit each
!     target row and mark it deleted.
!    </para>
! 
!    <para>
!     A simple <command>INSERT ... VALUES</command> command creates a
!     trivial plan tree consisting of a single <literal>Result</literal>
!     node, which computes just one result row, feeding that up
!     to<literal>ModifyTable</literal> to perform the insertion.
     </para>
  
    </sect1>

Reply via email to