Re: BUG #17360: array_to_string should be immutable instead of stable

From: "David G(dot) Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: gergely(dot)czuczy(at)harmless(dot)hu, PostgreSQL mailing lists <pgsql-bugs(at)lists(dot)postgresql(dot)org>
Subject: Re: BUG #17360: array_to_string should be immutable instead of stable
Date: 2022-01-10 15:54:03
Message-ID: CAKFQuwYUZdSoDDCezUYu_HApCRzS6bquLskOoBVSPJniSkmGBg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

On Mon, Jan 10, 2022 at 7:54 AM Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:

> PG Bug reporting form <noreply(at)postgresql(dot)org> writes:
> > The array_to_string function should have a volatility of immutable,
>
> Nope. It invokes an arbitrary datatype I/O function,
> which might only be stable. As an example:
>
> regression=# begin;
> BEGIN
> regression=*# select array_to_string(array[now()], ',');
>

That feels wrong. It's not like we are passing the "now()" function to the
function and invoking it later. So far as array_to_string is concerned it
is being given a literal value.

By your argument, isfinite(timestamp) should be stable but it is immutable
(it's the first example I stumbled across, I suspect there are quite a few
more I could contrive).

select isfinite(now());

> array_to_string
> -------------------------------
> 2022-01-10 09:47:06.605304-05
> (1 row)
>
> regression=*# set timezone to UTC;
> SET
> regression=*# select array_to_string(array[now()], ',');
> array_to_string
> -------------------------------
> 2022-01-10 14:47:06.605304+00
> (1 row)
>
> [...]

> Ideally, perhaps, we'd determine the volatility level of
> polymorphic functions like array_to_string() based on the
> actual input data types --- but it's hard to see how to do
> that.
>

In short, that doesn't make sense. The volatility level of a function is
only determined by the implementation code of said function. The function
invoking expression volatility level depends upon the most volatile
behavior of all functions used in the expression. That we should be doing
if we aren't already.

David J.

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message David G. Johnston 2022-01-10 16:17:06 Re: BUG #17360: array_to_string should be immutable instead of stable
Previous Message Gergely Czuczy 2022-01-10 15:01:56 Re: BUG #17360: array_to_string should be immutable instead of stable