mirror of
https://github.com/postgres/postgres.git
synced 2025-08-21 10:42:50 +03:00
Optimize update of tables with generated columns
When updating a table row with generated columns, only recompute those generated columns whose base columns have changed in this update and keep the rest unchanged. This can result in a significant performance benefit. The required information was already kept in RangeTblEntry.extraUpdatedCols; we just have to make use of it. Reviewed-by: Pavel Stehule <pavel.stehule@gmail.com> Discussion: https://www.postgresql.org/message-id/flat/b05e781a-fa16-6b52-6738-761181204567@2ndquadrant.com
This commit is contained in:
@@ -419,7 +419,7 @@ ExecSimpleRelationInsert(EState *estate, TupleTableSlot *slot)
|
||||
/* Compute stored generated columns */
|
||||
if (rel->rd_att->constr &&
|
||||
rel->rd_att->constr->has_generated_stored)
|
||||
ExecComputeStoredGenerated(estate, slot);
|
||||
ExecComputeStoredGenerated(estate, slot, CMD_INSERT);
|
||||
|
||||
/* Check the constraints of the tuple */
|
||||
if (rel->rd_att->constr)
|
||||
@@ -485,7 +485,7 @@ ExecSimpleRelationUpdate(EState *estate, EPQState *epqstate,
|
||||
/* Compute stored generated columns */
|
||||
if (rel->rd_att->constr &&
|
||||
rel->rd_att->constr->has_generated_stored)
|
||||
ExecComputeStoredGenerated(estate, slot);
|
||||
ExecComputeStoredGenerated(estate, slot, CMD_UPDATE);
|
||||
|
||||
/* Check the constraints of the tuple */
|
||||
if (rel->rd_att->constr)
|
||||
|
Reference in New Issue
Block a user