mirror of
https://github.com/postgres/postgres.git
synced 2025-09-03 15:22:11 +03:00
Allow HOT updates for some expression indexes
If the value of an index expression is unchanged after UPDATE, allow HOT updates where previously we disallowed them, giving a significant performance boost in those cases. Particularly useful for indexes such as JSON->>field where the JSON value changes but the indexed value does not. Submitted as "surjective indexes" patch, now enabled by use of new "recheck_on_update" parameter. Author: Konstantin Knizhnik Reviewer: Simon Riggs, with much wordsmithing and some cleanup
This commit is contained in:
@@ -141,10 +141,12 @@ typedef struct RelationData
|
||||
List *rd_statlist; /* list of OIDs of extended stats */
|
||||
|
||||
/* data managed by RelationGetIndexAttrBitmap: */
|
||||
Bitmapset *rd_indexattr; /* identifies columns used in indexes */
|
||||
Bitmapset *rd_indexattr; /* columns used in non-projection indexes */
|
||||
Bitmapset *rd_projindexattr; /* columns used in projection indexes */
|
||||
Bitmapset *rd_keyattr; /* cols that can be ref'd by foreign keys */
|
||||
Bitmapset *rd_pkattr; /* cols included in primary key */
|
||||
Bitmapset *rd_idattr; /* included in replica identity index */
|
||||
Bitmapset *rd_projidx; /* Oids of projection indexes */
|
||||
|
||||
PublicationActions *rd_pubactions; /* publication actions */
|
||||
|
||||
@@ -245,6 +247,14 @@ typedef struct ForeignKeyCacheInfo
|
||||
Oid conpfeqop[INDEX_MAX_KEYS]; /* PK = FK operator OIDs */
|
||||
} ForeignKeyCacheInfo;
|
||||
|
||||
/*
|
||||
* Options common for all all indexes
|
||||
*/
|
||||
typedef struct GenericIndexOpts
|
||||
{
|
||||
int32 vl_len_;
|
||||
bool recheck_on_update;
|
||||
} GenericIndexOpts;
|
||||
|
||||
/*
|
||||
* StdRdOptions
|
||||
|
Reference in New Issue
Block a user