mirror of
https://github.com/postgres/postgres.git
synced 2025-10-21 02:52:47 +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:
@@ -51,6 +51,7 @@ typedef enum relopt_kind
|
||||
RELOPT_KIND_PARTITIONED = (1 << 11),
|
||||
/* if you add a new kind, make sure you update "last_default" too */
|
||||
RELOPT_KIND_LAST_DEFAULT = RELOPT_KIND_PARTITIONED,
|
||||
RELOPT_KIND_INDEX = RELOPT_KIND_BTREE|RELOPT_KIND_HASH|RELOPT_KIND_GIN|RELOPT_KIND_SPGIST,
|
||||
/* some compilers treat enums as signed ints, so we can't use 1 << 31 */
|
||||
RELOPT_KIND_MAX = (1 << 30)
|
||||
} relopt_kind;
|
||||
@@ -276,6 +277,7 @@ extern bytea *heap_reloptions(char relkind, Datum reloptions, bool validate);
|
||||
extern bytea *view_reloptions(Datum reloptions, bool validate);
|
||||
extern bytea *index_reloptions(amoptions_function amoptions, Datum reloptions,
|
||||
bool validate);
|
||||
extern bytea *index_generic_reloptions(Datum reloptions, bool validate);
|
||||
extern bytea *attribute_reloptions(Datum reloptions, bool validate);
|
||||
extern bytea *tablespace_reloptions(Datum reloptions, bool validate);
|
||||
extern LOCKMODE AlterTableGetRelOptionsLockLevel(List *defList);
|
||||
|
Reference in New Issue
Block a user