mirror of https://github.com/citusdata/citus.git
Propagate more ALTER FOREIGN TABLE to workers
parent
dff1a8db08
commit
b8871d9ff4
|
@ -66,6 +66,7 @@ PlanRenameStmt(RenameStmt *renameStmt, const char *renameCommand)
|
||||||
switch (renameStmt->renameType)
|
switch (renameStmt->renameType)
|
||||||
{
|
{
|
||||||
case OBJECT_TABLE:
|
case OBJECT_TABLE:
|
||||||
|
case OBJECT_FOREIGN_TABLE:
|
||||||
case OBJECT_COLUMN:
|
case OBJECT_COLUMN:
|
||||||
case OBJECT_TABCONSTRAINT:
|
case OBJECT_TABCONSTRAINT:
|
||||||
case OBJECT_POLICY:
|
case OBJECT_POLICY:
|
||||||
|
|
|
@ -524,12 +524,14 @@ IsAlterTableRenameStmt(RenameStmt *renameStmt)
|
||||||
{
|
{
|
||||||
bool isAlterTableRenameStmt = false;
|
bool isAlterTableRenameStmt = false;
|
||||||
|
|
||||||
if (renameStmt->renameType == OBJECT_TABLE)
|
if (renameStmt->renameType == OBJECT_TABLE ||
|
||||||
|
renameStmt->renameType == OBJECT_FOREIGN_TABLE)
|
||||||
{
|
{
|
||||||
isAlterTableRenameStmt = true;
|
isAlterTableRenameStmt = true;
|
||||||
}
|
}
|
||||||
else if (renameStmt->renameType == OBJECT_COLUMN &&
|
else if (renameStmt->renameType == OBJECT_COLUMN &&
|
||||||
renameStmt->relationType == OBJECT_TABLE)
|
(renameStmt->relationType == OBJECT_TABLE ||
|
||||||
|
renameStmt->relationType == OBJECT_FOREIGN_TABLE))
|
||||||
{
|
{
|
||||||
isAlterTableRenameStmt = true;
|
isAlterTableRenameStmt = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -291,6 +291,7 @@ multi_ProcessUtility(PlannedStmt *pstmt,
|
||||||
{
|
{
|
||||||
AlterTableStmt *alterTableStmt = (AlterTableStmt *) parsetree;
|
AlterTableStmt *alterTableStmt = (AlterTableStmt *) parsetree;
|
||||||
if (alterTableStmt->relkind == OBJECT_TABLE ||
|
if (alterTableStmt->relkind == OBJECT_TABLE ||
|
||||||
|
alterTableStmt->relkind == OBJECT_FOREIGN_TABLE ||
|
||||||
alterTableStmt->relkind == OBJECT_INDEX)
|
alterTableStmt->relkind == OBJECT_INDEX)
|
||||||
{
|
{
|
||||||
ddlJobs = PlanAlterTableStmt(alterTableStmt, queryString);
|
ddlJobs = PlanAlterTableStmt(alterTableStmt, queryString);
|
||||||
|
@ -366,7 +367,8 @@ multi_ProcessUtility(PlannedStmt *pstmt,
|
||||||
if (IsA(parsetree, AlterTableStmt))
|
if (IsA(parsetree, AlterTableStmt))
|
||||||
{
|
{
|
||||||
AlterTableStmt *alterTableStmt = (AlterTableStmt *) parsetree;
|
AlterTableStmt *alterTableStmt = (AlterTableStmt *) parsetree;
|
||||||
if (alterTableStmt->relkind == OBJECT_TABLE)
|
if (alterTableStmt->relkind == OBJECT_TABLE ||
|
||||||
|
alterTableStmt->relkind == OBJECT_FOREIGN_TABLE)
|
||||||
{
|
{
|
||||||
ErrorIfAlterDropsPartitionColumn(alterTableStmt);
|
ErrorIfAlterDropsPartitionColumn(alterTableStmt);
|
||||||
|
|
||||||
|
|
|
@ -421,7 +421,8 @@ RelayEventExtendNames(Node *parseTree, char *schemaName, uint64 shardId)
|
||||||
RenameStmt *renameStmt = (RenameStmt *) parseTree;
|
RenameStmt *renameStmt = (RenameStmt *) parseTree;
|
||||||
ObjectType objectType = renameStmt->renameType;
|
ObjectType objectType = renameStmt->renameType;
|
||||||
|
|
||||||
if (objectType == OBJECT_TABLE || objectType == OBJECT_INDEX)
|
if (objectType == OBJECT_TABLE || objectType == OBJECT_INDEX ||
|
||||||
|
objectType == OBJECT_FOREIGN_TABLE)
|
||||||
{
|
{
|
||||||
char **oldRelationName = &(renameStmt->relation->relname);
|
char **oldRelationName = &(renameStmt->relation->relname);
|
||||||
char **newRelationName = &(renameStmt->newname);
|
char **newRelationName = &(renameStmt->newname);
|
||||||
|
|
|
@ -2,6 +2,6 @@
|
||||||
# Only run few basic tests to set up a testing environment
|
# Only run few basic tests to set up a testing environment
|
||||||
# ----------
|
# ----------
|
||||||
test: multi_cluster_management
|
test: multi_cluster_management
|
||||||
test: multi_test_helpers
|
test: multi_test_helpers multi_create_fdw
|
||||||
test: multi_create_table multi_behavioral_analytics_create_table
|
test: multi_create_table multi_behavioral_analytics_create_table
|
||||||
test: multi_load_data
|
test: multi_load_data
|
||||||
|
|
|
@ -145,13 +145,37 @@ CREATE FOREIGN TABLE foreign_table (
|
||||||
id bigint not null,
|
id bigint not null,
|
||||||
full_name text not null default ''
|
full_name text not null default ''
|
||||||
) SERVER fake_fdw_server OPTIONS (encoding 'utf-8', compression 'true');
|
) SERVER fake_fdw_server OPTIONS (encoding 'utf-8', compression 'true');
|
||||||
SELECT master_get_table_ddl_events('foreign_table');
|
SELECT create_distributed_table('foreign_table', 'id');
|
||||||
|
NOTICE: foreign-data wrapper "fake_fdw" does not have an extension defined
|
||||||
|
create_distributed_table
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
ALTER FOREIGN TABLE foreign_table rename to renamed_foreign_table;
|
||||||
|
ALTER FOREIGN TABLE renamed_foreign_table rename full_name to rename_name;
|
||||||
|
ALTER FOREIGN TABLE renamed_foreign_table alter rename_name type char(8);
|
||||||
|
\c - - - :worker_1_port
|
||||||
|
select table_name, column_name, data_type
|
||||||
|
from information_schema.columns
|
||||||
|
where table_schema='public' and table_name like 'renamed_foreign_table_%' and column_name <> 'id'
|
||||||
|
order by table_name;
|
||||||
|
table_name | column_name | data_type
|
||||||
|
------------------------------+-------------+-----------
|
||||||
|
renamed_foreign_table_610000 | rename_name | character
|
||||||
|
renamed_foreign_table_610001 | rename_name | character
|
||||||
|
renamed_foreign_table_610002 | rename_name | character
|
||||||
|
renamed_foreign_table_610003 | rename_name | character
|
||||||
|
(4 rows)
|
||||||
|
|
||||||
|
\c - - - :master_port
|
||||||
|
SELECT master_get_table_ddl_events('renamed_foreign_table');
|
||||||
NOTICE: foreign-data wrapper "fake_fdw" does not have an extension defined
|
NOTICE: foreign-data wrapper "fake_fdw" does not have an extension defined
|
||||||
master_get_table_ddl_events
|
master_get_table_ddl_events
|
||||||
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
CREATE SERVER fake_fdw_server FOREIGN DATA WRAPPER fake_fdw
|
CREATE SERVER fake_fdw_server FOREIGN DATA WRAPPER fake_fdw
|
||||||
CREATE FOREIGN TABLE public.foreign_table (id bigint NOT NULL, full_name text DEFAULT ''::text NOT NULL) SERVER fake_fdw_server OPTIONS (encoding 'utf-8', compression 'true')
|
CREATE FOREIGN TABLE public.renamed_foreign_table (id bigint NOT NULL, rename_name character(8) DEFAULT ''::text NOT NULL) SERVER fake_fdw_server OPTIONS (encoding 'utf-8', compression 'true')
|
||||||
ALTER TABLE public.foreign_table OWNER TO postgres
|
ALTER TABLE public.renamed_foreign_table OWNER TO postgres
|
||||||
(3 rows)
|
(3 rows)
|
||||||
|
|
||||||
-- propagating views is not supported
|
-- propagating views is not supported
|
||||||
|
@ -160,7 +184,17 @@ SELECT master_get_table_ddl_events('local_view');
|
||||||
ERROR: local_view is not a regular, foreign or partitioned table
|
ERROR: local_view is not a regular, foreign or partitioned table
|
||||||
-- clean up
|
-- clean up
|
||||||
DROP VIEW IF EXISTS local_view;
|
DROP VIEW IF EXISTS local_view;
|
||||||
DROP FOREIGN TABLE IF EXISTS foreign_table;
|
DROP FOREIGN TABLE IF EXISTS renamed_foreign_table;
|
||||||
|
\c - - - :worker_1_port
|
||||||
|
select table_name, column_name, data_type
|
||||||
|
from information_schema.columns
|
||||||
|
where table_schema='public' and table_name like 'renamed_foreign_table_%' and column_name <> 'id'
|
||||||
|
order by table_name;
|
||||||
|
table_name | column_name | data_type
|
||||||
|
------------+-------------+-----------
|
||||||
|
(0 rows)
|
||||||
|
|
||||||
|
\c - - - :master_port
|
||||||
DROP TABLE IF EXISTS simple_table, not_null_table, column_constraint_table,
|
DROP TABLE IF EXISTS simple_table, not_null_table, column_constraint_table,
|
||||||
table_constraint_table, default_value_table, pkey_table,
|
table_constraint_table, default_value_table, pkey_table,
|
||||||
unique_table, clustered_table, fiddly_table;
|
unique_table, clustered_table, fiddly_table;
|
||||||
|
|
|
@ -106,7 +106,18 @@ CREATE FOREIGN TABLE foreign_table (
|
||||||
full_name text not null default ''
|
full_name text not null default ''
|
||||||
) SERVER fake_fdw_server OPTIONS (encoding 'utf-8', compression 'true');
|
) SERVER fake_fdw_server OPTIONS (encoding 'utf-8', compression 'true');
|
||||||
|
|
||||||
SELECT master_get_table_ddl_events('foreign_table');
|
SELECT create_distributed_table('foreign_table', 'id');
|
||||||
|
ALTER FOREIGN TABLE foreign_table rename to renamed_foreign_table;
|
||||||
|
ALTER FOREIGN TABLE renamed_foreign_table rename full_name to rename_name;
|
||||||
|
ALTER FOREIGN TABLE renamed_foreign_table alter rename_name type char(8);
|
||||||
|
\c - - - :worker_1_port
|
||||||
|
select table_name, column_name, data_type
|
||||||
|
from information_schema.columns
|
||||||
|
where table_schema='public' and table_name like 'renamed_foreign_table_%' and column_name <> 'id'
|
||||||
|
order by table_name;
|
||||||
|
\c - - - :master_port
|
||||||
|
|
||||||
|
SELECT master_get_table_ddl_events('renamed_foreign_table');
|
||||||
|
|
||||||
-- propagating views is not supported
|
-- propagating views is not supported
|
||||||
CREATE VIEW local_view AS SELECT * FROM simple_table;
|
CREATE VIEW local_view AS SELECT * FROM simple_table;
|
||||||
|
@ -115,7 +126,13 @@ SELECT master_get_table_ddl_events('local_view');
|
||||||
|
|
||||||
-- clean up
|
-- clean up
|
||||||
DROP VIEW IF EXISTS local_view;
|
DROP VIEW IF EXISTS local_view;
|
||||||
DROP FOREIGN TABLE IF EXISTS foreign_table;
|
DROP FOREIGN TABLE IF EXISTS renamed_foreign_table;
|
||||||
|
\c - - - :worker_1_port
|
||||||
|
select table_name, column_name, data_type
|
||||||
|
from information_schema.columns
|
||||||
|
where table_schema='public' and table_name like 'renamed_foreign_table_%' and column_name <> 'id'
|
||||||
|
order by table_name;
|
||||||
|
\c - - - :master_port
|
||||||
DROP TABLE IF EXISTS simple_table, not_null_table, column_constraint_table,
|
DROP TABLE IF EXISTS simple_table, not_null_table, column_constraint_table,
|
||||||
table_constraint_table, default_value_table, pkey_table,
|
table_constraint_table, default_value_table, pkey_table,
|
||||||
unique_table, clustered_table, fiddly_table;
|
unique_table, clustered_table, fiddly_table;
|
||||||
|
|
Loading…
Reference in New Issue