Thanks to everyone, pushed
Andrey Borodin wrote:
27 марта 2018 г., в 13:45, Alexander Korotkov <a.korot...@postgrespro.ru
<mailto:a.korot...@postgrespro.ru>> написал(а):
On Tue, Mar 27, 2018 at 11:16 AM, Andrey Borodin <x4...@yandex-team.ru
<mailto:x4...@yandex-team.ru>> wrote:
> 27 марта 2018 г., в 12:53, Teodor Sigaev <teo...@sigaev.ru
<mailto:teo...@sigaev.ru>> написал(а):
>
> I have a question: why do not CheckForSerializableConflictIn() move into
begining of gistplacetopage()? Seems, it is the single
function which actually changes page and all predicate locking stuff will
be placed in single function...
gistplacetopage() is called from
1. Buffered build - probably harmless
Yes, harmless, but useless.
2. Finish split - i'm not sure about this. It seems to me that it is
necessary... then your version is correct.
Yes, it's necessary, because GiST scan can end up on non-leaf page. So, scan
and modify of same non-leaf page should conflict.
Checking for serializable conflicts from buffering build seems useless
overhead. gistplacetopage()
is called from only two places: gistinserttuples()
and gistbufferinginserttuples(). In order to evade
useless overhead for buffering build, I've moved
CheckForSerializableConflictIn() into gistinserttuples().
+1
Also, both gistdoinsert() and gistplacetopage() are mind blowing in complexity.
gistinserttuples() looks like a cosy place if we need to add some more.
Best regards, Andrey Borodin.
--
Teodor Sigaev E-mail: teo...@sigaev.ru
WWW: http://www.sigaev.ru/