From: Yugo Nagata <nagata@sraoss.co.jp>
To: pgsql-hackers@postgresql.org
Subject: Fix error message when trying to alter statistics on included column
Date: Thu, 28 Jun 2018 18:28:03 +0900
Message-ID: <20180628182803.e4632d5a.nagata@sraoss.co.jp> (raw)
Hi,
According to the error message, it is not allowed to alter statistics on
included column because this is "non-expression column".
postgres=# create table test (i int, d int);
CREATE TABLE
postgres=# create index idx on test(i) include (d);
CREATE INDEX
postgres=# alter index idx alter column 2 set statistics 10;
ERROR: cannot alter statistics on non-expression column "d" of index "idx"
HINT: Alter statistics on table column instead.
However, I think this should be forbidded in that this is not a key column
but a included column. Even if we decide to support expressions in included
columns in future, it is meaningless to do this because any statistics on
included column is never used by the planner.
Attached is the patch to fix the error message. In this fix, column number
is checked first. After applying this, the message is changed as below;
postgres=# alter index idx alter column 2 set statistics 10;
ERROR: cannot alter statistics on included column "d" of index "idx"
Regards,
--
Yugo Nagata <nagata@sraoss.co.jp>
Attachments:set_statistics_error_message.patch (text/x-diff, 1.5K) downloaddiff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.cindex 7c0cf0d..4beb160 100644--- a/src/backend/commands/tablecmds.c+++ b/src/backend/commands/tablecmds.c@@ -6504,14 +6504,21 @@ ATExecSetStatistics(Relation rel, const char *colName, int16 colNum, Node *newVa
errmsg("cannot alter system column \"%s\"",
colName)));
- if ((rel->rd_rel->relkind == RELKIND_INDEX ||- rel->rd_rel->relkind == RELKIND_PARTITIONED_INDEX) &&- rel->rd_index->indkey.values[attnum - 1] != 0)- ereport(ERROR,- (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),- errmsg("cannot alter statistics on non-expression column \"%s\" of index \"%s\"",- NameStr(attrtuple->attname), RelationGetRelationName(rel)),- errhint("Alter statistics on table column instead.")));+ if (rel->rd_rel->relkind == RELKIND_INDEX ||+ rel->rd_rel->relkind == RELKIND_PARTITIONED_INDEX)+ {+ if (attnum > rel->rd_index->indnkeyatts)+ ereport(ERROR,+ (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),+ errmsg("cannot alter statistics on included column \"%s\" of index \"%s\"",+ NameStr(attrtuple->attname), RelationGetRelationName(rel))));+ else if (rel->rd_index->indkey.values[attnum - 1] != 0)+ ereport(ERROR,+ (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),+ errmsg("cannot alter statistics on non-expression column \"%s\" of index \"%s\"",+ NameStr(attrtuple->attname), RelationGetRelationName(rel)),+ errhint("Alter statistics on table column instead.")));+ }
attrtuple->attstattarget = newtarget;
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-hackers@postgresql.org
Cc: nagata@sraoss.co.jp
Subject: Re: Fix error message when trying to alter statistics on included column
In-Reply-To: <20180628182803.e4632d5a.nagata@sraoss.co.jp>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox