Ensure relcache consistency around generated columns
authorPeter Eisentraut <peter@eisentraut.org>
Thu, 6 Feb 2020 20:21:04 +0000 (21:21 +0100)
committerPeter Eisentraut <peter@eisentraut.org>
Thu, 6 Feb 2020 20:25:01 +0000 (21:25 +0100)
In certain transient states, it's possible that a table has attributes
with attgenerated set but no default expressions in pg_attrdef yet.
In that case, the old code path would not set
relation->rd_att->constr->has_generated_stored, unless
relation->rd_att->constr was also populated for some other reason.
There was probably no practical impact, but it's better to keep this
consistent.

Reported-by: Andres Freund <andres@anarazel.de>
Discussion: https://www.postgresql.org/message-id/flat/20200115181105.ad6ab6dlgyww3lb6%40alap3.anarazel.de

src/backend/utils/cache/relcache.c

index df025a5a3027bc2a82cee4c9c9b78b9d948b97e5..ff70326474fde4a829b4848a136caf3fbd12195e 100644 (file)
@@ -669,8 +669,11 @@ RelationBuildTupleDesc(Relation relation)
        /*
         * Set up constraint/default info
         */
-       if (constr->has_not_null || ndef > 0 ||
-               attrmiss || relation->rd_rel->relchecks)
+       if (constr->has_not_null ||
+               constr->has_generated_stored ||
+               ndef > 0 ||
+               attrmiss ||
+               relation->rd_rel->relchecks)
        {
                relation->rd_att->constr = constr;