Thread

Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Doc: declutter CREATE TABLE synopsis.

  2. Remove support for unlogged on partitioned tables

  1. doc: create table improvements

    David G. Johnston <david.g.johnston@gmail.com> — 2024-04-22T19:19:11Z

    Hey,
    
    The attached patch addresses four somewhat related aspects of the create
    table reference page that bother me.
    
    This got started with Bug# 15954 [1] (unlogged on a partitioned table
    doesn't make sense) and I've added a paragraph under "unlogged" to address
    it.
    
    While doing that, it seemed desirable to explicitly frame up both temporary
    and unlogged as being "persistence modes" so I added a mention of both in
    the description.  Additionally, it seemed appropriate to do so immediately
    after the opening paragraph since the existing second paragraph goes
    immediately into talking about temporary tables and schemas.  I figured a
    link to the reliability chapter where one learns about WAL and why/how
    these alternative persistence modes exist is worthwhile. (I added a missing
    comma to the first sentence while I was in the area)
    
    Third, I've had a long-standing annoyance regarding the excessive length of
    the CREATE line of each of the create table syntax blocks.  Replacing the
    syntax for the persistence modes with a named placeholder introduces
    structure and clarity while reducing the length of the line nicely.
    
    Finally, while fixing line lengths, the subsequent line (first form) for
    column specification is even more excessive.  Pulling out the
    column_storage syntax into a named reference nicely cleans this line up.
    
    David J.
    
    P.S. I didn't go into depth on the fact the persistence options are not
    inherited/copied/like-able; so for now the fact they are not so is
    discovered by their omission when discussing those topics.
    
    [1]
    https://www.postgresql.org/message-id/flat/15954-b61523bed4b110c4%40postgresql.org
    
  2. Re: doc: create table improvements

    Peter Eisentraut <peter@eisentraut.org> — 2024-04-24T10:30:30Z

     > +   The reliability characteristics of a table are governed by its
     > +   persistence mode.  The default mode is described
     > +   <link linkend="wal-reliability">here</link>
     > +   There are two alternative modes that can be specified during
     > +   table creation:
     > +   <link linkend="sql-createtable-temporary">temporary</link> and
     > +   <link linkend="sql-createtable-unlogged">unlogged</link>.
    
    Not sure reliability is the best word here.  I mean, a temporary table 
    isn't any less reliable than any other table.  It just does different 
    things.
    
    
    
    
    
  3. Re: doc: create table improvements

    David G. Johnston <david.g.johnston@gmail.com> — 2024-04-24T14:45:47Z

    On Wed, Apr 24, 2024 at 3:30 AM Peter Eisentraut <peter@eisentraut.org>
    wrote:
    
    >  > +   The reliability characteristics of a table are governed by its
    >  > +   persistence mode.  The default mode is described
    >  > +   <link linkend="wal-reliability">here</link>
    >  > +   There are two alternative modes that can be specified during
    >  > +   table creation:
    >  > +   <link linkend="sql-createtable-temporary">temporary</link> and
    >  > +   <link linkend="sql-createtable-unlogged">unlogged</link>.
    >
    > Not sure reliability is the best word here.  I mean, a temporary table
    > isn't any less reliable than any other table.  It just does different
    > things.
    >
    >
    Given the name of the section where this is all discussed I'm having
    trouble going with a different word.  But better framing and phrasing I can
    do:
    
    A table may be opted out of certain storage aspects of reliability, as
    described [here], by specifying either of the alternate persistence modes:
    [temporary] or [logged]. The specific trade-offs and implications are
    detailed below.
    
    David J.
    
  4. Re: doc: create table improvements

    David G. Johnston <david.g.johnston@gmail.com> — 2024-04-24T17:08:29Z

    On Wed, Apr 24, 2024 at 7:45 AM David G. Johnston <
    david.g.johnston@gmail.com> wrote:
    
    > On Wed, Apr 24, 2024 at 3:30 AM Peter Eisentraut <peter@eisentraut.org>
    > wrote:
    >
    >>  > +   The reliability characteristics of a table are governed by its
    >>  > +   persistence mode.  The default mode is described
    >>  > +   <link linkend="wal-reliability">here</link>
    >>  > +   There are two alternative modes that can be specified during
    >>  > +   table creation:
    >>  > +   <link linkend="sql-createtable-temporary">temporary</link> and
    >>  > +   <link linkend="sql-createtable-unlogged">unlogged</link>.
    >>
    >> Not sure reliability is the best word here.  I mean, a temporary table
    >> isn't any less reliable than any other table.  It just does different
    >> things.
    >>
    >>
    > Given the name of the section where this is all discussed I'm having
    > trouble going with a different word.  But better framing and phrasing I can
    > do:
    >
    > A table may be opted out of certain storage aspects of reliability, as
    > described [here], by specifying either of the alternate persistence modes:
    > [temporary] or [logged]. The specific trade-offs and implications are
    > detailed below.
    >
    >
    Or maybe:
    
    A table operates in one of three persistence modes (default, [temporary],
    and [unlogged]) described in [Chapter 28]. --point to the intro page for
    the chapter as expanded as below, not the reliability page.
    
    diff --git a/doc/src/sgml/wal.sgml b/doc/src/sgml/wal.sgml
    index 05e2a8f8be..102cfeca68 100644
    --- a/doc/src/sgml/wal.sgml
    +++ b/doc/src/sgml/wal.sgml
    @@ -5,8 +5,17 @@
    
      <para>
       This chapter explains how to control the reliability of
    -  <productname>PostgreSQL</productname>, including details about the
    -  Write-Ahead Log.
    +  <productname>PostgreSQL</productname>.  At its core this
    +  involves writing all changes to disk twice - first to a
    +  journal of changes called the write-ahead-log (WAL) and
    +  then to the physical pages that comprise permanent tables
    +  on disk (heap).  This results in four high-level
    +  <term>persistence modes</term> for tables.
    +  The default mode results in both these features being
    +  enabled.  Temporary tables forgo both of these options,
    +  while unlogged tables only forgo WAL.  There is no WAL-only
    +  operating mode.  The rest of this chapter discusses
    +  implementation details related to these two options.
      </para>
    
    David J.
    
  5. Re: doc: create table improvements

    Laurenz Albe <laurenz.albe@cybertec.at> — 2025-02-28T13:56:44Z

    On Wed, 2024-04-24 at 07:45 -0700, David G. Johnston wrote:
    > On Wed, Apr 24, 2024 at 3:30 AM Peter Eisentraut <peter@eisentraut.org> wrote:
    > >  > +   The reliability characteristics of a table are governed by its
    > >  > +   persistence mode.  The default mode is described
    > >  > +   <link linkend="wal-reliability">here</link>
    > >  > +   There are two alternative modes that can be specified during
    > >  > +   table creation:
    > >  > +   <link linkend="sql-createtable-temporary">temporary</link> and
    > >  > +   <link linkend="sql-createtable-unlogged">unlogged</link>.
    > > 
    > > Not sure reliability is the best word here.  I mean, a temporary table 
    > > isn't any less reliable than any other table.  It just does different 
    > > things.
    > 
    > Given the name of the section where this is all discussed I'm having trouble
    > going with a different word. 
    
    This patch has rotted somewhat, and parts of it have become obsolete
    with commit e2bab2d792.  Still, I think that it is a good idea to shorten
    the lines in the synopsis.
    
    A detailed review:
    
    > diff --git a/doc/src/sgml/ref/create_table.sgml b/doc/src/sgml/ref/create_table.sgml
    > index 02f31d2d6f..9a5dafb9af 100644
    > --- a/doc/src/sgml/ref/create_table.sgml
    > +++ b/doc/src/sgml/ref/create_table.sgml
    > [...]
    > +<phrase>and <replaceable>column_storage</replaceable> is:</phrase>
    > +
    > +STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT } [ COMPRESSION <replaceable>compression_method</replaceable> ]
    > [...]
    
    I don't know if "column_storage" is descriptive.  After all, this is solely
    about TOAST details, which is only one aspect of storage.
    I have renamed it to "oversize_storage".
    
    
    @@ -118,11 +127,21 @@ WITH ( MODULUS <replaceable class="parameter">numeric_literal</replaceable>, REM
       <title>Description</title>
     
       <para>
    -   <command>CREATE TABLE</command> will create a new, initially empty table
    +   <command>CREATE TABLE</command> will create a new, initially empty, table
        in the current database. The table will be owned by the user issuing the
        command.
       </para>
    
    I am not a native speaker, but the sentence feels better to me without
    the extra comma.  I took the liberty to undo this change, partly because
    it is unrelated to the topic of the patch.
    
    +  <para>
    +   The reliability characteristics of a table are governed by its
    +   persistence mode.  The default mode is described
    +   <link linkend="wal-reliability">here</link>
    +   There are two alternative modes that can be specified during
    +   table creation:
    +   <link linkend="sql-createtable-temporary">temporary</link> and
    +   <link linkend="sql-createtable-unlogged">unlogged</link>.
    +  </para>
    
    I agree with Peter that "reliability" is not ideal.  I went with
    "durability" instead.  I removed the link to the reliability discussion
    and rephrased the sentence somewhat.
    
    +
    +     <para>
    +      If specified on a partitioned table the property is recorded but ignored:
    +      the entire partitioned table is not automatically truncated after a crash
    +      or unclean shutdown.
    +     </para>
    
    This has become obsolete with e2bab2d792, so I removed it.
    
    Attached is an updated patch.
    
    Yours,
    Laurenz Albe
    
  6. Re: doc: create table improvements

    jian he <jian.universality@gmail.com> — 2025-10-16T03:28:43Z

    hi.
    
    -<phrase>where <replaceable
    class="parameter">column_constraint</replaceable> is:</phrase>
    +<phrase>where <replaceable>persistence_mode</replaceable> is: </phrase>
    +
    +[ GLOBAL | LOCAL ] { TEMPORARY | TEMP } |
    +UNLOGGED
    
    we can just do it with one line:
    [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED
    
    most of the time, the patch using:
    <replaceable>persistence_mode</replaceable>
    <replaceable>oversize_storage</replaceable>
    
    for column_constraint we are using
    <replaceable class="parameter">column_constraint</replaceable>
    
    do we need change it to
    <replaceable class="parameter">persistence_mode</replaceable>
    <replaceable class="parameter">oversize_storage</replaceable>
    ?
    
    I don't know the purpose of this extra ``"class="parameter"``.
    
    
    
    
  7. Re: doc: create table improvements

    Laurenz Albe <laurenz.albe@cybertec.at> — 2025-10-16T13:19:32Z

    On Thu, 2025-10-16 at 11:28 +0800, jian he wrote:
    > -<phrase>where <replaceable
    > class="parameter">column_constraint</replaceable> is:</phrase>
    > +<phrase>where <replaceable>persistence_mode</replaceable> is: </phrase>
    > +
    > +[ GLOBAL | LOCAL ] { TEMPORARY | TEMP } |
    > +UNLOGGED
    > 
    > we can just do it with one line:
    > [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED
    
    You are right; changed.
    
    > most of the time, the patch using:
    > <replaceable>persistence_mode</replaceable>
    > <replaceable>oversize_storage</replaceable>
    > 
    > for column_constraint we are using
    > <replaceable class="parameter">column_constraint</replaceable>
    > 
    > do we need change it to
    > <replaceable class="parameter">persistence_mode</replaceable>
    > <replaceable class="parameter">oversize_storage</replaceable>
    > ?
    > 
    > I don't know the purpose of this extra ``"class="parameter"``.
    
    I don't know either.  I guess it makes no visible difference.
    
    Anyway, I had a try to establish some consistency in using that
    attribute, but had to give up.  There is no rhyme and reason for
    me.  All I did was label <replaceable>parent_table</replaceable>
    and <replaceable>source_table</replaceable> with class="parameter",
    since that seemed appropriate.
    
    I left the rest alone, any massive changes in that area would make
    the patch rather noisy.
    
    Attached is version 3.
    
    Yours,
    Laurenz Albe
    
  8. Re: doc: create table improvements

    Daniel Gustafsson <daniel@yesql.se> — 2025-10-16T13:36:18Z

    > On 16 Oct 2025, at 15:19, Laurenz Albe <laurenz.albe@cybertec.at> wrote:
    > On Thu, 2025-10-16 at 11:28 +0800, jian he wrote:
    
    
    >> I don't know the purpose of this extra ``"class="parameter"``.
    > 
    > I don't know either.  I guess it makes no visible difference.
    
    It's simply markup defined by DocBook to indicate what type the content to be
    replaced is, in this case a parameter.  While it might not make any visual
    difference in our rendering, someone might be rendering the docs in another way
    where it does show a difference (like using a different font or decoration to
    differentiate parameters from functions etc).
    
    --
    Daniel Gustafsson
    
    
    
    
    
  9. Re: doc: create table improvements

    Tom Lane <tgl@sss.pgh.pa.us> — 2025-10-16T15:01:13Z

    Daniel Gustafsson <daniel@yesql.se> writes:
    > It's simply markup defined by DocBook to indicate what type the content to be
    > replaced is, in this case a parameter.  While it might not make any visual
    > difference in our rendering, someone might be rendering the docs in another way
    > where it does show a difference (like using a different font or decoration to
    > differentiate parameters from functions etc).
    
    That's the theory anyway.  But we've been so massively inconsistent
    in whether to use class markup or not (no doubt exactly because it
    makes no difference for us) that I would expect a rendering where
    it does make a difference to look really awful.
    
    			regards, tom lane
    
    
    
    
  10. Re: doc: create table improvements

    Laurenz Albe <laurenz.albe@cybertec.at> — 2025-10-20T09:23:25Z

    On Thu, 2025-10-16 at 15:19 +0200, Laurenz Albe wrote:
    > Attached is version 3.
    
    David, do you as the original patch author want to comment?
    The patch is "waiting for author".
    
    Yours,
    Laurenz Albe
    
    
    
    
  11. Re: doc: create table improvements

    David G. Johnston <david.g.johnston@gmail.com> — 2025-10-20T11:41:39Z

    On Monday, October 20, 2025, Laurenz Albe <laurenz.albe@cybertec.at> wrote:
    
    > On Thu, 2025-10-16 at 15:19 +0200, Laurenz Albe wrote:
    > > Attached is version 3.
    >
    > David, do you as the original patch author want to comment?
    > The patch is "waiting for author".
    >
    
    Thanks,
    
    I question whether “parameter” is even the correct class to assign here and
    so would rather avoid the issue by not assigning a class.
    
    “If none is specified, the data will be persistent” would be better written
    “If unspecified the data will be persistent” (or, “if not specified…”)
    
    Everything else looks good.
    
    David J.
    
  12. Re: doc: create table improvements

    Laurenz Albe <laurenz.albe@cybertec.at> — 2025-10-23T04:43:25Z

    On Mon, 2025-10-20 at 07:41 -0400, David G. Johnston wrote:
    > I question whether “parameter” is even the correct class to assign here
    > and so would rather avoid the issue by not assigning a class.
    
    Right.  I have removed the vestiges from my failed attempt to improve
    the "parameter" decorations.
    
    > “If none is specified, the data will be persistent” would be better
    > written “If unspecified the data will be persistent” (or, “if not specified…”)
    
    I decided to use the trusted phrasing "by default".
    
    > Everything else looks good.
    
    Patch attached; if it is fine with you, I'll mark it "ready for committer".
    
    Yours,
    Laurenz Albe
    
  13. Re: doc: create table improvements

    David G. Johnston <david.g.johnston@gmail.com> — 2025-12-16T01:44:33Z

    On Wed, Oct 22, 2025 at 9:43 PM Laurenz Albe <laurenz.albe@cybertec.at>
    wrote:
    
    > Patch attached; if it is fine with you, I'll mark it "ready for committer".
    >
    >
    Thank you.  It works for me.  I've moved the CF entry to the current CF and
    marked it ready for committer.
    
    David J.
    
  14. Re: doc: create table improvements

    Chao Li <li.evan.chao@gmail.com> — 2025-12-16T02:14:00Z

    
    > On Oct 23, 2025, at 12:43, Laurenz Albe <laurenz.albe@cybertec.at> wrote:
    > 
    > On Mon, 2025-10-20 at 07:41 -0400, David G. Johnston wrote:
    >> I question whether “parameter” is even the correct class to assign here
    >> and so would rather avoid the issue by not assigning a class.
    > 
    > Right.  I have removed the vestiges from my failed attempt to improve
    > the "parameter" decorations.
    > 
    >> “If none is specified, the data will be persistent” would be better
    >> written “If unspecified the data will be persistent” (or, “if not specified…”)
    > 
    > I decided to use the trusted phrasing "by default".
    > 
    >> Everything else looks good.
    > 
    > Patch attached; if it is fine with you, I'll mark it "ready for committer".
    > 
    > Yours,
    > Laurenz Albe
    > <v4-0001-Unclutter-CREATE-TABLE-synopsis.patch>
    
    Overall the change looks good to me. I have only one comment about the naming of “oversize_storage”. Why not just “storage_parameters” or similar that sounds more straightforward?
    
    Best regards,
    --
    Chao Li (Evan)
    HighGo Software Co., Ltd.
    https://www.highgo.com/
    
    
    
    
    
    
    
    
  15. Re: doc: create table improvements

    Laurenz Albe <laurenz.albe@cybertec.at> — 2025-12-16T10:25:16Z

    On Tue, 2025-12-16 at 10:14 +0800, Chao Li wrote:
    > > On Oct 23, 2025, at 12:43, Laurenz Albe <laurenz.albe@cybertec.at> wrote:
    > > <v4-0001-Unclutter-CREATE-TABLE-synopsis.patch>
    > 
    > Overall the change looks good to me. I have only one comment about the naming
    > of “oversize_storage”. Why not just “storage_parameters” or similar that
    > sounds more straightforward?
    
    "Storage parameter" is not a good idea, because we use that term for
    something else: CREATE TABLE ... WITH (storage_parameter = value)
    
    I think "oversize_storage" expresses well what is regulated here.
    I'm open to "toast_options" or similar as an alternative, but I think
    it might be better to avoid jargon - not everybody reading that page
    will be familiar with the term.
    
    Yours,
    Laurenz Albe