Fix assert failure when creating statistics

pull/4523/head
Ahmet Gedemenli 2021-01-15 18:42:15 +03:00
parent 7dddfa2d0b
commit 107097ee28
4 changed files with 55 additions and 2 deletions

View File

@ -82,6 +82,13 @@ PreprocessCreateStatisticsStmt(Node *node, const char *queryString,
QualifyTreeNode((Node *) stmt);
Oid statsOid = get_statistics_object_oid(stmt->defnames, true);
if (statsOid != InvalidOid)
{
/* if stats object already exists, don't create DDLJobs */
return NIL;
}
char *ddlCommand = DeparseTreeNode((Node *) stmt);
DDLJob *ddlJob = palloc0(sizeof(DDLJob));

View File

@ -236,9 +236,16 @@ static void
AppendColumnNames(StringInfo buf, CreateStatsStmt *stmt)
{
ColumnRef *column = NULL;
foreach_ptr(column, stmt->exprs)
{
Assert(IsA(column, ColumnRef));
if (!IsA(column, ColumnRef) || list_length(column->fields) != 1)
{
ereport(ERROR,
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
errmsg(
"only simple column references are allowed in CREATE STATISTICS")));
}
char *columnName = NameListToQuotedString(column->fields);

View File

@ -91,6 +91,20 @@ SELECT create_distributed_table('ownertest','a');
(1 row)
-- test invalid column expressions
CREATE TABLE test (x int, y int);
SELECT create_distributed_table('test','x');
create_distributed_table
---------------------------------------------------------------------
(1 row)
CREATE STATISTICS stats_xy ON (x, y) FROM test;
ERROR: only simple column references are allowed in CREATE STATISTICS
CREATE STATISTICS stats_xy ON x+y FROM test;
ERROR: only simple column references are allowed in CREATE STATISTICS
CREATE STATISTICS stats_xy ON x,y FROM test;
CREATE STATISTICS IF NOT EXISTS stats_xy ON x+y FROM test;
\c - - - :worker_1_port
SELECT stxname
FROM pg_statistic_ext
@ -182,7 +196,23 @@ ORDER BY stxname ASC;
st1_new_980090
st1_new_980092
st1_new_980094
(80 rows)
stats_xy_980161
stats_xy_980163
stats_xy_980165
stats_xy_980167
stats_xy_980169
stats_xy_980171
stats_xy_980173
stats_xy_980175
stats_xy_980177
stats_xy_980179
stats_xy_980181
stats_xy_980183
stats_xy_980185
stats_xy_980187
stats_xy_980189
stats_xy_980191
(96 rows)
SELECT count(DISTINCT stxnamespace)
FROM pg_statistic_ext

View File

@ -75,6 +75,15 @@ CREATE STATISTICS sc1.s9 ON a,b FROM ownertest;
ALTER STATISTICS sc1.s9 OWNER TO pg_signal_backend;
SELECT create_distributed_table('ownertest','a');
-- test invalid column expressions
CREATE TABLE test (x int, y int);
SELECT create_distributed_table('test','x');
CREATE STATISTICS stats_xy ON (x, y) FROM test;
CREATE STATISTICS stats_xy ON x+y FROM test;
CREATE STATISTICS stats_xy ON x,y FROM test;
CREATE STATISTICS IF NOT EXISTS stats_xy ON x+y FROM test;
\c - - - :worker_1_port
SELECT stxname
FROM pg_statistic_ext