postgres.git / summary / log / commit / refs
commit 66061077155d68463ec00604ba7d6f0ae69716e8
Author: Tomas Vondra <tomas.vondra@postgresql.org>
Date: Sun Sep 19 22:34:57 2021 +0000
Disallow extended statistics on system columns
Since introduction of extended statistics, we've disallowed references
to system columns. So for example
CREATE STATISTICS s ON ctid FROM t;
would fail. But with extended statistics on expressions, it was possible
to work around this limitation quite easily
CREATE STATISTICS s ON (ctid::text) FROM t;
This is an oversight in a4d75c86bf, fixed by adding a simple check.
Backpatch to PostgreSQL 14, where support for extended statistics on
expressions was introduced.
Backpatch-through: 14
Discussion: https://postgr.es/m/20210816013255.GS10479%40telsasoft.com
src/backend/commands/statscmds.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/src/backend/commands/statscmds.c b/src/backend/commands/statscmds.c
index 651b85ccc91..c4b9bd29ec9 100644
--- a/src/backend/commands/statscmds.c
+++ b/src/backend/commands/statscmds.c
@@ -287,9 +287,24 @@ CreateStatistics(CreateStatsStmt *stmt)
Node *expr = selem->expr;
Oid atttype;
TypeCacheEntry *type;
+ Bitmapset *attnums = NULL;
+ int k;
Assert(expr != NULL);
+ /* Disallow expressions referencing system attributes. */
+ pull_varattnos(expr, 1, &attnums);
+
+ k = -1;
+ while ((k = bms_next_member(attnums, k)) >= 0)
+ {
+ AttrNumber attnum = k + FirstLowInvalidHeapAttributeNumber;
+ if (attnum <= 0)
+ ereport(ERROR,
+ (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+ errmsg("statistics creation on system columns is not supported")));
+ }
+
/*
* Disallow data types without a less-than operator.
*
[parent: 2a9a34c3100d]