pg.ddx.io  pgsql-docs@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Bruce Momjian <bruce@momjian.us>
To: fotis.koutoupas@gmail.com
To: pgsql-docs@lists.postgresql.org
Subject: Re: Potential typo in abbreviated insertion query
Date: Thu, 31 Dec 2020 13:44:56 -0500
Message-ID: <20201231184456.GG22199@momjian.us> (raw)
In-Reply-To: <160912275508.676.17469511338925622905@wrigleys.postgresql.org>
References: <160912275508.676.17469511338925622905@wrigleys.postgresql.org>

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  <bruce@momjian.us>        https://momjian.us
  EnterpriseDB                             https://enterprisedb.com

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

Attachments:

executor.diff (text/x-diff, 3.5K) download 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>

view thread (3+ messages)  latest in thread

Message-ID: <20201231184456.GG22199@momjian.us>
Permalink:  ../20201231184456.GG22199@momjian.us/
Also on:    postgresql.org/message-id/20201231184456.GG22199@momjian.us

 ·  · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-docs@postgresql.org
  Cc: bruce@momjian.us, fotis.koutoupas@gmail.com, pgsql-docs@lists.postgresql.org
  Subject: Re: Potential typo in abbreviated insertion query
  In-Reply-To: <20201231184456.GG22199@momjian.us>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox