Thread

  1. remark regarding 4.2.13. Row Constructors

    The Post Office <noreply@postgresql.org> — 2026-06-08T07:42:45Z

    The following documentation comment has been logged on the website:
    
    Page: https://www.postgresql.org/docs/18/sql-expressions.html
    Description:
    
    Hi,
    
    in
    https://www.postgresql.org/docs/current/sql-expressions.html#SQL-SYNTAX-ROW-CONSTRUCTORS
    there is:
    "The key word ROW is optional when there is more than one expression in the
    list."
    I think it should be:
    "The key word ROW is optional when there are more than zero expressions in
    the list."
    
    Test Case:
    [postgres@lin5 ~]$ psql mydb
    psql (19beta1)
    Type "help" for help.
    
    mydb=# select (1);
     ?column?
    ----------
            1
    (1 row)
    
    mydb=# select (1,2);
      row
    -------
     (1,2)
    (1 row)
    
    mydb=# select ();
    ERROR:  syntax error at or near ")"
    LINE 1: select ();
                    ^
    mydb=# select row();
     row
    -----
     ()
    (1 row)
    
    mydb=#
    
    Regards
    Jochen
    
    
    
    
    
  2. Re: remark regarding 4.2.13. Row Constructors

    Daniel Gustafsson <daniel@yesql.se> — 2026-06-09T08:06:20Z

    > On 8 Jun 2026, at 09:42, PG Doc comments form <noreply@postgresql.org> wrote:
    
    > in
    > https://www.postgresql.org/docs/current/sql-expressions.html#SQL-SYNTAX-ROW-CONSTRUCTORS
    > there is:
    > "The key word ROW is optional when there is more than one expression in the
    > list."
    > I think it should be:
    > "The key word ROW is optional when there are more than zero expressions in
    > the list."
    
    "more than zero" sounds a bit odd, my suggestion would be "The key word ROW is
    optional when there is one, or more, expressions in the list."
    
    --
    Daniel Gustafsson
    
    
    
    
    
  3. Re: remark regarding 4.2.13. Row Constructors

    Tom Lane <tgl@sss.pgh.pa.us> — 2026-06-09T16:46:38Z

    Daniel Gustafsson <daniel@yesql.se> writes:
    >> On 8 Jun 2026, at 09:42, PG Doc comments form <noreply@postgresql.org> wrote:
    >> in
    >> https://www.postgresql.org/docs/current/sql-expressions.html#SQL-SYNTAX-ROW-CONSTRUCTORS
    >> there is:
    >> "The key word ROW is optional when there is more than one expression in the
    >> list."
    >> I think it should be:
    >> "The key word ROW is optional when there are more than zero expressions in
    >> the list."
    
    > "more than zero" sounds a bit odd, my suggestion would be "The key word ROW is
    > optional when there is one, or more, expressions in the list."
    
    More to the point, the statement is correct as written and either of
    these changes would make it wrong.  For example, both of these things
    produce a two-column composite value:
    
    postgres=# select row(1,2), (1,2);
      row  |  row  
    -------+-------
     (1,2) | (1,2)
    (1 row)
    
    postgres=# select pg_typeof(row(1,2)), pg_typeof((1,2));
     pg_typeof | pg_typeof 
    -----------+-----------
     record    | record
    (1 row)
    
    But adding more parentheses around a scalar value does not make
    it a composite value:
    
    postgres=# select row(1), (1), ((((1))));
     row | ?column? | ?column? 
    -----+----------+----------
     (1) |        1 |        1
    (1 row)
    
    postgres=# select pg_typeof(row(1)), pg_typeof((1)), pg_typeof(((((1)))));
     pg_typeof | pg_typeof | pg_typeof 
    -----------+-----------+-----------
     record    | integer   | integer
    (1 row)
    
    Maybe there is something we can do to make this clearer, but
    the above isn't it.
    
    			regards, tom lane