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.

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.


regards

--
Tomas Vondra                  http://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services



Reply via email to