mirror of https://github.com/citusdata/citus.git
Check for Citus table in worker_copy_table_to_node (#7662)
Fixes #6795 The `worker_copy_table_to_node` is not supposed to be called for Citus tables. When this function was initially introduced in #6098 , it had the respective check. But the check was omitted, since `worker_copy_table_to_node` called for Citus table finishes with error anyway: ``` ERROR: cannot execute a distributed query from a query on a shard DETAIL: Executing a distributed query in a function call that may be pushed to a remote node can lead to incorrect results. ``` It turns out that in some cases this error does not occur. See #6795 I suggest restoring that check. Co-authored-by: Karina Litskevich <litskevichkarina@gmail.com>pull/7694/head^2
parent
afcda3feff
commit
26ad52713c
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue