diff --git a/src/backend/distributed/commands/statistics.c b/src/backend/distributed/commands/statistics.c index 223e8f612..b43f6335e 100644 --- a/src/backend/distributed/commands/statistics.c +++ b/src/backend/distributed/commands/statistics.c @@ -774,9 +774,10 @@ CreateAlterCommandIfTargetNotDefault(Oid statsOid) } Form_pg_statistic_ext statisticsForm = (Form_pg_statistic_ext) GETSTRUCT(tup); + int16 currentStxstattarget = getStxstattarget_compat(tup); ReleaseSysCache(tup); - if (statisticsForm->stxstattarget == -1) + if (currentStxstattarget == -1) { return NULL; } @@ -786,7 +787,8 @@ CreateAlterCommandIfTargetNotDefault(Oid statsOid) char *schemaName = get_namespace_name(statisticsForm->stxnamespace); char *statName = NameStr(statisticsForm->stxname); - alterStatsStmt->stxstattarget = statisticsForm->stxstattarget; + alterStatsStmt->stxstattarget = getAlterStatsStxstattarget_compat( + currentStxstattarget); alterStatsStmt->defnames = list_make2(makeString(schemaName), makeString(statName)); return DeparseAlterStatisticsStmt((Node *) alterStatsStmt); diff --git a/src/backend/distributed/deparser/deparse_statistics_stmts.c b/src/backend/distributed/deparser/deparse_statistics_stmts.c index 4d7211939..79be835b9 100644 --- a/src/backend/distributed/deparser/deparse_statistics_stmts.c +++ b/src/backend/distributed/deparser/deparse_statistics_stmts.c @@ -177,8 +177,9 @@ AppendAlterStatisticsSchemaStmt(StringInfo buf, AlterObjectSchemaStmt *stmt) static void AppendAlterStatisticsStmt(StringInfo buf, AlterStatsStmt *stmt) { - appendStringInfo(buf, "ALTER STATISTICS %s SET STATISTICS %d", NameListToQuotedString( - stmt->defnames), stmt->stxstattarget); + appendStringInfo(buf, "ALTER STATISTICS %s SET STATISTICS %d", + NameListToQuotedString(stmt->defnames), + getIntStxstattarget_compat(stmt->stxstattarget)); } diff --git a/src/include/pg_version_compat.h b/src/include/pg_version_compat.h index 919c1f7bc..3230a0fcf 100644 --- a/src/include/pg_version_compat.h +++ b/src/include/pg_version_compat.h @@ -83,6 +83,21 @@ getAttstattarget_compat(HeapTuple attTuple) } +#include "catalog/pg_statistic_ext.h" + +static inline int16 +getStxstattarget_compat(HeapTuple tup) +{ + bool isnull; + Datum dat = SysCacheGetAttr(STATEXTOID, tup, + Anum_pg_statistic_ext_stxstattarget, &isnull); + return (isnull ? -1 : DatumGetInt16(dat)); +} + + +#define getAlterStatsStxstattarget_compat(a) ((Node *) makeInteger(a)) +#define getIntStxstattarget_compat(a) (intVal(a)) + #else #include "access/htup_details.h" @@ -93,6 +108,17 @@ getAttstattarget_compat(HeapTuple attTuple) } +#include "catalog/pg_statistic_ext.h" +static inline int32 +getStxstattarget_compat(HeapTuple tup) +{ + return ((Form_pg_statistic_ext) GETSTRUCT(tup))->stxstattarget; +} + + +#define getAlterStatsStxstattarget_compat(a) (a) +#define getIntStxstattarget_compat(a) (a) + #endif #if PG_VERSION_NUM >= PG_VERSION_16