Re: Forbid referencing columns by names in ALTER INDEX ... SET STATISTICS
On Thu, 28 Jun 2018 10:26:13 -0400 Robert Haas wrote: > On Wed, Jun 27, 2018 at 9:22 AM, Yugo Nagata wrote: > > According to the syntax in ALTER INDEX doc, a column should be specified by > > column number as discussed in [1]. However, the current code still allows to > > use an internal column name like "expr". Is this intentional? > > > > Although it is harmless, how about forbiding this undocumented and > > unuseful behavior. The attached patch does it. > > If it's harmless, why prohibit it? I thought that we should prohibit it because this is not allowed according to the documented syntax. However, don't we have to be so rigorous about it? > > -- > Robert Haas > EnterpriseDB: http://www.enterprisedb.com > The Enterprise PostgreSQL Company > -- Yugo Nagata
Re: Forbid referencing columns by names in ALTER INDEX ... SET STATISTICS
On Wed, Jun 27, 2018 at 9:22 AM, Yugo Nagata wrote: > According to the syntax in ALTER INDEX doc, a column should be specified by > column number as discussed in [1]. However, the current code still allows to > use an internal column name like "expr". Is this intentional? > > Although it is harmless, how about forbiding this undocumented and > unuseful behavior. The attached patch does it. If it's harmless, why prohibit it? -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company
Forbid referencing columns by names in ALTER INDEX ... SET STATISTICS
Hi, According to the syntax in ALTER INDEX doc, a column should be specified by column number as discussed in [1]. However, the current code still allows to use an internal column name like "expr". Is this intentional? Although it is harmless, how about forbiding this undocumented and unuseful behavior. The attached patch does it. [1] https://www.postgresql.org/message-id/CAPpHfdsSYo6xpt0F%3DngAdqMPFJJhC7zApde9h1qwkdpHpwFisA%40mail.gmail.com -- Yugo Nagata diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 7c0cf0d..1b6f278 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -6430,6 +6430,12 @@ ATPrepSetStatistics(Relation rel, const char *colName, int16 colNum, Node *newVa ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("cannot refer to non-index column by number"))); + else if ((rel->rd_rel->relkind == RELKIND_INDEX || + rel->rd_rel->relkind == RELKIND_PARTITIONED_INDEX) && + colName) + ereport(ERROR, +(errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("cannot refer to expression index column by name"))); /* Permissions checks */ if (!pg_class_ownercheck(RelationGetRelid(rel), GetUserId()))