Thread
-
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 -
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
-
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