mirror of https://github.com/citusdata/citus.git
Merge branch 'master' into remove-deprecated-gucs-udfs
commit
3ac30ef9d8
|
@ -17,6 +17,7 @@
|
||||||
#include "access/genam.h"
|
#include "access/genam.h"
|
||||||
#include "access/htup_details.h"
|
#include "access/htup_details.h"
|
||||||
#include "catalog/pg_constraint.h"
|
#include "catalog/pg_constraint.h"
|
||||||
|
#include "catalog/pg_statistic_ext.h"
|
||||||
#include "catalog/pg_trigger.h"
|
#include "catalog/pg_trigger.h"
|
||||||
#include "distributed/coordinator_protocol.h"
|
#include "distributed/coordinator_protocol.h"
|
||||||
#include "distributed/citus_ruleutils.h"
|
#include "distributed/citus_ruleutils.h"
|
||||||
|
@ -49,14 +50,18 @@ static List * GetConstraintNameList(Oid relationId);
|
||||||
static char * GetRenameShardConstraintCommand(Oid relationId, char *constraintName,
|
static char * GetRenameShardConstraintCommand(Oid relationId, char *constraintName,
|
||||||
uint64 shardId);
|
uint64 shardId);
|
||||||
static void RenameShardRelationIndexes(Oid shardRelationId, uint64 shardId);
|
static void RenameShardRelationIndexes(Oid shardRelationId, uint64 shardId);
|
||||||
|
static void RenameShardRelationStatistics(Oid shardRelationId, uint64 shardId);
|
||||||
static char * GetDropTriggerCommand(Oid relationId, char *triggerName);
|
static char * GetDropTriggerCommand(Oid relationId, char *triggerName);
|
||||||
static char * GetRenameShardIndexCommand(char *indexName, uint64 shardId);
|
static char * GetRenameShardIndexCommand(char *indexName, uint64 shardId);
|
||||||
|
static char * GetRenameShardStatsCommand(char *statSchema, char *statsName,
|
||||||
|
char *statsNameWithShardId);
|
||||||
static void RenameShardRelationNonTruncateTriggers(Oid shardRelationId, uint64 shardId);
|
static void RenameShardRelationNonTruncateTriggers(Oid shardRelationId, uint64 shardId);
|
||||||
static char * GetRenameShardTriggerCommand(Oid shardRelationId, char *triggerName,
|
static char * GetRenameShardTriggerCommand(Oid shardRelationId, char *triggerName,
|
||||||
uint64 shardId);
|
uint64 shardId);
|
||||||
static void DropRelationTruncateTriggers(Oid relationId);
|
static void DropRelationTruncateTriggers(Oid relationId);
|
||||||
static char * GetDropTriggerCommand(Oid relationId, char *triggerName);
|
static char * GetDropTriggerCommand(Oid relationId, char *triggerName);
|
||||||
static List * GetExplicitIndexNameList(Oid relationId);
|
static List * GetExplicitIndexNameList(Oid relationId);
|
||||||
|
static List * GetRenameStatsCommandList(List *statsOidList, uint64 shardId);
|
||||||
static void DropAndMoveDefaultSequenceOwnerships(Oid sourceRelationId,
|
static void DropAndMoveDefaultSequenceOwnerships(Oid sourceRelationId,
|
||||||
Oid targetRelationId);
|
Oid targetRelationId);
|
||||||
static void DropDefaultColumnDefinition(Oid relationId, char *columnName);
|
static void DropDefaultColumnDefinition(Oid relationId, char *columnName);
|
||||||
|
@ -358,6 +363,7 @@ ConvertLocalTableToShard(Oid relationId)
|
||||||
RenameRelationToShardRelation(relationId, shardId);
|
RenameRelationToShardRelation(relationId, shardId);
|
||||||
RenameShardRelationConstraints(relationId, shardId);
|
RenameShardRelationConstraints(relationId, shardId);
|
||||||
RenameShardRelationIndexes(relationId, shardId);
|
RenameShardRelationIndexes(relationId, shardId);
|
||||||
|
RenameShardRelationStatistics(relationId, shardId);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We do not create truncate triggers on shard relation. This is
|
* We do not create truncate triggers on shard relation. This is
|
||||||
|
@ -537,6 +543,43 @@ GetRenameShardIndexCommand(char *indexName, uint64 shardId)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* RenameShardRelationStatistics appends given shardId to the end of the names
|
||||||
|
* of shard relation statistics. This function utilizes GetExplicitStatsNameList
|
||||||
|
* to pick the statistics to be renamed, see more details in function's comment.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
RenameShardRelationStatistics(Oid shardRelationId, uint64 shardId)
|
||||||
|
{
|
||||||
|
List *statsOidList = GetExplicitStatisticsIdList(shardRelationId);
|
||||||
|
List *statsCommandList = GetRenameStatsCommandList(statsOidList, shardId);
|
||||||
|
|
||||||
|
char *command = NULL;
|
||||||
|
foreach_ptr(command, statsCommandList)
|
||||||
|
{
|
||||||
|
ExecuteAndLogDDLCommand(command);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* GetRenameShardStatsCommand returns DDL command to append given shardId to
|
||||||
|
* the statistics with statName.
|
||||||
|
*/
|
||||||
|
static char *
|
||||||
|
GetRenameShardStatsCommand(char *statSchema, char *statsName, char *statsNameWithShardId)
|
||||||
|
{
|
||||||
|
const char *quotedStatsNameWithShardId = quote_identifier(statsNameWithShardId);
|
||||||
|
char *qualifiedStatsName = quote_qualified_identifier(statSchema, statsName);
|
||||||
|
|
||||||
|
StringInfo renameCommand = makeStringInfo();
|
||||||
|
appendStringInfo(renameCommand, "ALTER STATISTICS %s RENAME TO %s;",
|
||||||
|
qualifiedStatsName, quotedStatsNameWithShardId);
|
||||||
|
|
||||||
|
return renameCommand->data;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* RenameShardRelationNonTruncateTriggers appends given shardId to the end of
|
* RenameShardRelationNonTruncateTriggers appends given shardId to the end of
|
||||||
* the names of shard relation INSERT/DELETE/UPDATE triggers that are explicitly
|
* the names of shard relation INSERT/DELETE/UPDATE triggers that are explicitly
|
||||||
|
@ -708,6 +751,44 @@ GetExplicitIndexNameList(Oid relationId)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* GetRenameStatsCommandList returns a list of "ALTER STATISTICS ...
|
||||||
|
* RENAME TO ..._shardId" commands for given statistics oid list.
|
||||||
|
*/
|
||||||
|
static List *
|
||||||
|
GetRenameStatsCommandList(List *statsOidList, uint64 shardId)
|
||||||
|
{
|
||||||
|
List *statsCommandList = NIL;
|
||||||
|
Oid statsOid;
|
||||||
|
foreach_oid(statsOid, statsOidList)
|
||||||
|
{
|
||||||
|
HeapTuple tup = SearchSysCache1(STATEXTOID, ObjectIdGetDatum(statsOid));
|
||||||
|
|
||||||
|
if (!HeapTupleIsValid(tup))
|
||||||
|
{
|
||||||
|
ereport(WARNING, (errmsg("No stats object found with id: %u", statsOid)));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
Form_pg_statistic_ext statisticsForm = (Form_pg_statistic_ext) GETSTRUCT(tup);
|
||||||
|
|
||||||
|
char *statsName = statisticsForm->stxname.data;
|
||||||
|
Oid statsSchemaOid = statisticsForm->stxnamespace;
|
||||||
|
char *statsSchema = get_namespace_name(statsSchemaOid);
|
||||||
|
|
||||||
|
char *statsNameWithShardId = pstrdup(statsName);
|
||||||
|
AppendShardIdToName(&statsNameWithShardId, shardId);
|
||||||
|
|
||||||
|
char *renameShardStatsCommand = GetRenameShardStatsCommand(statsSchema, statsName,
|
||||||
|
statsNameWithShardId);
|
||||||
|
statsCommandList = lappend(statsCommandList, renameShardStatsCommand);
|
||||||
|
ReleaseSysCache(tup);
|
||||||
|
}
|
||||||
|
|
||||||
|
return statsCommandList;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* DropAndMoveDefaultSequenceOwnerships drops default column definitions for
|
* DropAndMoveDefaultSequenceOwnerships drops default column definitions for
|
||||||
* relation with sourceRelationId. Also, for each column that defaults to an
|
* relation with sourceRelationId. Also, for each column that defaults to an
|
||||||
|
|
|
@ -49,7 +49,6 @@
|
||||||
#define ALTER_INDEX_COLUMN_SET_STATS_COMMAND \
|
#define ALTER_INDEX_COLUMN_SET_STATS_COMMAND \
|
||||||
"ALTER INDEX %s ALTER COLUMN %d SET STATISTICS %d"
|
"ALTER INDEX %s ALTER COLUMN %d SET STATISTICS %d"
|
||||||
|
|
||||||
static List * GetExplicitStatisticsIdList(Oid relationId);
|
|
||||||
static char * GenerateAlterIndexColumnSetStatsCommand(char *indexNameWithSchema,
|
static char * GenerateAlterIndexColumnSetStatsCommand(char *indexNameWithSchema,
|
||||||
int16 attnum,
|
int16 attnum,
|
||||||
int32 attstattarget);
|
int32 attstattarget);
|
||||||
|
@ -573,7 +572,7 @@ GetAlterIndexStatisticsCommands(Oid indexOid)
|
||||||
* that are explicitly created on the relation with relationId. That means,
|
* that are explicitly created on the relation with relationId. That means,
|
||||||
* this function discards internal statistics implicitly created by postgres.
|
* this function discards internal statistics implicitly created by postgres.
|
||||||
*/
|
*/
|
||||||
static List *
|
List *
|
||||||
GetExplicitStatisticsIdList(Oid relationId)
|
GetExplicitStatisticsIdList(Oid relationId)
|
||||||
{
|
{
|
||||||
List *statisticsIdList = NIL;
|
List *statisticsIdList = NIL;
|
||||||
|
|
|
@ -349,6 +349,7 @@ extern List * PreprocessAlterStatisticsOwnerStmt(Node *node, const char *querySt
|
||||||
extern List * GetExplicitStatisticsCommandList(Oid relationId);
|
extern List * GetExplicitStatisticsCommandList(Oid relationId);
|
||||||
extern List * GetExplicitStatisticsSchemaIdList(Oid relationId);
|
extern List * GetExplicitStatisticsSchemaIdList(Oid relationId);
|
||||||
extern List * GetAlterIndexStatisticsCommands(Oid indexOid);
|
extern List * GetAlterIndexStatisticsCommands(Oid indexOid);
|
||||||
|
extern List * GetExplicitStatisticsIdList(Oid relationId);
|
||||||
|
|
||||||
/* subscription.c - forward declarations */
|
/* subscription.c - forward declarations */
|
||||||
extern Node * ProcessCreateSubscriptionStmt(CreateSubscriptionStmt *createSubStmt);
|
extern Node * ProcessCreateSubscriptionStmt(CreateSubscriptionStmt *createSubStmt);
|
||||||
|
|
|
@ -672,6 +672,26 @@ SELECT create_citus_local_table('referenced_table');
|
||||||
|
|
||||||
ALTER TABLE referencing_table ADD CONSTRAINT fkey_cl_to_cl FOREIGN KEY (a) REFERENCES referenced_table(a);
|
ALTER TABLE referencing_table ADD CONSTRAINT fkey_cl_to_cl FOREIGN KEY (a) REFERENCES referenced_table(a);
|
||||||
NOTICE: executing the command locally: SELECT worker_apply_inter_shard_ddl_command (xxxxx, 'citus_local_tables_test_schema', xxxxx, 'citus_local_tables_test_schema', 'ALTER TABLE referencing_table ADD CONSTRAINT fkey_cl_to_cl FOREIGN KEY (a) REFERENCES referenced_table(a);')
|
NOTICE: executing the command locally: SELECT worker_apply_inter_shard_ddl_command (xxxxx, 'citus_local_tables_test_schema', xxxxx, 'citus_local_tables_test_schema', 'ALTER TABLE referencing_table ADD CONSTRAINT fkey_cl_to_cl FOREIGN KEY (a) REFERENCES referenced_table(a);')
|
||||||
|
-- verify creating citus local table with extended statistics
|
||||||
|
CREATE TABLE test_citus_local_table_with_stats(a int, b int);
|
||||||
|
CREATE STATISTICS stx1 ON a, b FROM test_citus_local_table_with_stats;
|
||||||
|
SELECT create_citus_local_table('test_citus_local_table_with_stats');
|
||||||
|
create_citus_local_table
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
CREATE STATISTICS "CiTUS!LocalTables"."Bad\'StatName" ON a, b FROM test_citus_local_table_with_stats;
|
||||||
|
NOTICE: executing the command locally: SELECT worker_apply_shard_ddl_command (1504042, 'citus_local_tables_test_schema', E'CREATE STATISTICS "CiTUS!LocalTables"."Bad\\''StatName" ON a, b FROM citus_local_tables_test_schema.test_citus_local_table_with_stats')
|
||||||
|
SELECT stxname FROM pg_statistic_ext ORDER BY stxname;
|
||||||
|
stxname
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
Bad\'StatName
|
||||||
|
Bad\'StatName_1504042
|
||||||
|
stx1
|
||||||
|
stx1_1504042
|
||||||
|
(4 rows)
|
||||||
|
|
||||||
-- observe the debug messages telling that we switch to sequential
|
-- observe the debug messages telling that we switch to sequential
|
||||||
-- execution when truncating a citus local table that is referenced
|
-- execution when truncating a citus local table that is referenced
|
||||||
-- by another table
|
-- by another table
|
||||||
|
@ -688,4 +708,4 @@ RESET client_min_messages;
|
||||||
\set VERBOSITY terse
|
\set VERBOSITY terse
|
||||||
-- cleanup at exit
|
-- cleanup at exit
|
||||||
DROP SCHEMA citus_local_tables_test_schema, "CiTUS!LocalTables" CASCADE;
|
DROP SCHEMA citus_local_tables_test_schema, "CiTUS!LocalTables" CASCADE;
|
||||||
NOTICE: drop cascades to 22 other objects
|
NOTICE: drop cascades to 24 other objects
|
||||||
|
|
|
@ -137,6 +137,36 @@ SELECT create_citus_local_table('citus_local_table_4');
|
||||||
|
|
||||||
ALTER TABLE citus_local_table_3 ADD CONSTRAINT fkey_local_to_local FOREIGN KEY(l1) REFERENCES citus_local_table_4(l1) ON UPDATE SET NULL;
|
ALTER TABLE citus_local_table_3 ADD CONSTRAINT fkey_local_to_local FOREIGN KEY(l1) REFERENCES citus_local_table_4(l1) ON UPDATE SET NULL;
|
||||||
NOTICE: executing the command locally: SELECT worker_apply_inter_shard_ddl_command (1508005, 'citus_local_tables_mx', 1508006, 'citus_local_tables_mx', 'ALTER TABLE citus_local_table_3 ADD CONSTRAINT fkey_local_to_local FOREIGN KEY(l1) REFERENCES citus_local_table_4(l1) ON UPDATE SET NULL;')
|
NOTICE: executing the command locally: SELECT worker_apply_inter_shard_ddl_command (1508005, 'citus_local_tables_mx', 1508006, 'citus_local_tables_mx', 'ALTER TABLE citus_local_table_3 ADD CONSTRAINT fkey_local_to_local FOREIGN KEY(l1) REFERENCES citus_local_table_4(l1) ON UPDATE SET NULL;')
|
||||||
|
-- check stats creation
|
||||||
|
CREATE TABLE citus_local_table_stats(a int, b int);
|
||||||
|
CREATE STATISTICS stx1 ON a, b FROM citus_local_table_stats;
|
||||||
|
SELECT create_citus_local_table('citus_local_table_stats');
|
||||||
|
create_citus_local_table
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
CREATE STATISTICS stx2 ON a, b FROM citus_local_table_stats;
|
||||||
|
NOTICE: executing the command locally: SELECT worker_apply_shard_ddl_command (1508007, 'citus_local_tables_mx', 'CREATE STATISTICS citus_local_tables_mx.stx2 ON a, b FROM citus_local_tables_mx.citus_local_table_stats')
|
||||||
|
CREATE STATISTICS stx3 ON a, b FROM citus_local_table_stats;
|
||||||
|
NOTICE: executing the command locally: SELECT worker_apply_shard_ddl_command (1508007, 'citus_local_tables_mx', 'CREATE STATISTICS citus_local_tables_mx.stx3 ON a, b FROM citus_local_tables_mx.citus_local_table_stats')
|
||||||
|
CREATE STATISTICS stx4 ON a, b FROM citus_local_table_stats;
|
||||||
|
NOTICE: executing the command locally: SELECT worker_apply_shard_ddl_command (1508007, 'citus_local_tables_mx', 'CREATE STATISTICS citus_local_tables_mx.stx4 ON a, b FROM citus_local_tables_mx.citus_local_table_stats')
|
||||||
|
ALTER STATISTICS stx3 RENAME TO stx5;
|
||||||
|
NOTICE: executing the command locally: SELECT worker_apply_shard_ddl_command (1508007, 'citus_local_tables_mx', 'ALTER STATISTICS citus_local_tables_mx.stx3 RENAME TO stx5')
|
||||||
|
DROP STATISTICS stx4;
|
||||||
|
NOTICE: executing the command locally: SELECT worker_apply_shard_ddl_command (1508007, 'citus_local_tables_mx', 'DROP STATISTICS citus_local_tables_mx.stx4')
|
||||||
|
SELECT stxname FROM pg_statistic_ext ORDER BY stxname;
|
||||||
|
stxname
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
stx1
|
||||||
|
stx1_1508007
|
||||||
|
stx2
|
||||||
|
stx2_1508007
|
||||||
|
stx5
|
||||||
|
stx5_1508007
|
||||||
|
(6 rows)
|
||||||
|
|
||||||
-- and switch to worker1
|
-- and switch to worker1
|
||||||
\c - - - :worker_1_port
|
\c - - - :worker_1_port
|
||||||
SET search_path TO citus_local_tables_mx;
|
SET search_path TO citus_local_tables_mx;
|
||||||
|
@ -188,6 +218,24 @@ SELECT * FROM citus_local_table_3;
|
||||||
-- finally show that we do not allow defining foreign key in mx nodes
|
-- finally show that we do not allow defining foreign key in mx nodes
|
||||||
ALTER TABLE citus_local_table_3 ADD CONSTRAINT fkey_local_to_local_2 FOREIGN KEY(l1) REFERENCES citus_local_table_4(l1);
|
ALTER TABLE citus_local_table_3 ADD CONSTRAINT fkey_local_to_local_2 FOREIGN KEY(l1) REFERENCES citus_local_table_4(l1);
|
||||||
ERROR: operation is not allowed on this node
|
ERROR: operation is not allowed on this node
|
||||||
|
-- check stats creation
|
||||||
|
CREATE TABLE citus_local_table_stats2(a int, b int);
|
||||||
|
CREATE STATISTICS stx8 ON a, b FROM citus_local_table_stats2;
|
||||||
|
SELECT create_citus_local_table('citus_local_table_stats2');
|
||||||
|
ERROR: operation is not allowed on this node
|
||||||
|
CREATE STATISTICS stx9 ON a, b FROM citus_local_table_stats2;
|
||||||
|
DROP STATISTICS stx8;
|
||||||
|
DROP STATISTICS stx4;
|
||||||
|
ERROR: statistics object "citus_local_tables_mx.stx4" does not exist
|
||||||
|
SELECT stxname FROM pg_statistic_ext ORDER BY stxname;
|
||||||
|
stxname
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
stx1
|
||||||
|
stx2
|
||||||
|
stx5
|
||||||
|
stx9
|
||||||
|
(4 rows)
|
||||||
|
|
||||||
\c - - - :master_port
|
\c - - - :master_port
|
||||||
SET search_path TO citus_local_tables_mx;
|
SET search_path TO citus_local_tables_mx;
|
||||||
SELECT master_remove_distributed_table_metadata_from_workers('citus_local_table_4'::regclass::oid, 'citus_local_tables_mx', 'citus_local_table_4');
|
SELECT master_remove_distributed_table_metadata_from_workers('citus_local_table_4'::regclass::oid, 'citus_local_tables_mx', 'citus_local_table_4');
|
||||||
|
@ -210,4 +258,4 @@ $$);
|
||||||
|
|
||||||
-- cleanup at exit
|
-- cleanup at exit
|
||||||
DROP SCHEMA citus_local_tables_mx CASCADE;
|
DROP SCHEMA citus_local_tables_mx CASCADE;
|
||||||
NOTICE: drop cascades to 17 other objects
|
NOTICE: drop cascades to 19 other objects
|
||||||
|
|
|
@ -125,6 +125,7 @@ SELECT create_citus_local_table('child_table');
|
||||||
CREATE UNLOGGED TABLE unlogged_table (a int primary key);
|
CREATE UNLOGGED TABLE unlogged_table (a int primary key);
|
||||||
SELECT create_citus_local_table('unlogged_table');
|
SELECT create_citus_local_table('unlogged_table');
|
||||||
|
|
||||||
|
|
||||||
-- show that we allow triggers --
|
-- show that we allow triggers --
|
||||||
|
|
||||||
BEGIN;
|
BEGIN;
|
||||||
|
@ -446,6 +447,13 @@ SELECT create_citus_local_table('referenced_table');
|
||||||
|
|
||||||
ALTER TABLE referencing_table ADD CONSTRAINT fkey_cl_to_cl FOREIGN KEY (a) REFERENCES referenced_table(a);
|
ALTER TABLE referencing_table ADD CONSTRAINT fkey_cl_to_cl FOREIGN KEY (a) REFERENCES referenced_table(a);
|
||||||
|
|
||||||
|
-- verify creating citus local table with extended statistics
|
||||||
|
CREATE TABLE test_citus_local_table_with_stats(a int, b int);
|
||||||
|
CREATE STATISTICS stx1 ON a, b FROM test_citus_local_table_with_stats;
|
||||||
|
SELECT create_citus_local_table('test_citus_local_table_with_stats');
|
||||||
|
CREATE STATISTICS "CiTUS!LocalTables"."Bad\'StatName" ON a, b FROM test_citus_local_table_with_stats;
|
||||||
|
SELECT stxname FROM pg_statistic_ext ORDER BY stxname;
|
||||||
|
|
||||||
-- observe the debug messages telling that we switch to sequential
|
-- observe the debug messages telling that we switch to sequential
|
||||||
-- execution when truncating a citus local table that is referenced
|
-- execution when truncating a citus local table that is referenced
|
||||||
-- by another table
|
-- by another table
|
||||||
|
|
|
@ -91,6 +91,18 @@ SELECT create_citus_local_table('citus_local_table_4');
|
||||||
|
|
||||||
ALTER TABLE citus_local_table_3 ADD CONSTRAINT fkey_local_to_local FOREIGN KEY(l1) REFERENCES citus_local_table_4(l1) ON UPDATE SET NULL;
|
ALTER TABLE citus_local_table_3 ADD CONSTRAINT fkey_local_to_local FOREIGN KEY(l1) REFERENCES citus_local_table_4(l1) ON UPDATE SET NULL;
|
||||||
|
|
||||||
|
-- check stats creation
|
||||||
|
CREATE TABLE citus_local_table_stats(a int, b int);
|
||||||
|
CREATE STATISTICS stx1 ON a, b FROM citus_local_table_stats;
|
||||||
|
SELECT create_citus_local_table('citus_local_table_stats');
|
||||||
|
CREATE STATISTICS stx2 ON a, b FROM citus_local_table_stats;
|
||||||
|
CREATE STATISTICS stx3 ON a, b FROM citus_local_table_stats;
|
||||||
|
CREATE STATISTICS stx4 ON a, b FROM citus_local_table_stats;
|
||||||
|
ALTER STATISTICS stx3 RENAME TO stx5;
|
||||||
|
DROP STATISTICS stx4;
|
||||||
|
|
||||||
|
SELECT stxname FROM pg_statistic_ext ORDER BY stxname;
|
||||||
|
|
||||||
-- and switch to worker1
|
-- and switch to worker1
|
||||||
\c - - - :worker_1_port
|
\c - - - :worker_1_port
|
||||||
SET search_path TO citus_local_tables_mx;
|
SET search_path TO citus_local_tables_mx;
|
||||||
|
@ -143,6 +155,16 @@ SELECT * FROM citus_local_table_3;
|
||||||
-- finally show that we do not allow defining foreign key in mx nodes
|
-- finally show that we do not allow defining foreign key in mx nodes
|
||||||
ALTER TABLE citus_local_table_3 ADD CONSTRAINT fkey_local_to_local_2 FOREIGN KEY(l1) REFERENCES citus_local_table_4(l1);
|
ALTER TABLE citus_local_table_3 ADD CONSTRAINT fkey_local_to_local_2 FOREIGN KEY(l1) REFERENCES citus_local_table_4(l1);
|
||||||
|
|
||||||
|
-- check stats creation
|
||||||
|
CREATE TABLE citus_local_table_stats2(a int, b int);
|
||||||
|
CREATE STATISTICS stx8 ON a, b FROM citus_local_table_stats2;
|
||||||
|
SELECT create_citus_local_table('citus_local_table_stats2');
|
||||||
|
CREATE STATISTICS stx9 ON a, b FROM citus_local_table_stats2;
|
||||||
|
DROP STATISTICS stx8;
|
||||||
|
DROP STATISTICS stx4;
|
||||||
|
|
||||||
|
SELECT stxname FROM pg_statistic_ext ORDER BY stxname;
|
||||||
|
|
||||||
\c - - - :master_port
|
\c - - - :master_port
|
||||||
SET search_path TO citus_local_tables_mx;
|
SET search_path TO citus_local_tables_mx;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue