Re: Where's the doc for "array()" — as in "select array(values (17), (42))"

From: Bryn Llewellyn <bryn(at)yugabyte(dot)com>
To: Tom Lane PostgreSQL <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)com>, pgsql-general list <pgsql-general(at)lists(dot)postgresql(dot)org>
Subject: Re: Where's the doc for "array()" — as in "select array(values (17), (42))"
Date: 2022-09-19 16:43:54
Message-ID: FD968796-42C5-4FA1-AB61-66DD34049F79@yugabyte.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

> tgl(at)sss(dot)pgh(dot)pa(dot)us wrote:
>
>> bryn(at)yugabyte(dot)com wrote:
>>
>> Why is the "array()" constructor not found in "pg_proc"?
>
> Because it isn't a function. Yeah, it kind of looks like one, but its argument is a subquery. If SQL had first-class functions and closures, maybe ARRAY() could be implemented as an ordinary function. But I don't see any plausible way to do that as things stand.
>
> There are a bunch of other things that look like functions but aren't in pg_proc, too :-(. Most of them are just catering to the SQL committee's weird allergy to writing functions with plain function syntax. But ARRAY()'s problem is semantic not syntactic.

There must be a significant difference between this:

select 'dog'

and this:

(select 'dog')

This works fine:

select length( (select 'dog') )

But without the doubled parentheses, it causes a syntax error.

On the other hand, an extra pair of surrounding parentheses here

select array( (values (17), (42)) )

while not necessary, *is* tolerated.

All this started because I had wrongly assumed that "pg_terminate_backend()" would have the same character as "array()" by not being subject to the "execute" privilege — just as is the case for all SQL built-ins in Oracle database, like "length()". I have a better mental model now.

Anyway, I know what to do in future. I'll simply look in pg_proc on a case-by-case basis.

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message David G. Johnston 2022-09-19 17:04:35 Re: Where's the doc for "array()" — as in "select array(values (17), (42))"
Previous Message Bryn Llewellyn 2022-09-19 16:23:57 Re: Where's the doc for "array()" — as in "select array(values (17), (42))"