mirror of https://github.com/citusdata/citus.git
Fix missing from entry
parent
a23f1fb259
commit
ab29c25658
|
@ -39,7 +39,6 @@
|
||||||
#include "utils/syscache.h"
|
#include "utils/syscache.h"
|
||||||
|
|
||||||
|
|
||||||
static void AddInsertAliasIfNeeded(Query *query);
|
|
||||||
static void UpdateTaskQueryString(Query *query, Task *task);
|
static void UpdateTaskQueryString(Query *query, Task *task);
|
||||||
static RelationShard * FindRelationShard(Oid inputRelationId, List *relationShardList);
|
static RelationShard * FindRelationShard(Oid inputRelationId, List *relationShardList);
|
||||||
static void ConvertRteToSubqueryWithEmptyResult(RangeTblEntry *rte);
|
static void ConvertRteToSubqueryWithEmptyResult(RangeTblEntry *rte);
|
||||||
|
@ -159,7 +158,7 @@ RebuildQueryStrings(Job *workerJob)
|
||||||
* deparsing issues (e.g. RETURNING might reference the original table name,
|
* deparsing issues (e.g. RETURNING might reference the original table name,
|
||||||
* which has been replaced by a shard name).
|
* which has been replaced by a shard name).
|
||||||
*/
|
*/
|
||||||
static void
|
void
|
||||||
AddInsertAliasIfNeeded(Query *query)
|
AddInsertAliasIfNeeded(Query *query)
|
||||||
{
|
{
|
||||||
Assert(query->commandType == CMD_INSERT);
|
Assert(query->commandType == CMD_INSERT);
|
||||||
|
|
|
@ -174,6 +174,8 @@ DeparseLocalShardQuery(Query *jobQuery, List *relationShardList, Oid
|
||||||
*/
|
*/
|
||||||
Assert(!CheckInsertSelectQuery(jobQuery));
|
Assert(!CheckInsertSelectQuery(jobQuery));
|
||||||
|
|
||||||
|
AddInsertAliasIfNeeded(jobQuery);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* For INSERT queries we cannot use pg_get_query_def. Mainly because we
|
* For INSERT queries we cannot use pg_get_query_def. Mainly because we
|
||||||
* cannot run UpdateRelationToShardNames on an INSERT query. This is
|
* cannot run UpdateRelationToShardNames on an INSERT query. This is
|
||||||
|
|
|
@ -29,6 +29,7 @@ extern void SetTaskQueryStringList(Task *task, List *queryStringList);
|
||||||
extern char * TaskQueryString(Task *task);
|
extern char * TaskQueryString(Task *task);
|
||||||
extern char * TaskQueryStringAtIndex(Task *task, int index);
|
extern char * TaskQueryStringAtIndex(Task *task, int index);
|
||||||
extern int GetTaskQueryType(Task *task);
|
extern int GetTaskQueryType(Task *task);
|
||||||
|
extern void AddInsertAliasIfNeeded(Query *query);
|
||||||
|
|
||||||
|
|
||||||
#endif /* DEPARSE_SHARD_QUERY_H */
|
#endif /* DEPARSE_SHARD_QUERY_H */
|
||||||
|
|
|
@ -537,6 +537,233 @@ ORDER BY 1;
|
||||||
(4 rows)
|
(4 rows)
|
||||||
|
|
||||||
ROLLBACK;
|
ROLLBACK;
|
||||||
|
prepare p1 as INSERT INTO t1(a,c) VALUES (15, 15) ON CONFLICT (c) DO UPDATE SET a=EXCLUDED.a + 10 RETURNING *;
|
||||||
|
execute p1(5);
|
||||||
|
a | c
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
15 | 15
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
execute p1(5);
|
||||||
|
a | c
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
25 | 15
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
execute p1(5);
|
||||||
|
a | c
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
25 | 15
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
execute p1(5);
|
||||||
|
a | c
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
25 | 15
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
execute p1(5);
|
||||||
|
a | c
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
25 | 15
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
execute p1(5);
|
||||||
|
a | c
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
25 | 15
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
execute p1(5);
|
||||||
|
a | c
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
25 | 15
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
prepare p5(int) as INSERT INTO t1(a,c) VALUES (15, $1) ON CONFLICT (c) DO UPDATE SET a=EXCLUDED.a + 10 RETURNING *;
|
||||||
|
execute p5(5);
|
||||||
|
a | c
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
15 | 5
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
execute p5(5);
|
||||||
|
a | c
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
25 | 5
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
execute p5(5);
|
||||||
|
a | c
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
25 | 5
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
execute p5(5);
|
||||||
|
a | c
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
25 | 5
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
execute p5(5);
|
||||||
|
a | c
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
25 | 5
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
execute p5(5);
|
||||||
|
a | c
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
25 | 5
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
execute p5(5);
|
||||||
|
a | c
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
25 | 5
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
INSERT INTO "companies" ("id","meta","name","created_at","updated_at","deleted_at") VALUES (1,'{"test":123}','Name','2016-11-07 17:34:22.101807','2021-05-20 22:16:55.424521',NULL) ON CONFLICT (id) DO UPDATE SET "meta"=EXCLUDED."meta" RETURNING "id";
|
||||||
|
id
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
1
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
INSERT INTO "companies" ("id","meta","name","created_at","updated_at","deleted_at") VALUES (1,'{"test":123}','Name','2016-11-07 17:34:22.101807','2021-05-20 22:16:55.424521',NULL) ON CONFLICT (id) DO UPDATE SET "meta"=EXCLUDED."meta" RETURNING "id";
|
||||||
|
id
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
1
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
PREPARE p6 AS INSERT INTO "companies" ("id","meta","name","created_at","updated_at","deleted_at") VALUES (1,'{"test":123}','Name','2016-11-07 17:34:22.101807','2021-05-20 22:16:55.424521',NULL) ON CONFLICT (id) DO UPDATE SET "meta"=EXCLUDED."meta" RETURNING "id";;
|
||||||
|
EXECUTE p6;
|
||||||
|
id
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
1
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
EXECUTE p6;
|
||||||
|
id
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
1
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
EXECUTE p6;
|
||||||
|
id
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
1
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
EXECUTE p6;
|
||||||
|
id
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
1
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
EXECUTE p6;
|
||||||
|
id
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
1
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
EXECUTE p6;
|
||||||
|
id
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
1
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
EXECUTE p6;
|
||||||
|
id
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
1
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
prepare insert_select(int) as insert into companies SELECT * FROM companies WHERE id >= $1 ON CONFLICT(id) DO UPDATE SET "meta"=EXCLUDED."meta" RETURNING "id";;
|
||||||
|
EXECUTE insert_select(1);
|
||||||
|
id
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
1
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
EXECUTE insert_select(1);
|
||||||
|
id
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
1
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
EXECUTE insert_select(1);
|
||||||
|
id
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
1
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
EXECUTE insert_select(1);
|
||||||
|
id
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
1
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
EXECUTE insert_select(1);
|
||||||
|
id
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
1
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
EXECUTE insert_select(1);
|
||||||
|
id
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
1
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
EXECUTE insert_select(1);
|
||||||
|
id
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
1
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
prepare insert_select_1 as insert into companies SELECT * FROM companies WHERE id >= 1 ON CONFLICT(id) DO UPDATE SET "meta"=EXCLUDED."meta" RETURNING "id";;
|
||||||
|
EXECUTE insert_select_1;
|
||||||
|
id
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
1
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
EXECUTE insert_select_1;
|
||||||
|
id
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
1
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
EXECUTE insert_select_1;
|
||||||
|
id
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
1
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
EXECUTE insert_select_1;
|
||||||
|
id
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
1
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
EXECUTE insert_select_1;
|
||||||
|
id
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
1
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
EXECUTE insert_select_1;
|
||||||
|
id
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
1
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
EXECUTE insert_select_1;
|
||||||
|
id
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
1
|
||||||
|
(1 row)
|
||||||
|
|
||||||
-- query fails on the shards should be handled
|
-- query fails on the shards should be handled
|
||||||
-- nicely
|
-- nicely
|
||||||
\set VERBOSITY terse
|
\set VERBOSITY terse
|
||||||
|
|
|
@ -90,3 +90,36 @@ INSERT INTO upsert_test (part_key, other_col) VALUES (1, 1), (2, 2) RETURNING *;
|
||||||
2 | 2 |
|
2 | 2 |
|
||||||
(2 rows)
|
(2 rows)
|
||||||
|
|
||||||
|
create table t1(a int, b int, c int primary key, d int);
|
||||||
|
ALTER TABLE t1 DROP COLUMN b;
|
||||||
|
select create_distributed_table('t1','c');
|
||||||
|
create_distributed_table
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
ALTER TABLE t1 DROP COLUMN d;
|
||||||
|
CREATE TABLE companies (
|
||||||
|
id bigint NOT NULL,
|
||||||
|
name character varying NOT NULL,
|
||||||
|
created_at timestamp without time zone NOT NULL,
|
||||||
|
a int,
|
||||||
|
b int,
|
||||||
|
updated_at timestamp without time zone NOT NULL,
|
||||||
|
fmi boolean DEFAULT false NOT NULL,
|
||||||
|
meta jsonb DEFAULT '{}'::jsonb NOT NULL,
|
||||||
|
deleted_at timestamp without time zone,
|
||||||
|
c int,
|
||||||
|
flex boolean DEFAULT false
|
||||||
|
);
|
||||||
|
ALTER TABLE ONLY companies
|
||||||
|
ADD CONSTRAINT companies_pkey PRIMARY KEY (id);
|
||||||
|
alter table companies drop column a;
|
||||||
|
alter table companies drop column b;
|
||||||
|
SELECT create_reference_table('companies');
|
||||||
|
create_reference_table
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
alter table companies drop column c;
|
||||||
|
|
|
@ -298,6 +298,53 @@ ORDER BY 1;
|
||||||
|
|
||||||
ROLLBACK;
|
ROLLBACK;
|
||||||
|
|
||||||
|
prepare p1 as INSERT INTO t1(a,c) VALUES (15, 15) ON CONFLICT (c) DO UPDATE SET a=EXCLUDED.a + 10 RETURNING *;
|
||||||
|
execute p1(5);
|
||||||
|
execute p1(5);
|
||||||
|
execute p1(5);
|
||||||
|
execute p1(5);
|
||||||
|
execute p1(5);
|
||||||
|
execute p1(5);
|
||||||
|
execute p1(5);
|
||||||
|
|
||||||
|
prepare p5(int) as INSERT INTO t1(a,c) VALUES (15, $1) ON CONFLICT (c) DO UPDATE SET a=EXCLUDED.a + 10 RETURNING *;
|
||||||
|
execute p5(5);
|
||||||
|
execute p5(5);
|
||||||
|
execute p5(5);
|
||||||
|
execute p5(5);
|
||||||
|
execute p5(5);
|
||||||
|
execute p5(5);
|
||||||
|
execute p5(5);
|
||||||
|
|
||||||
|
INSERT INTO "companies" ("id","meta","name","created_at","updated_at","deleted_at") VALUES (1,'{"test":123}','Name','2016-11-07 17:34:22.101807','2021-05-20 22:16:55.424521',NULL) ON CONFLICT (id) DO UPDATE SET "meta"=EXCLUDED."meta" RETURNING "id";
|
||||||
|
INSERT INTO "companies" ("id","meta","name","created_at","updated_at","deleted_at") VALUES (1,'{"test":123}','Name','2016-11-07 17:34:22.101807','2021-05-20 22:16:55.424521',NULL) ON CONFLICT (id) DO UPDATE SET "meta"=EXCLUDED."meta" RETURNING "id";
|
||||||
|
PREPARE p6 AS INSERT INTO "companies" ("id","meta","name","created_at","updated_at","deleted_at") VALUES (1,'{"test":123}','Name','2016-11-07 17:34:22.101807','2021-05-20 22:16:55.424521',NULL) ON CONFLICT (id) DO UPDATE SET "meta"=EXCLUDED."meta" RETURNING "id";;
|
||||||
|
EXECUTE p6;
|
||||||
|
EXECUTE p6;
|
||||||
|
EXECUTE p6;
|
||||||
|
EXECUTE p6;
|
||||||
|
EXECUTE p6;
|
||||||
|
EXECUTE p6;
|
||||||
|
EXECUTE p6;
|
||||||
|
|
||||||
|
prepare insert_select(int) as insert into companies SELECT * FROM companies WHERE id >= $1 ON CONFLICT(id) DO UPDATE SET "meta"=EXCLUDED."meta" RETURNING "id";;
|
||||||
|
EXECUTE insert_select(1);
|
||||||
|
EXECUTE insert_select(1);
|
||||||
|
EXECUTE insert_select(1);
|
||||||
|
EXECUTE insert_select(1);
|
||||||
|
EXECUTE insert_select(1);
|
||||||
|
EXECUTE insert_select(1);
|
||||||
|
EXECUTE insert_select(1);
|
||||||
|
|
||||||
|
prepare insert_select_1 as insert into companies SELECT * FROM companies WHERE id >= 1 ON CONFLICT(id) DO UPDATE SET "meta"=EXCLUDED."meta" RETURNING "id";;
|
||||||
|
EXECUTE insert_select_1;
|
||||||
|
EXECUTE insert_select_1;
|
||||||
|
EXECUTE insert_select_1;
|
||||||
|
EXECUTE insert_select_1;
|
||||||
|
EXECUTE insert_select_1;
|
||||||
|
EXECUTE insert_select_1;
|
||||||
|
EXECUTE insert_select_1;
|
||||||
|
|
||||||
-- query fails on the shards should be handled
|
-- query fails on the shards should be handled
|
||||||
-- nicely
|
-- nicely
|
||||||
\set VERBOSITY terse
|
\set VERBOSITY terse
|
||||||
|
@ -311,3 +358,4 @@ SELECT count(*), t1.event FROM date_part_table t1 JOIN date_part_table USING (us
|
||||||
SELECT count(*), event FROM date_part_table WHERE event_time > '2020-01-05' GROUP BY event ORDER BY count(*) DESC, event DESC LIMIT 5;
|
SELECT count(*), event FROM date_part_table WHERE event_time > '2020-01-05' GROUP BY event ORDER BY count(*) DESC, event DESC LIMIT 5;
|
||||||
SELECT count(*), event FROM date_part_table WHERE user_id = 12 AND event_time = '2020-01-12 12:00:00' GROUP BY event ORDER BY count(*) DESC, event DESC LIMIT 5;
|
SELECT count(*), event FROM date_part_table WHERE user_id = 12 AND event_time = '2020-01-12 12:00:00' GROUP BY event ORDER BY count(*) DESC, event DESC LIMIT 5;
|
||||||
SELECT count(*), t1.event FROM date_part_table t1 JOIN date_part_table t2 USING (user_id) WHERE t1.user_id = 1 AND t2.event_time > '2020-01-03' GROUP BY t1.event ORDER BY count(*) DESC, t1.event DESC LIMIT 5;
|
SELECT count(*), t1.event FROM date_part_table t1 JOIN date_part_table t2 USING (user_id) WHERE t1.user_id = 1 AND t2.event_time > '2020-01-03' GROUP BY t1.event ORDER BY count(*) DESC, t1.event DESC LIMIT 5;
|
||||||
|
|
||||||
|
|
|
@ -53,3 +53,32 @@ SELECT create_distributed_table('upsert_test', 'part_key');
|
||||||
|
|
||||||
-- do a regular insert
|
-- do a regular insert
|
||||||
INSERT INTO upsert_test (part_key, other_col) VALUES (1, 1), (2, 2) RETURNING *;
|
INSERT INTO upsert_test (part_key, other_col) VALUES (1, 1), (2, 2) RETURNING *;
|
||||||
|
|
||||||
|
create table t1(a int, b int, c int primary key, d int);
|
||||||
|
ALTER TABLE t1 DROP COLUMN b;
|
||||||
|
select create_distributed_table('t1','c');
|
||||||
|
ALTER TABLE t1 DROP COLUMN d;
|
||||||
|
|
||||||
|
CREATE TABLE companies (
|
||||||
|
id bigint NOT NULL,
|
||||||
|
name character varying NOT NULL,
|
||||||
|
created_at timestamp without time zone NOT NULL,
|
||||||
|
a int,
|
||||||
|
b int,
|
||||||
|
updated_at timestamp without time zone NOT NULL,
|
||||||
|
fmi boolean DEFAULT false NOT NULL,
|
||||||
|
meta jsonb DEFAULT '{}'::jsonb NOT NULL,
|
||||||
|
deleted_at timestamp without time zone,
|
||||||
|
c int,
|
||||||
|
flex boolean DEFAULT false
|
||||||
|
);
|
||||||
|
|
||||||
|
ALTER TABLE ONLY companies
|
||||||
|
ADD CONSTRAINT companies_pkey PRIMARY KEY (id);
|
||||||
|
|
||||||
|
alter table companies drop column a;
|
||||||
|
alter table companies drop column b;
|
||||||
|
|
||||||
|
SELECT create_reference_table('companies');
|
||||||
|
|
||||||
|
alter table companies drop column c;
|
||||||
|
|
Loading…
Reference in New Issue