mirror of https://github.com/citusdata/citus.git
Add separate pg13 test for stats targets
parent
d4bc17f6f0
commit
5af585269a
|
@ -37,6 +37,7 @@
|
||||||
#include "distributed/relation_access_tracking.h"
|
#include "distributed/relation_access_tracking.h"
|
||||||
#include "distributed/resource_lock.h"
|
#include "distributed/resource_lock.h"
|
||||||
#include "distributed/worker_transaction.h"
|
#include "distributed/worker_transaction.h"
|
||||||
|
#include "miscadmin.h"
|
||||||
#include "utils/builtins.h"
|
#include "utils/builtins.h"
|
||||||
#include "utils/fmgroids.h"
|
#include "utils/fmgroids.h"
|
||||||
#include "utils/lsyscache.h"
|
#include "utils/lsyscache.h"
|
||||||
|
@ -45,6 +46,7 @@
|
||||||
|
|
||||||
static List * GetExplicitStatisticsIdList(Oid relationId);
|
static List * GetExplicitStatisticsIdList(Oid relationId);
|
||||||
static Oid GetRelIdByStatsOid(Oid statsOid);
|
static Oid GetRelIdByStatsOid(Oid statsOid);
|
||||||
|
static char * CreateAlterCommandIfOwnerNotDefault(Oid statsOid);
|
||||||
#if PG_VERSION_NUM >= PG_VERSION_13
|
#if PG_VERSION_NUM >= PG_VERSION_13
|
||||||
static char * CreateAlterCommandIfTargetNotDefault(Oid statsOid);
|
static char * CreateAlterCommandIfTargetNotDefault(Oid statsOid);
|
||||||
#endif
|
#endif
|
||||||
|
@ -420,20 +422,33 @@ GetExplicitStatisticsCommandList(Oid relationId)
|
||||||
char *createStatisticsCommand = pg_get_statisticsobj_worker(statisticsId,
|
char *createStatisticsCommand = pg_get_statisticsobj_worker(statisticsId,
|
||||||
false);
|
false);
|
||||||
|
|
||||||
createStatisticsCommandList = lappend(
|
createStatisticsCommandList =
|
||||||
createStatisticsCommandList,
|
lappend(createStatisticsCommandList,
|
||||||
makeTableDDLCommandString(createStatisticsCommand));
|
makeTableDDLCommandString(createStatisticsCommand));
|
||||||
#if PG_VERSION_NUM >= PG_VERSION_13
|
#if PG_VERSION_NUM >= PG_VERSION_13
|
||||||
char *alterStatisticsTargetCommand = CreateAlterCommandIfTargetNotDefault(
|
|
||||||
statisticsId);
|
/* we need to alter stats' target if it's getting distributed after creation */
|
||||||
|
char *alterStatisticsTargetCommand =
|
||||||
|
CreateAlterCommandIfTargetNotDefault(statisticsId);
|
||||||
|
|
||||||
if (alterStatisticsTargetCommand != NULL)
|
if (alterStatisticsTargetCommand != NULL)
|
||||||
{
|
{
|
||||||
alterStatisticsCommandList = lappend(alterStatisticsCommandList,
|
alterStatisticsCommandList =
|
||||||
makeTableDDLCommandString(
|
lappend(alterStatisticsCommandList,
|
||||||
alterStatisticsTargetCommand));
|
makeTableDDLCommandString(alterStatisticsTargetCommand));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* we need to alter stats' owner if it's getting distributed after creation */
|
||||||
|
char *alterStatisticsOwnerCommand =
|
||||||
|
CreateAlterCommandIfOwnerNotDefault(statisticsId);
|
||||||
|
|
||||||
|
if (alterStatisticsOwnerCommand != NULL)
|
||||||
|
{
|
||||||
|
alterStatisticsCommandList =
|
||||||
|
lappend(alterStatisticsCommandList,
|
||||||
|
makeTableDDLCommandString(alterStatisticsOwnerCommand));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* revert back to original search_path */
|
/* revert back to original search_path */
|
||||||
|
@ -559,6 +574,46 @@ GetRelIdByStatsOid(Oid statsOid)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* CreateAlterCommandIfOwnerNotDefault returns an ALTER STATISTICS .. OWNER TO
|
||||||
|
* command if the stats object with given id has an owner different than the default one.
|
||||||
|
* Returns NULL otherwise.
|
||||||
|
*/
|
||||||
|
static char *
|
||||||
|
CreateAlterCommandIfOwnerNotDefault(Oid statsOid)
|
||||||
|
{
|
||||||
|
HeapTuple tup = SearchSysCache1(STATEXTOID, ObjectIdGetDatum(statsOid));
|
||||||
|
|
||||||
|
if (!HeapTupleIsValid(tup))
|
||||||
|
{
|
||||||
|
ereport(WARNING, (errmsg("No stats object found with id: %u", statsOid)));
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
Form_pg_statistic_ext statisticsForm = (Form_pg_statistic_ext) GETSTRUCT(tup);
|
||||||
|
ReleaseSysCache(tup);
|
||||||
|
|
||||||
|
if (statisticsForm->stxowner == GetUserId())
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *schemaName = get_namespace_name(statisticsForm->stxnamespace);
|
||||||
|
char *statName = NameStr(statisticsForm->stxname);
|
||||||
|
char *ownerName = GetUserNameFromId(statisticsForm->stxowner, false);
|
||||||
|
|
||||||
|
StringInfoData str;
|
||||||
|
initStringInfo(&str);
|
||||||
|
|
||||||
|
appendStringInfo(&str, "ALTER STATISTICS %s OWNER TO %s",
|
||||||
|
NameListToQuotedString(list_make2(makeString(schemaName),
|
||||||
|
makeString(statName))),
|
||||||
|
quote_identifier(ownerName));
|
||||||
|
|
||||||
|
return str.data;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#if PG_VERSION_NUM >= PG_VERSION_13
|
#if PG_VERSION_NUM >= PG_VERSION_13
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -585,12 +640,11 @@ CreateAlterCommandIfTargetNotDefault(Oid statsOid)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
AlterStatsStmt *alterStatsStmt = palloc0(sizeof(AlterStatsStmt));
|
AlterStatsStmt *alterStatsStmt = makeNode(AlterStatsStmt);
|
||||||
|
|
||||||
char *schemaName = get_namespace_name(statisticsForm->stxnamespace);
|
char *schemaName = get_namespace_name(statisticsForm->stxnamespace);
|
||||||
char *statName = NameStr(statisticsForm->stxname);
|
char *statName = NameStr(statisticsForm->stxname);
|
||||||
|
|
||||||
alterStatsStmt->type = T_AlterStatsStmt;
|
|
||||||
alterStatsStmt->stxstattarget = statisticsForm->stxstattarget;
|
alterStatsStmt->stxstattarget = statisticsForm->stxstattarget;
|
||||||
alterStatsStmt->defnames = list_make2(makeString(schemaName), makeString(statName));
|
alterStatsStmt->defnames = list_make2(makeString(schemaName), makeString(statName));
|
||||||
|
|
||||||
|
|
|
@ -188,8 +188,8 @@ static void
|
||||||
AppendAlterStatisticsOwnerStmt(StringInfo buf, AlterOwnerStmt *stmt)
|
AppendAlterStatisticsOwnerStmt(StringInfo buf, AlterOwnerStmt *stmt)
|
||||||
{
|
{
|
||||||
List *names = (List *) stmt->object;
|
List *names = (List *) stmt->object;
|
||||||
appendStringInfo(buf, "ALTER STATISTICS %s OWNER TO %s", NameListToQuotedString(
|
appendStringInfo(buf, "ALTER STATISTICS %s OWNER TO %s",
|
||||||
names),
|
NameListToQuotedString(names),
|
||||||
RoleSpecString(stmt->newowner, true));
|
RoleSpecString(stmt->newowner, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -89,8 +89,7 @@ RelayEventExtendNames(Node *parseTree, char *schemaName, uint64 shardId)
|
||||||
RangeVar *stat = makeRangeVarFromNameList(
|
RangeVar *stat = makeRangeVarFromNameList(
|
||||||
(List *) alterObjectSchemaStmt->object);
|
(List *) alterObjectSchemaStmt->object);
|
||||||
|
|
||||||
/* set schema name and append shard id */
|
/* append shard id */
|
||||||
SetSchemaNameIfNotExist(&stat->schemaname, schemaName);
|
|
||||||
AppendShardIdToName(&stat->relname, shardId);
|
AppendShardIdToName(&stat->relname, shardId);
|
||||||
|
|
||||||
alterObjectSchemaStmt->object = (Node *) MakeNameListFromRangeVar(stat);
|
alterObjectSchemaStmt->object = (Node *) MakeNameListFromRangeVar(stat);
|
||||||
|
@ -118,7 +117,6 @@ RelayEventExtendNames(Node *parseTree, char *schemaName, uint64 shardId)
|
||||||
RangeVar *stat = makeRangeVarFromNameList(alterStatsStmt->defnames);
|
RangeVar *stat = makeRangeVarFromNameList(alterStatsStmt->defnames);
|
||||||
|
|
||||||
AppendShardIdToName(&stat->relname, shardId);
|
AppendShardIdToName(&stat->relname, shardId);
|
||||||
SetSchemaNameIfNotExist(&stat->schemaname, schemaName);
|
|
||||||
|
|
||||||
alterStatsStmt->defnames = MakeNameListFromRangeVar(stat);
|
alterStatsStmt->defnames = MakeNameListFromRangeVar(stat);
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,112 @@
|
||||||
|
SHOW server_version \gset
|
||||||
|
SELECT substring(:'server_version', '\d+')::int > 12 AS server_version_above_twelve
|
||||||
|
\gset
|
||||||
|
\if :server_version_above_twelve
|
||||||
|
\else
|
||||||
|
\q
|
||||||
|
\endif
|
||||||
|
CREATE SCHEMA "statistics'TestTarget";
|
||||||
|
SET search_path TO "statistics'TestTarget";
|
||||||
|
SET citus.next_shard_id TO 980000;
|
||||||
|
SET client_min_messages TO WARNING;
|
||||||
|
SET citus.shard_count TO 32;
|
||||||
|
SET citus.shard_replication_factor TO 1;
|
||||||
|
CREATE TABLE t1 (a int, b int);
|
||||||
|
CREATE STATISTICS s1 ON a,b FROM t1;
|
||||||
|
CREATE STATISTICS s2 ON a,b FROM t1;
|
||||||
|
CREATE STATISTICS s3 ON a,b FROM t1;
|
||||||
|
CREATE STATISTICS s4 ON a,b FROM t1;
|
||||||
|
-- test altering stats target
|
||||||
|
-- test alter target before distribution
|
||||||
|
ALTER STATISTICS s1 SET STATISTICS 3;
|
||||||
|
-- since max value for target is 10000, this will automatically be lowered
|
||||||
|
ALTER STATISTICS s2 SET STATISTICS 999999;
|
||||||
|
WARNING: lowering statistics target to 10000
|
||||||
|
SELECT create_distributed_table('t1', 'b');
|
||||||
|
create_distributed_table
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
-- test alter target before distribution
|
||||||
|
ALTER STATISTICS s3 SET STATISTICS 46;
|
||||||
|
\c - - - :worker_1_port
|
||||||
|
SELECT stxstattarget, stxrelid::regclass
|
||||||
|
FROM pg_statistic_ext
|
||||||
|
WHERE stxnamespace IN (
|
||||||
|
SELECT oid
|
||||||
|
FROM pg_namespace
|
||||||
|
WHERE nspname IN ('statistics''TestTarget')
|
||||||
|
)
|
||||||
|
ORDER BY stxstattarget, stxrelid::regclass ASC;
|
||||||
|
stxstattarget | stxrelid
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
-1 | "statistics'TestTarget".t1_980000
|
||||||
|
-1 | "statistics'TestTarget".t1_980002
|
||||||
|
-1 | "statistics'TestTarget".t1_980004
|
||||||
|
-1 | "statistics'TestTarget".t1_980006
|
||||||
|
-1 | "statistics'TestTarget".t1_980008
|
||||||
|
-1 | "statistics'TestTarget".t1_980010
|
||||||
|
-1 | "statistics'TestTarget".t1_980012
|
||||||
|
-1 | "statistics'TestTarget".t1_980014
|
||||||
|
-1 | "statistics'TestTarget".t1_980016
|
||||||
|
-1 | "statistics'TestTarget".t1_980018
|
||||||
|
-1 | "statistics'TestTarget".t1_980020
|
||||||
|
-1 | "statistics'TestTarget".t1_980022
|
||||||
|
-1 | "statistics'TestTarget".t1_980024
|
||||||
|
-1 | "statistics'TestTarget".t1_980026
|
||||||
|
-1 | "statistics'TestTarget".t1_980028
|
||||||
|
-1 | "statistics'TestTarget".t1_980030
|
||||||
|
3 | "statistics'TestTarget".t1_980000
|
||||||
|
3 | "statistics'TestTarget".t1_980002
|
||||||
|
3 | "statistics'TestTarget".t1_980004
|
||||||
|
3 | "statistics'TestTarget".t1_980006
|
||||||
|
3 | "statistics'TestTarget".t1_980008
|
||||||
|
3 | "statistics'TestTarget".t1_980010
|
||||||
|
3 | "statistics'TestTarget".t1_980012
|
||||||
|
3 | "statistics'TestTarget".t1_980014
|
||||||
|
3 | "statistics'TestTarget".t1_980016
|
||||||
|
3 | "statistics'TestTarget".t1_980018
|
||||||
|
3 | "statistics'TestTarget".t1_980020
|
||||||
|
3 | "statistics'TestTarget".t1_980022
|
||||||
|
3 | "statistics'TestTarget".t1_980024
|
||||||
|
3 | "statistics'TestTarget".t1_980026
|
||||||
|
3 | "statistics'TestTarget".t1_980028
|
||||||
|
3 | "statistics'TestTarget".t1_980030
|
||||||
|
46 | "statistics'TestTarget".t1_980000
|
||||||
|
46 | "statistics'TestTarget".t1_980002
|
||||||
|
46 | "statistics'TestTarget".t1_980004
|
||||||
|
46 | "statistics'TestTarget".t1_980006
|
||||||
|
46 | "statistics'TestTarget".t1_980008
|
||||||
|
46 | "statistics'TestTarget".t1_980010
|
||||||
|
46 | "statistics'TestTarget".t1_980012
|
||||||
|
46 | "statistics'TestTarget".t1_980014
|
||||||
|
46 | "statistics'TestTarget".t1_980016
|
||||||
|
46 | "statistics'TestTarget".t1_980018
|
||||||
|
46 | "statistics'TestTarget".t1_980020
|
||||||
|
46 | "statistics'TestTarget".t1_980022
|
||||||
|
46 | "statistics'TestTarget".t1_980024
|
||||||
|
46 | "statistics'TestTarget".t1_980026
|
||||||
|
46 | "statistics'TestTarget".t1_980028
|
||||||
|
46 | "statistics'TestTarget".t1_980030
|
||||||
|
10000 | "statistics'TestTarget".t1_980000
|
||||||
|
10000 | "statistics'TestTarget".t1_980002
|
||||||
|
10000 | "statistics'TestTarget".t1_980004
|
||||||
|
10000 | "statistics'TestTarget".t1_980006
|
||||||
|
10000 | "statistics'TestTarget".t1_980008
|
||||||
|
10000 | "statistics'TestTarget".t1_980010
|
||||||
|
10000 | "statistics'TestTarget".t1_980012
|
||||||
|
10000 | "statistics'TestTarget".t1_980014
|
||||||
|
10000 | "statistics'TestTarget".t1_980016
|
||||||
|
10000 | "statistics'TestTarget".t1_980018
|
||||||
|
10000 | "statistics'TestTarget".t1_980020
|
||||||
|
10000 | "statistics'TestTarget".t1_980022
|
||||||
|
10000 | "statistics'TestTarget".t1_980024
|
||||||
|
10000 | "statistics'TestTarget".t1_980026
|
||||||
|
10000 | "statistics'TestTarget".t1_980028
|
||||||
|
10000 | "statistics'TestTarget".t1_980030
|
||||||
|
(64 rows)
|
||||||
|
|
||||||
|
\c - - - :master_port
|
||||||
|
SET client_min_messages TO WARNING;
|
||||||
|
DROP SCHEMA "statistics'TestTarget" CASCADE;
|
|
@ -0,0 +1,6 @@
|
||||||
|
SHOW server_version \gset
|
||||||
|
SELECT substring(:'server_version', '\d+')::int > 12 AS server_version_above_twelve
|
||||||
|
\gset
|
||||||
|
\if :server_version_above_twelve
|
||||||
|
\else
|
||||||
|
\q
|
|
@ -79,23 +79,18 @@ ALTER STATISTICS sc1.st1 RENAME TO st1_new;
|
||||||
-- test altering stats schema
|
-- test altering stats schema
|
||||||
CREATE SCHEMA test_alter_schema;
|
CREATE SCHEMA test_alter_schema;
|
||||||
ALTER STATISTICS s7 SET SCHEMA test_alter_schema;
|
ALTER STATISTICS s7 SET SCHEMA test_alter_schema;
|
||||||
-- test altering stats target
|
-- test alter owner
|
||||||
ALTER STATISTICS s1 SET STATISTICS 3;
|
ALTER STATISTICS sc2."neW'Stat" OWNER TO pg_monitor;
|
||||||
-- since max value for target is 10000, this will automatically be lowered
|
-- test alter owner before distribution
|
||||||
ALTER STATISTICS s2 SET STATISTICS 999999;
|
CREATE TABLE ownertest(a int, b int);
|
||||||
WARNING: lowering statistics target to 10000
|
CREATE STATISTICS sc1.s9 ON a,b FROM ownertest;
|
||||||
-- test alter target before distribution
|
ALTER STATISTICS sc1.s9 OWNER TO pg_signal_backend;
|
||||||
CREATE TABLE targettable(a int, b int);
|
SELECT create_distributed_table('ownertest','a');
|
||||||
CREATE STATISTICS s8 ON a,b FROM targettable;
|
|
||||||
ALTER STATISTICS s8 SET STATISTICS 46;
|
|
||||||
SELECT create_distributed_table('targettable', 'b');
|
|
||||||
create_distributed_table
|
create_distributed_table
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
-- test alter owner
|
|
||||||
ALTER STATISTICS s8 OWNER TO pg_monitor;
|
|
||||||
\c - - - :worker_1_port
|
\c - - - :worker_1_port
|
||||||
SELECT stxname
|
SELECT stxname
|
||||||
FROM pg_statistic_ext
|
FROM pg_statistic_ext
|
||||||
|
@ -155,22 +150,22 @@ ORDER BY stxname ASC;
|
||||||
s2_980058
|
s2_980058
|
||||||
s2_980060
|
s2_980060
|
||||||
s2_980062
|
s2_980062
|
||||||
s8_980129
|
s9_980129
|
||||||
s8_980131
|
s9_980131
|
||||||
s8_980133
|
s9_980133
|
||||||
s8_980135
|
s9_980135
|
||||||
s8_980137
|
s9_980137
|
||||||
s8_980139
|
s9_980139
|
||||||
s8_980141
|
s9_980141
|
||||||
s8_980143
|
s9_980143
|
||||||
s8_980145
|
s9_980145
|
||||||
s8_980147
|
s9_980147
|
||||||
s8_980149
|
s9_980149
|
||||||
s8_980151
|
s9_980151
|
||||||
s8_980153
|
s9_980153
|
||||||
s8_980155
|
s9_980155
|
||||||
s8_980157
|
s9_980157
|
||||||
s8_980159
|
s9_980159
|
||||||
st1_new_980064
|
st1_new_980064
|
||||||
st1_new_980066
|
st1_new_980066
|
||||||
st1_new_980068
|
st1_new_980068
|
||||||
|
@ -201,102 +196,16 @@ WHERE stxnamespace IN (
|
||||||
3
|
3
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
SELECT stxstattarget
|
SELECT COUNT(DISTINCT stxowner)
|
||||||
FROM pg_statistic_ext
|
FROM pg_statistic_ext
|
||||||
WHERE stxnamespace IN (
|
WHERE stxnamespace IN (
|
||||||
SELECT oid
|
SELECT oid
|
||||||
FROM pg_namespace
|
FROM pg_namespace
|
||||||
WHERE nspname IN ('public', 'statistics''Test', 'sc1', 'sc2')
|
WHERE nspname IN ('public', 'statistics''Test', 'sc1', 'sc2')
|
||||||
)
|
);
|
||||||
ORDER BY stxstattarget ASC;
|
|
||||||
stxstattarget
|
|
||||||
---------------------------------------------------------------------
|
|
||||||
-1
|
|
||||||
-1
|
|
||||||
-1
|
|
||||||
-1
|
|
||||||
-1
|
|
||||||
-1
|
|
||||||
-1
|
|
||||||
-1
|
|
||||||
-1
|
|
||||||
-1
|
|
||||||
-1
|
|
||||||
-1
|
|
||||||
-1
|
|
||||||
-1
|
|
||||||
-1
|
|
||||||
-1
|
|
||||||
-1
|
|
||||||
-1
|
|
||||||
-1
|
|
||||||
-1
|
|
||||||
-1
|
|
||||||
-1
|
|
||||||
-1
|
|
||||||
-1
|
|
||||||
-1
|
|
||||||
-1
|
|
||||||
-1
|
|
||||||
-1
|
|
||||||
-1
|
|
||||||
-1
|
|
||||||
-1
|
|
||||||
-1
|
|
||||||
3
|
|
||||||
3
|
|
||||||
3
|
|
||||||
3
|
|
||||||
3
|
|
||||||
3
|
|
||||||
3
|
|
||||||
3
|
|
||||||
3
|
|
||||||
3
|
|
||||||
3
|
|
||||||
3
|
|
||||||
3
|
|
||||||
3
|
|
||||||
3
|
|
||||||
3
|
|
||||||
46
|
|
||||||
46
|
|
||||||
46
|
|
||||||
46
|
|
||||||
46
|
|
||||||
46
|
|
||||||
46
|
|
||||||
46
|
|
||||||
46
|
|
||||||
46
|
|
||||||
46
|
|
||||||
46
|
|
||||||
46
|
|
||||||
46
|
|
||||||
46
|
|
||||||
46
|
|
||||||
10000
|
|
||||||
10000
|
|
||||||
10000
|
|
||||||
10000
|
|
||||||
10000
|
|
||||||
10000
|
|
||||||
10000
|
|
||||||
10000
|
|
||||||
10000
|
|
||||||
10000
|
|
||||||
10000
|
|
||||||
10000
|
|
||||||
10000
|
|
||||||
10000
|
|
||||||
10000
|
|
||||||
10000
|
|
||||||
(80 rows)
|
|
||||||
|
|
||||||
SELECT COUNT(DISTINCT stxowner) FROM pg_statistic_ext;
|
|
||||||
count
|
count
|
||||||
---------------------------------------------------------------------
|
---------------------------------------------------------------------
|
||||||
2
|
3
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
\c - - - :master_port
|
\c - - - :master_port
|
||||||
|
|
|
@ -94,6 +94,7 @@ test: tableam
|
||||||
# Tests for statistics propagation
|
# Tests for statistics propagation
|
||||||
# ----------
|
# ----------
|
||||||
test: propagate_statistics
|
test: propagate_statistics
|
||||||
|
test: pg13_propagate_statistics
|
||||||
|
|
||||||
# ----------
|
# ----------
|
||||||
# Miscellaneous tests to check our query planning behavior
|
# Miscellaneous tests to check our query planning behavior
|
||||||
|
|
|
@ -0,0 +1,45 @@
|
||||||
|
SHOW server_version \gset
|
||||||
|
SELECT substring(:'server_version', '\d+')::int > 12 AS server_version_above_twelve
|
||||||
|
\gset
|
||||||
|
\if :server_version_above_twelve
|
||||||
|
\else
|
||||||
|
\q
|
||||||
|
\endif
|
||||||
|
|
||||||
|
CREATE SCHEMA "statistics'TestTarget";
|
||||||
|
SET search_path TO "statistics'TestTarget";
|
||||||
|
SET citus.next_shard_id TO 980000;
|
||||||
|
SET client_min_messages TO WARNING;
|
||||||
|
SET citus.shard_count TO 32;
|
||||||
|
SET citus.shard_replication_factor TO 1;
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a int, b int);
|
||||||
|
CREATE STATISTICS s1 ON a,b FROM t1;
|
||||||
|
CREATE STATISTICS s2 ON a,b FROM t1;
|
||||||
|
CREATE STATISTICS s3 ON a,b FROM t1;
|
||||||
|
CREATE STATISTICS s4 ON a,b FROM t1;
|
||||||
|
|
||||||
|
-- test altering stats target
|
||||||
|
-- test alter target before distribution
|
||||||
|
ALTER STATISTICS s1 SET STATISTICS 3;
|
||||||
|
-- since max value for target is 10000, this will automatically be lowered
|
||||||
|
ALTER STATISTICS s2 SET STATISTICS 999999;
|
||||||
|
|
||||||
|
SELECT create_distributed_table('t1', 'b');
|
||||||
|
|
||||||
|
-- test alter target before distribution
|
||||||
|
ALTER STATISTICS s3 SET STATISTICS 46;
|
||||||
|
|
||||||
|
\c - - - :worker_1_port
|
||||||
|
SELECT stxstattarget, stxrelid::regclass
|
||||||
|
FROM pg_statistic_ext
|
||||||
|
WHERE stxnamespace IN (
|
||||||
|
SELECT oid
|
||||||
|
FROM pg_namespace
|
||||||
|
WHERE nspname IN ('statistics''TestTarget')
|
||||||
|
)
|
||||||
|
ORDER BY stxstattarget, stxrelid::regclass ASC;
|
||||||
|
|
||||||
|
\c - - - :master_port
|
||||||
|
SET client_min_messages TO WARNING;
|
||||||
|
DROP SCHEMA "statistics'TestTarget" CASCADE;
|
|
@ -67,18 +67,13 @@ ALTER STATISTICS sc1.st1 RENAME TO st1_new;
|
||||||
CREATE SCHEMA test_alter_schema;
|
CREATE SCHEMA test_alter_schema;
|
||||||
ALTER STATISTICS s7 SET SCHEMA test_alter_schema;
|
ALTER STATISTICS s7 SET SCHEMA test_alter_schema;
|
||||||
|
|
||||||
-- test altering stats target
|
|
||||||
ALTER STATISTICS s1 SET STATISTICS 3;
|
|
||||||
-- since max value for target is 10000, this will automatically be lowered
|
|
||||||
ALTER STATISTICS s2 SET STATISTICS 999999;
|
|
||||||
-- test alter target before distribution
|
|
||||||
CREATE TABLE targettable(a int, b int);
|
|
||||||
CREATE STATISTICS s8 ON a,b FROM targettable;
|
|
||||||
ALTER STATISTICS s8 SET STATISTICS 46;
|
|
||||||
SELECT create_distributed_table('targettable', 'b');
|
|
||||||
|
|
||||||
-- test alter owner
|
-- test alter owner
|
||||||
ALTER STATISTICS s8 OWNER TO pg_monitor;
|
ALTER STATISTICS sc2."neW'Stat" OWNER TO pg_monitor;
|
||||||
|
-- test alter owner before distribution
|
||||||
|
CREATE TABLE ownertest(a int, b int);
|
||||||
|
CREATE STATISTICS sc1.s9 ON a,b FROM ownertest;
|
||||||
|
ALTER STATISTICS sc1.s9 OWNER TO pg_signal_backend;
|
||||||
|
SELECT create_distributed_table('ownertest','a');
|
||||||
|
|
||||||
\c - - - :worker_1_port
|
\c - - - :worker_1_port
|
||||||
SELECT stxname
|
SELECT stxname
|
||||||
|
@ -98,16 +93,13 @@ WHERE stxnamespace IN (
|
||||||
WHERE nspname IN ('public', 'statistics''Test', 'sc1', 'sc2')
|
WHERE nspname IN ('public', 'statistics''Test', 'sc1', 'sc2')
|
||||||
);
|
);
|
||||||
|
|
||||||
SELECT stxstattarget
|
SELECT COUNT(DISTINCT stxowner)
|
||||||
FROM pg_statistic_ext
|
FROM pg_statistic_ext
|
||||||
WHERE stxnamespace IN (
|
WHERE stxnamespace IN (
|
||||||
SELECT oid
|
SELECT oid
|
||||||
FROM pg_namespace
|
FROM pg_namespace
|
||||||
WHERE nspname IN ('public', 'statistics''Test', 'sc1', 'sc2')
|
WHERE nspname IN ('public', 'statistics''Test', 'sc1', 'sc2')
|
||||||
)
|
);
|
||||||
ORDER BY stxstattarget ASC;
|
|
||||||
|
|
||||||
SELECT COUNT(DISTINCT stxowner) FROM pg_statistic_ext;
|
|
||||||
|
|
||||||
\c - - - :master_port
|
\c - - - :master_port
|
||||||
SET client_min_messages TO WARNING;
|
SET client_min_messages TO WARNING;
|
||||||
|
|
Loading…
Reference in New Issue