mirror of https://github.com/citusdata/citus.git
Handle identity columns properly in the router planner (#6802)
DESCRIPTION: Fixes a bug with insert..select queries with identity columns Fixes #6798pull/6776/head
parent
37500806d6
commit
e618345703
|
@ -1391,7 +1391,7 @@ convert_aclright_to_string(int aclright)
|
|||
|
||||
/*
|
||||
* contain_nextval_expression_walker walks over expression tree and returns
|
||||
* true if it contains call to 'nextval' function.
|
||||
* true if it contains call to 'nextval' function or it has an identity column.
|
||||
*/
|
||||
bool
|
||||
contain_nextval_expression_walker(Node *node, void *context)
|
||||
|
@ -1401,6 +1401,13 @@ contain_nextval_expression_walker(Node *node, void *context)
|
|||
return false;
|
||||
}
|
||||
|
||||
/* check if the node contains an identity column */
|
||||
if (IsA(node, NextValueExpr))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/* check if the node contains call to 'nextval' */
|
||||
if (IsA(node, FuncExpr))
|
||||
{
|
||||
FuncExpr *funcExpr = (FuncExpr *) node;
|
||||
|
|
|
@ -522,4 +522,21 @@ INSERT INTO color(color_name) VALUES ('Red');
|
|||
\c - - - :master_port
|
||||
SET search_path TO generated_identities;
|
||||
SET client_min_messages to ERROR;
|
||||
DROP TABLE IF EXISTS test;
|
||||
CREATE TABLE test (x int, y int, z bigint generated by default as identity);
|
||||
SELECT create_distributed_table('test', 'x', colocate_with := 'none');
|
||||
create_distributed_table
|
||||
---------------------------------------------------------------------
|
||||
|
||||
(1 row)
|
||||
|
||||
INSERT INTO test VALUES (1,2);
|
||||
INSERT INTO test SELECT x, y FROM test WHERE x = 1;
|
||||
SELECT * FROM test;
|
||||
x | y | z
|
||||
---------------------------------------------------------------------
|
||||
1 | 2 | 1
|
||||
1 | 2 | 2
|
||||
(2 rows)
|
||||
|
||||
DROP SCHEMA generated_identities CASCADE;
|
||||
|
|
|
@ -263,4 +263,11 @@ INSERT INTO color(color_name) VALUES ('Red');
|
|||
SET search_path TO generated_identities;
|
||||
SET client_min_messages to ERROR;
|
||||
|
||||
DROP TABLE IF EXISTS test;
|
||||
CREATE TABLE test (x int, y int, z bigint generated by default as identity);
|
||||
SELECT create_distributed_table('test', 'x', colocate_with := 'none');
|
||||
INSERT INTO test VALUES (1,2);
|
||||
INSERT INTO test SELECT x, y FROM test WHERE x = 1;
|
||||
SELECT * FROM test;
|
||||
|
||||
DROP SCHEMA generated_identities CASCADE;
|
||||
|
|
Loading…
Reference in New Issue