Re: wrong error message related to unsupported feature - Mailing list pgsql-hackers

From Pavel Stehule
Subject Re: wrong error message related to unsupported feature
Date
Msg-id CAFj8pRDzs4=gtjH+Ef49Khs1t-sPQ9Q7+XbkjkOCtY1RV4B8Zw@mail.gmail.com
Whole thread Raw
In response to Re: wrong error message related to unsupported feature  (Pavel Stehule <pavel.stehule@gmail.com>)
List pgsql-hackers


čt 20. 3. 2025 v 22:30 odesílatel Pavel Stehule <pavel.stehule@gmail.com> napsal:
Hi

út 18. 3. 2025 v 21:33 odesílatel Álvaro Herrera <alvherre@alvh.no-ip.org> napsal:
On 2025-Mar-18, Pavel Stehule wrote:

> Maybe I found a bug
>
> (2025-03-18 19:28:06) postgres=# create table foo(a int constraint gzero
> check(a > 10) NOT ENFORCED);
> CREATE TABLE
> (2025-03-18 19:29:37) postgres=# insert into foo values(0);
> INSERT 0 1
> (2025-03-18 19:29:49) postgres=# insert into foo values(6);
> INSERT 0 1
> (2025-03-18 19:29:55) postgres=# alter table foo alter constraint gzero
> enforced;
> ERROR:  FOREIGN KEY constraints cannot be marked ENFORCED
> LINE 1: alter table foo alter constraint gzero enforced;
>
> I know so altering enforcing constraint is not supported yet, but the error
> message is surely wrong

Yep, this is a bug all right -- I reported this and related problems a
few days ago [1].  There's a proposal in that thread for how to fix this
(see Amul's email [2] and my followup), but I haven't had time to fully
implement it.  If you want to give it a couple of hours to complete it,
that'd be great.  I have a couple of patches that I need to handle
before coming back to that.

[1] https://postgr.es/m/202503041822.aobpqke3igvb@alvherre.pgsql
[2] https://postgr.es/m/CAAJ_b97hd-jMTS7AjgU6TDBCzDx_KyuKxG+K-DtYmOieg+giyQ@mail.gmail.com

I am looking this issue, and I am not sure if proposed way is the best

cannot we change processCASbits just like ?

   
    if (cas_bits & (CAS_DEFERRABLE | CAS_INITIALLY_DEFERRED))
    {
        if (deferrable)
            *deferrable = true;
        else if (constrType)
            ereport(ERROR,
                    (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
            /* translator: %s is CHECK, UNIQUE, or similar */
                     constrType ?
                     errmsg("%s constraints cannot be marked DEFERRABLE",
                            constrType) :
                     errmsg("constraint cannot be marked DEFERRABLE"),
                     parser_errposition(location)));
    }
    ...

Probably can be better to not try to read from catalog in this moment, and then we can accept so we don't know constraint type

something like attached patch

Regards

Pavel
 

Regards

Pavel
   








--
Álvaro Herrera         PostgreSQL Developer  —  https://www.EnterpriseDB.com/
Attachment

pgsql-hackers by date:

Previous
From: Andrei Lepikhov
Date:
Subject: Re: Proposal - Allow extensions to set a Plan Identifier
Next
From: Rahila Syed
Date:
Subject: Re: Improve monitoring of shared memory allocations