public inbox for [email protected]  
help / color / mirror / Atom feed
From: Tom Lane <[email protected]>
To: Daniel Gustafsson <[email protected]>
Cc: [email protected]
Cc: PostgreSQL-documentation <[email protected]>
Subject: Re: remark regarding 4.2.13. Row Constructors
Date: Tue, 09 Jun 2026 12:46:38 -0400
Message-ID: <[email protected]> (raw)
In-Reply-To: <[email protected]>
References: <[email protected]>
	<[email protected]>

Daniel Gustafsson <[email protected]> writes:
>> On 8 Jun 2026, at 09:42, PG Doc comments form <[email protected]> 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






view thread (3+ messages)

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: [email protected]
  Cc: [email protected], [email protected], [email protected], [email protected]
  Subject: Re: remark regarding 4.2.13. Row Constructors
  In-Reply-To: <[email protected]>

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

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