Re: Unexpected result from ALTER FUNCTION— looks like a bug
David G. Johnston <david.g.johnston@gmail.com>
From: "David G. Johnston" <david.g.johnston@gmail.com>
To: Bryn Llewellyn <bryn@yugabyte.com>
Cc: pgsql-general list <pgsql-general@lists.postgresql.org>
Date: 2022-04-20T02:21:19Z
Lists: pgsql-general
On Tue, Apr 19, 2022 at 7:07 PM Bryn Llewellyn <bryn@yugabyte.com> wrote:
> *SUMMARY*
>
> This part of the syntax diagram for "alter function":
>
> *ALTER FUNCTION name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
> action [ … ]*
>
> says that the first "action" can be followed (without punctuation) by
> zero, one, or many other actions. A semantic rule says that no particular
> action can be specified more than once. My tests used these possible
> actions:
>
>
>
>
>
>
> *alter function s1.f()security invokerset timezone = 'UTC'stable*
> *parallel safe*
> *;*
>
> It brings this new status:
>
>
>
> * name | type | security | proconfig
> | volatility
> | parallel ------+------+----------+---------------------------------------------------------+------------+------------ f
> | func | invoker | {TimeZone=UTC}
> | stable | restricted*
>
> This is the bug.
>
It has room for improvement from a user experience perspective.
While I haven't experimented with this for confirmation, what you are
proposing here (set + parallel safe) is an impossible runtime combination
(semantic rule) but perfectly valid to write syntactically. Your function
must either be restricted or unsafe per the rules for specifying parallel
mode.
If this is indeed what is happening then the documentation should make note
of it. Whether the server should emit a notice or warning in this
situation is less clear. I'm doubting we would introduce an error at this
point but probably should have when parallelism was first added to the
system.
David J.
Commits
-
Fix breakage in AlterFunction().
- f583633bc130 13.7 landed
- 9130f8cbb919 11.16 landed
- 481a99811a41 12.11 landed
- 409bcfda6bd6 10.21 landed
- 344a225cb9d4 15.0 landed
- 08a9e7a8c791 14.3 landed