mirror of
https://github.com/postgres/postgres.git
synced 2025-09-02 04:21:28 +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:
@@ -2390,6 +2390,7 @@ _copyRangeTblEntry(const RangeTblEntry *from)
|
||||
COPY_BITMAPSET_FIELD(selectedCols);
|
||||
COPY_BITMAPSET_FIELD(insertedCols);
|
||||
COPY_BITMAPSET_FIELD(updatedCols);
|
||||
COPY_BITMAPSET_FIELD(extraUpdatedCols);
|
||||
COPY_NODE_FIELD(securityQuals);
|
||||
|
||||
return newnode;
|
||||
@@ -2888,6 +2889,7 @@ _copyColumnDef(const ColumnDef *from)
|
||||
COPY_NODE_FIELD(cooked_default);
|
||||
COPY_SCALAR_FIELD(identity);
|
||||
COPY_NODE_FIELD(identitySequence);
|
||||
COPY_SCALAR_FIELD(generated);
|
||||
COPY_NODE_FIELD(collClause);
|
||||
COPY_SCALAR_FIELD(collOid);
|
||||
COPY_NODE_FIELD(constraints);
|
||||
|
@@ -2565,6 +2565,7 @@ _equalColumnDef(const ColumnDef *a, const ColumnDef *b)
|
||||
COMPARE_NODE_FIELD(cooked_default);
|
||||
COMPARE_SCALAR_FIELD(identity);
|
||||
COMPARE_NODE_FIELD(identitySequence);
|
||||
COMPARE_SCALAR_FIELD(generated);
|
||||
COMPARE_NODE_FIELD(collClause);
|
||||
COMPARE_SCALAR_FIELD(collOid);
|
||||
COMPARE_NODE_FIELD(constraints);
|
||||
@@ -2664,6 +2665,7 @@ _equalRangeTblEntry(const RangeTblEntry *a, const RangeTblEntry *b)
|
||||
COMPARE_BITMAPSET_FIELD(selectedCols);
|
||||
COMPARE_BITMAPSET_FIELD(insertedCols);
|
||||
COMPARE_BITMAPSET_FIELD(updatedCols);
|
||||
COMPARE_BITMAPSET_FIELD(extraUpdatedCols);
|
||||
COMPARE_NODE_FIELD(securityQuals);
|
||||
|
||||
return true;
|
||||
|
@@ -2792,6 +2792,7 @@ _outColumnDef(StringInfo str, const ColumnDef *node)
|
||||
WRITE_NODE_FIELD(cooked_default);
|
||||
WRITE_CHAR_FIELD(identity);
|
||||
WRITE_NODE_FIELD(identitySequence);
|
||||
WRITE_CHAR_FIELD(generated);
|
||||
WRITE_NODE_FIELD(collClause);
|
||||
WRITE_OID_FIELD(collOid);
|
||||
WRITE_NODE_FIELD(constraints);
|
||||
@@ -3096,6 +3097,7 @@ _outRangeTblEntry(StringInfo str, const RangeTblEntry *node)
|
||||
WRITE_BITMAPSET_FIELD(selectedCols);
|
||||
WRITE_BITMAPSET_FIELD(insertedCols);
|
||||
WRITE_BITMAPSET_FIELD(updatedCols);
|
||||
WRITE_BITMAPSET_FIELD(extraUpdatedCols);
|
||||
WRITE_NODE_FIELD(securityQuals);
|
||||
}
|
||||
|
||||
@@ -3467,6 +3469,13 @@ _outConstraint(StringInfo str, const Constraint *node)
|
||||
WRITE_CHAR_FIELD(generated_when);
|
||||
break;
|
||||
|
||||
case CONSTR_GENERATED:
|
||||
appendStringInfoString(str, "GENERATED");
|
||||
WRITE_NODE_FIELD(raw_expr);
|
||||
WRITE_STRING_FIELD(cooked_expr);
|
||||
WRITE_CHAR_FIELD(generated_when);
|
||||
break;
|
||||
|
||||
case CONSTR_CHECK:
|
||||
appendStringInfoString(str, "CHECK");
|
||||
WRITE_BOOL_FIELD(is_no_inherit);
|
||||
|
@@ -1430,6 +1430,7 @@ _readRangeTblEntry(void)
|
||||
READ_BITMAPSET_FIELD(selectedCols);
|
||||
READ_BITMAPSET_FIELD(insertedCols);
|
||||
READ_BITMAPSET_FIELD(updatedCols);
|
||||
READ_BITMAPSET_FIELD(extraUpdatedCols);
|
||||
READ_NODE_FIELD(securityQuals);
|
||||
|
||||
READ_DONE();
|
||||
|
Reference in New Issue
Block a user