From: | Andy Fan <zhihui(dot)fan1213(at)gmail(dot)com> |
---|---|
To: | Andreas Karlsson <andreas(at)proxel(dot)se> |
Cc: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org> |
Subject: | Re: Different results between PostgreSQL and Oracle for "for update" statement |
Date: | 2020-11-20 14:25:23 |
Message-ID: | CAKU4AWo-Uz5LxEPuJDDVF4CioHaYjOKZZXw6SQqRC-Q8DvmL3g@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
Hi Andreas:
Thanks for your input.
On Fri, Nov 20, 2020 at 9:37 PM Andreas Karlsson <andreas(at)proxel(dot)se> wrote:
> On 11/20/20 9:57 AM, Andy Fan wrote:
> > Thank you for your attention. Your suggestion would fix the issue.
> However
> > The difference will cause some risks when users move their application
> > from Oracle
> > to PostgreSQL. So I'd like to think which behavior is more reasonable.
>
> I think PostgreSQL's behavior is more reasonable since it only locks the
> rows it claims to lock and no extra rows. This makes the code easy to
> reason about. And PostgreSQL does not re-evaluate sub queries after
> grabbing the lock which while it might be surprising to some people is
> also a quite nice consistent behavior in practice as long as you are
> aware of it.
>
I admit my way is bad after reading your below question, but I
would not think *it might be surprising to some people* is a good signal
for a design. Would you think "re-evaluate the quals" after grabbing the
lock should be a good idea? And do you know if any other database uses
the postgres's way or Oracle's way? I just heard Oracle might do the
re-check just some minutes before reading your reply and I also found
Oracle doesn't lock the extra rows per my test.
> I do not see why these two scenarios should behave differently (which I
> think they would with your proposed patch):
>
>
Good question! I think my approach doesn't make sense now!
--
Best Regards
Andy Fan
From | Date | Subject | |
---|---|---|---|
Next Message | Peter Eisentraut | 2020-11-20 14:26:39 | Re: Keep elog(ERROR) and ereport(ERROR) calls in the cold path |
Previous Message | Heikki Linnakangas | 2020-11-20 14:19:03 | Re: Refactor pg_rewind code and make it work against a standby |