@ -467,12 +467,22 @@ flagInhIndexes(Archive *fout, TableInfo tblinfo[], int numTables)
/* flagInhAttrs -
* for each dumpable table in tblinfo , flag its inherited attributes
*
* What we need to do here is detect child columns that inherit NOT NULL
* bits from their parents ( so that we needn ' t specify that again for the
* child ) and child columns that have DEFAULT NULL when their parents had
* some non - null default . In the latter case , we make up a dummy AttrDefInfo
* object so that we ' ll correctly emit the necessary DEFAULT NULL clause ;
* otherwise the backend will apply an inherited default to the column .
* What we need to do here is :
*
* - Detect child columns that inherit NOT NULL bits from their parents , so
* that we needn ' t specify that again for the child .
*
* - Detect child columns that have DEFAULT NULL when their parents had some
* non - null default . In this case , we make up a dummy AttrDefInfo object so
* that we ' ll correctly emit the necessary DEFAULT NULL clause ; otherwise
* the backend will apply an inherited default to the column .
*
* - Detect child columns that have a generation expression when their parents
* also have one . Generation expressions are always inherited , so there is
* no need to set them again in child tables , and there is no syntax for it
* either . ( Exception : In binary upgrade mode we dump them because
* inherited tables are recreated standalone first and then reattached to
* the parent . )
*
* modifies tblinfo
*/
@ -510,6 +520,7 @@ flagInhAttrs(DumpOptions *dopt, TableInfo *tblinfo, int numTables)
{
bool foundNotNull ; /* Attr was NOT NULL in a parent */
bool foundDefault ; /* Found a default in a parent */
bool foundGenerated ; /* Found a generated in a parent */
/* no point in examining dropped columns */
if ( tbinfo - > attisdropped [ j ] )
@ -517,6 +528,7 @@ flagInhAttrs(DumpOptions *dopt, TableInfo *tblinfo, int numTables)
foundNotNull = false ;
foundDefault = false ;
foundGenerated = false ;
for ( k = 0 ; k < numParents ; k + + )
{
TableInfo * parent = parents [ k ] ;
@ -528,7 +540,8 @@ flagInhAttrs(DumpOptions *dopt, TableInfo *tblinfo, int numTables)
if ( inhAttrInd > = 0 )
{
foundNotNull | = parent - > notnull [ inhAttrInd ] ;
foundDefault | = ( parent - > attrdefs [ inhAttrInd ] ! = NULL ) ;
foundDefault | = ( parent - > attrdefs [ inhAttrInd ] ! = NULL & & ! parent - > attgenerated [ inhAttrInd ] ) ;
foundGenerated | = parent - > attgenerated [ inhAttrInd ] ;
}
}
@ -570,6 +583,10 @@ flagInhAttrs(DumpOptions *dopt, TableInfo *tblinfo, int numTables)
tbinfo - > attrdefs [ j ] = attrDef ;
}
/* Remove generation expression from child */
if ( foundGenerated & & ! dopt - > binary_upgrade )
tbinfo - > attrdefs [ j ] = NULL ;
}
}
}