mirror of
https://github.com/postgres/postgres.git
synced 2025-06-29 10:41:53 +03:00
Predicate locking in GIN index
Predicate locks are used on per page basis only if fastupdate = off, in opposite case predicate lock on pending list will effectively lock whole index, to reduce locking overhead, just lock a relation. Entry and posting trees are essentially B-tree, so locks are acquired on leaf pages only. Author: Shubham Barai with some editorization by me and Dmitry Ivanov Review by: Alexander Korotkov, Dmitry Ivanov, Fedor Sigaev Discussion: https://www.postgresql.org/message-id/flat/CALxAEPt5sWW+EwTaKUGFL5_XFcZ0MuGBcyJ70oqbWqr42YKR8Q@mail.gmail.com
This commit is contained in:
@ -23,6 +23,7 @@
|
||||
#include "miscadmin.h"
|
||||
#include "storage/indexfsm.h"
|
||||
#include "storage/lmgr.h"
|
||||
#include "storage/predicate.h"
|
||||
#include "utils/builtins.h"
|
||||
#include "utils/index_selfuncs.h"
|
||||
#include "utils/typcache.h"
|
||||
@ -49,7 +50,7 @@ ginhandler(PG_FUNCTION_ARGS)
|
||||
amroutine->amsearchnulls = false;
|
||||
amroutine->amstorage = true;
|
||||
amroutine->amclusterable = false;
|
||||
amroutine->ampredlocks = false;
|
||||
amroutine->ampredlocks = true;
|
||||
amroutine->amcanparallel = false;
|
||||
amroutine->amkeytype = InvalidOid;
|
||||
|
||||
@ -716,3 +717,10 @@ ginUpdateStats(Relation index, const GinStatsData *stats)
|
||||
|
||||
END_CRIT_SECTION();
|
||||
}
|
||||
|
||||
void
|
||||
GinCheckForSerializableConflictIn(Relation relation, HeapTuple tuple, Buffer buffer)
|
||||
{
|
||||
if (!GinGetUseFastUpdate(relation))
|
||||
CheckForSerializableConflictIn(relation, tuple, buffer);
|
||||
}
|
||||
|
Reference in New Issue
Block a user