Re: SQL:2011 application time

From: Paul Jungwirth <pj(at)illuminatedcomputing(dot)com>
To: Peter Eisentraut <peter(at)eisentraut(dot)org>, Robert Haas <robertmhaas(at)gmail(dot)com>
Cc: jian he <jian(dot)universality(at)gmail(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: SQL:2011 application time
Date: 2024-05-09 04:24:09
Message-ID: 1426589a-83cb-4a89-bf40-713970c07e63@illuminatedcomputing.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Here are a couple new patches, rebased to e305f715, addressing Peter's feedback. I'm still working
on integrating jian he's suggestions for the last patch, so I've omitted that one here.

On 5/8/24 06:51, Peter Eisentraut wrote:
> About v2-0001-Fix-ON-CONFLICT-DO-NOTHING-UPDATE-for-temporal-in.patch, I think the
> ideas are right, but I wonder if we can fine-tune the new conditionals a bit.
>
> --- a/src/backend/executor/execIndexing.c
> +++ b/src/backend/executor/execIndexing.c
> @@ -210,7 +210,7 @@ ExecOpenIndices(ResultRelInfo *resultRelInfo, bool speculative)
>                  * If the indexes are to be used for speculative insertion, add extra
>                  * information required by unique index entries.
>                  */
> -               if (speculative && ii->ii_Unique)
> +               if (speculative && ii->ii_Unique && !ii->ii_HasWithoutOverlaps)
>                         BuildSpeculativeIndexInfo(indexDesc, ii);
>
> Here, I think we could check !indexDesc->rd_index->indisexclusion instead.  So we
> wouldn't need ii_HasWithoutOverlaps.

Okay.

> Or we could push this into BuildSpeculativeIndexInfo(); it could just skip the rest
> if an exclusion constraint is passed, on the theory that all the speculative index
> info is already present in that case.

I like how BuildSpeculativeIndexInfo starts with an Assert that it's given a unique index, so I've
left the check outside the function. This seems cleaner anyway: the function stays more focused.

> --- a/src/backend/optimizer/util/plancat.c
> +++ b/src/backend/optimizer/util/plancat.c
> @@ -815,7 +815,7 @@ infer_arbiter_indexes(PlannerInfo *root)
>          */
>         if (indexOidFromConstraint == idxForm->indexrelid)
>         {
> -           if (!idxForm->indisunique && onconflict->action == ONCONFLICT_UPDATE)
> +           if ((!idxForm->indisunique || idxForm->indisexclusion) && onconflict->action ==
> ONCONFLICT_UPDATE)
>                 ereport(ERROR,
>                         (errcode(ERRCODE_WRONG_OBJECT_TYPE),
>                          errmsg("ON CONFLICT DO UPDATE not supported with exclusion constraints")));
>
> Shouldn't this use only idxForm->indisexclusion anyway?  Like
>
> +           if (idxForm->indisexclusion && onconflict->action == ONCONFLICT_UPDATE)
>
> That matches what the error message is reporting afterwards.

Agreed.

>          * constraints), so index under consideration can be immediately
>          * skipped if it's not unique
>          */
> -       if (!idxForm->indisunique)
> +       if (!idxForm->indisunique || idxForm->indisexclusion)
>             goto next;
>
> Maybe here we need a comment.  Or make that a separate statement, like

Yes, that is nice. Done.

Yours,

--
Paul ~{:-)
pj(at)illuminatedcomputing(dot)com

Attachment Content-Type Size
v2-0001-Fix-ON-CONFLICT-DO-NOTHING-UPDATE-for-temporal-in.patch text/x-patch 21.5 KB
v2-0002-Don-t-treat-WITHOUT-OVERLAPS-indexes-as-unique-in.patch text/x-patch 3.9 KB

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Michael Paquier 2024-05-09 04:27:08 Re: [PATCH] json_lex_string: don't overread on bad UTF8
Previous Message Bruce Momjian 2024-05-09 04:03:50 First draft of PG 17 release notes