Re: Check-out mutable functions in check constraints - Mailing list pgsql-hackers

From Kyotaro Horiguchi
Subject Re: Check-out mutable functions in check constraints
Date
Msg-id 20190716.175234.265604823.horikyota.ntt@gmail.com
Whole thread Raw
In response to Re: Check-out mutable functions in check constraints  (Tomas Vondra <tomas.vondra@2ndquadrant.com>)
List pgsql-hackers
Mmm.

# I eventually found messages sent to me stashed in unexpcted
# place. I felt I was in a void space for these days.. That's
# silly!

Thank you for the comment.

# Putting aside the appliability(?) of this check..

At Fri, 12 Jul 2019 13:14:57 +0200, Tomas Vondra <tomas.vondra@2ndquadrant.com> wrote in
<20190712111457.ekkcgx5mpkxl2ooh@development>
> On Fri, Jul 12, 2019 at 03:44:58PM +0900, Kyotaro Horiguchi wrote:
> >Hello.
> >
> >As mentioned in the following message:
> >
> >https://www.postgresql.org/message-id/20190712.150527.145133646.horikyota.ntt%40gmail.com
> >
> >Mutable function are allowed in check constraint expressions but
> >it is not right. The attached is a proposed fix for it including
> >regression test.
> >
> 
> I think the comment in parse_expr.c is wrong:
> 
>    /*
>     * All SQL value functions are stable so we reject them in check
>     * constraint expressions.
>     */
>    if (pstate->p_expr_kind == EXPR_KIND_CHECK_CONSTRAINT)
>        ereport(ERROR,
>                (errcode(ERRCODE_INVALID_OBJECT_DEFINITION),
>                 errmsg("mutable functions are not allowed in check
>                 constraints")));
> 
> At first it claims SQL value functions are stable, but then rejects
> them
> with a message that they're mutable.

Isn't Stable mutable? By definition stable functions can return
different values with the same input. But the message may be
somewhat confusing for unaccostomed users.

> Also, the other places use "cannot ..." messages:
> 
>    case EXPR_KIND_COLUMN_DEFAULT:
>        err = _("cannot use column reference in DEFAULT expression");
>        break;
> 
> so maybe these new checks should use the same style.

It is following to messages like the follows:

parse_func.c:2497
|    case EXPR_KIND_CHECK_CONSTRAINT:
|    case EXPR_KIND_DOMAIN_CHECK:
|      err = _("set-returning functions are not allowed in check constraints");

Should we unify them? "are not allowed in" is used in
parse_func.c and parse_agg.c, and "cannot use" is used in
parse_expr.c for the same instruction.

regards.

-- 
Kyotaro Horiguchi
NTT Open Source Software Center



pgsql-hackers by date:

Previous
From: Dilip Kumar
Date:
Subject: Re: POC: Cleaning up orphaned files using undo logs
Next
From: Adrien Nayrat
Date:
Subject: Re: Detailed questions about pg_xact_commit_timestamp