Check for Citus table in worker_copy_table_to_node

pull/7662/head
Karina Litskevich 2024-07-25 17:01:39 +03:00
parent 2a263fe69a
commit d26aeab96f
2 changed files with 11 additions and 4 deletions

View File

@ -40,6 +40,15 @@ worker_copy_table_to_node(PG_FUNCTION_ARGS)
Oid relationId = PG_GETARG_OID(0); Oid relationId = PG_GETARG_OID(0);
uint32_t targetNodeId = PG_GETARG_INT32(1); uint32_t targetNodeId = PG_GETARG_INT32(1);
if (IsCitusTable(relationId))
{
char *qualifiedRelationName = generate_qualified_relation_name(relationId);
ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
errmsg("table %s is a Citus table, only copies of "
"shards or regular postgres tables are supported",
qualifiedRelationName)));
}
Oid schemaOid = get_rel_namespace(relationId); Oid schemaOid = get_rel_namespace(relationId);
char *relationSchemaName = get_namespace_name(schemaOid); char *relationSchemaName = get_namespace_name(schemaOid);
char *relationName = get_rel_name(relationId); char *relationName = get_rel_name(relationId);

View File

@ -37,11 +37,9 @@ CREATE TABLE t_62629600(a int);
SET search_path TO worker_copy_table_to_node; SET search_path TO worker_copy_table_to_node;
-- Make sure that the UDF doesn't work on Citus tables -- Make sure that the UDF doesn't work on Citus tables
SELECT worker_copy_table_to_node('t', :worker_1_node); SELECT worker_copy_table_to_node('t', :worker_1_node);
ERROR: cannot execute a distributed query from a query on a shard ERROR: table worker_copy_table_to_node.t is a Citus table, only copies of shards or regular postgres tables are supported
DETAIL: Executing a distributed query in a function call that may be pushed to a remote node can lead to incorrect results.
SELECT worker_copy_table_to_node('ref', :worker_1_node); SELECT worker_copy_table_to_node('ref', :worker_1_node);
ERROR: cannot execute a distributed query from a query on a shard ERROR: table worker_copy_table_to_node.ref is a Citus table, only copies of shards or regular postgres tables are supported
DETAIL: Executing a distributed query in a function call that may be pushed to a remote node can lead to incorrect results.
-- It should work on shards -- It should work on shards
SELECT worker_copy_table_to_node('t_62629600', :worker_1_node); SELECT worker_copy_table_to_node('t_62629600', :worker_1_node);
worker_copy_table_to_node worker_copy_table_to_node