From: | Dean Rasheed <dean(dot)a(dot)rasheed(at)gmail(dot)com> |
---|---|
To: | Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> |
Cc: | exclusion(at)gmail(dot)com, pgsql-bugs(at)lists(dot)postgresql(dot)org |
Subject: | Re: BUG #17809: MERGE ... UPDATE fails with BEFORE ROW UPDATE trigger when target row updated concurrently |
Date: | 2023-03-12 11:14:29 |
Message-ID: | CAEZATCU8XEmR0JWKDtyb7iZ=qCffxS9uyJt0iOZ4TV4RT+ow1w@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
On Sat, 11 Mar 2023 at 18:12, Dean Rasheed <dean(dot)a(dot)rasheed(at)gmail(dot)com> wrote:
>
> Attached is an updated patch that I'm more happy with now, and a
> slightly modified one for v15, keeping the trigger API
> backwards-compatible for extensions.
>
Going over this again, I spotted another couple of things:
Passing recheckIndexes to ExecUpdateEpilogue() is pointless, since
that's something that's only ever computed and used locally within
ExecUpdateEpilogue(). It's also pointless for the caller to
list_free() it, since the caller only has a pointer to the empty list,
not the list built in ExecUpdateEpilogue(), which it should free. This
is pretty harmless, but I might as well tidy it up while hacking on
this.
If a BEFORE ROW trigger returns NULL to skip an update or delete,
ExecMergeMatched() will still update estate->es_processed, and so the
final row count in the command tag will be wrong. I'll tackle that in
a follow-on patch, since it's really a separate bug.
Regards,
Dean
Attachment | Content-Type | Size |
---|---|---|
bug-17809-v4.patch | text/x-patch | 51.2 KB |
bug-17809-v4-15.patch | text/x-patch | 53.5 KB |
From | Date | Subject | |
---|---|---|---|
Next Message | Alexander Lakhin | 2023-03-12 12:00:01 | Re: BUG #17830: Incorrect memory access in trgm_regexp |
Previous Message | Dean Rasheed | 2023-03-11 18:12:29 | Re: BUG #17809: MERGE ... UPDATE fails with BEFORE ROW UPDATE trigger when target row updated concurrently |