| From: | Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com> | 
|---|---|
| To: | Álvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> | 
| Cc: | PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org> | 
| Subject: | Re: wrong error message related to unsupported feature | 
| Date: | 2025-03-23 07:49:38 | 
| Message-ID: | CAFj8pRDzs4=gtjH+Ef49Khs1t-sPQ9Q7+XbkjkOCtY1RV4B8Zw@mail.gmail.com | 
| Views: | Whole Thread | Raw Message | Download mbox | Resend email | 
| Thread: | |
| Lists: | pgsql-hackers | 
čt 20. 3. 2025 v 22:30 odesílatel Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>
napsal:
> Hi
>
> út 18. 3. 2025 v 21:33 odesílatel Álvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)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 | Content-Type | Size | 
|---|---|---|
| fix-message.patch | text/x-patch | 5.6 KB | 
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Rahila Syed | 2025-03-23 08:36:47 | Re: Improve monitoring of shared memory allocations | 
| Previous Message | Andrei Lepikhov | 2025-03-23 07:25:42 | Re: Proposal - Allow extensions to set a Plan Identifier |