mirror of
https://github.com/postgres/postgres.git
synced 2025-06-16 06:01:02 +03:00
Generated columns
This is an SQL-standard feature that allows creating columns that are computed from expressions rather than assigned, similar to a view or materialized view but on a column basis. This implements one kind of generated column: stored (computed on write). Another kind, virtual (computed on read), is planned for the future, and some room is left for it. Reviewed-by: Michael Paquier <michael@paquier.xyz> Reviewed-by: Pavel Stehule <pavel.stehule@gmail.com> Discussion: https://www.postgresql.org/message-id/flat/b151f851-4019-bdb1-699e-ebab07d2f40a@2ndquadrant.com
This commit is contained in:
@ -102,7 +102,7 @@ static void EvalPlanQualStart(EPQState *epqstate, EState *parentestate,
|
||||
Plan *planTree);
|
||||
|
||||
/*
|
||||
* Note that GetUpdatedColumns() also exists in commands/trigger.c. There does
|
||||
* Note that GetAllUpdatedColumns() also exists in commands/trigger.c. There does
|
||||
* not appear to be any good header to put it into, given the structures that
|
||||
* it uses, so we let them be duplicated. Be sure to update both if one needs
|
||||
* to be changed, however.
|
||||
@ -111,6 +111,9 @@ static void EvalPlanQualStart(EPQState *epqstate, EState *parentestate,
|
||||
(exec_rt_fetch((relinfo)->ri_RangeTableIndex, estate)->insertedCols)
|
||||
#define GetUpdatedColumns(relinfo, estate) \
|
||||
(exec_rt_fetch((relinfo)->ri_RangeTableIndex, estate)->updatedCols)
|
||||
#define GetAllUpdatedColumns(relinfo, estate) \
|
||||
(bms_union(exec_rt_fetch((relinfo)->ri_RangeTableIndex, estate)->updatedCols, \
|
||||
exec_rt_fetch((relinfo)->ri_RangeTableIndex, estate)->extraUpdatedCols))
|
||||
|
||||
/* end of local decls */
|
||||
|
||||
@ -1316,6 +1319,7 @@ InitResultRelInfo(ResultRelInfo *resultRelInfo,
|
||||
resultRelInfo->ri_FdwState = NULL;
|
||||
resultRelInfo->ri_usesFdwDirectModify = false;
|
||||
resultRelInfo->ri_ConstraintExprs = NULL;
|
||||
resultRelInfo->ri_GeneratedExprs = NULL;
|
||||
resultRelInfo->ri_junkFilter = NULL;
|
||||
resultRelInfo->ri_projectReturning = NULL;
|
||||
resultRelInfo->ri_onConflictArbiterIndexes = NIL;
|
||||
@ -2328,7 +2332,7 @@ ExecUpdateLockMode(EState *estate, ResultRelInfo *relinfo)
|
||||
* been modified, then we can use a weaker lock, allowing for better
|
||||
* concurrency.
|
||||
*/
|
||||
updatedCols = GetUpdatedColumns(relinfo, estate);
|
||||
updatedCols = GetAllUpdatedColumns(relinfo, estate);
|
||||
keyCols = RelationGetIndexAttrBitmap(relinfo->ri_RelationDesc,
|
||||
INDEX_ATTR_BITMAP_KEY);
|
||||
|
||||
|
Reference in New Issue
Block a user