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 <[email protected]> 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>