mirror of https://github.com/citusdata/citus.git
Add tests to subquery_and_cte, update check-multi-mx expected results
parent
77efec04a0
commit
18575ccfd3
|
@ -7,7 +7,7 @@ SHOW server_version \gset
|
||||||
SELECT substring(:'server_version', '\d+')::int > 10 AS version_above_ten;
|
SELECT substring(:'server_version', '\d+')::int > 10 AS version_above_ten;
|
||||||
version_above_ten
|
version_above_ten
|
||||||
-------------------
|
-------------------
|
||||||
t
|
f
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
CREATE SCHEMA test_fkey_to_ref_in_tx;
|
CREATE SCHEMA test_fkey_to_ref_in_tx;
|
||||||
|
@ -124,7 +124,7 @@ BEGIN;
|
||||||
|
|
||||||
ALTER TABLE on_update_fkey_table ALTER COLUMN value_1 SET DATA TYPE bigint;
|
ALTER TABLE on_update_fkey_table ALTER COLUMN value_1 SET DATA TYPE bigint;
|
||||||
DEBUG: rewriting table "on_update_fkey_table"
|
DEBUG: rewriting table "on_update_fkey_table"
|
||||||
DEBUG: building index "on_update_fkey_table_pkey" on table "on_update_fkey_table" serially
|
DEBUG: building index "on_update_fkey_table_pkey" on table "on_update_fkey_table"
|
||||||
DEBUG: validating foreign key constraint "fkey"
|
DEBUG: validating foreign key constraint "fkey"
|
||||||
ROLLBACK;
|
ROLLBACK;
|
||||||
-- case 1.6: SELECT to a reference table is followed by an unrelated DDL
|
-- case 1.6: SELECT to a reference table is followed by an unrelated DDL
|
||||||
|
@ -274,7 +274,7 @@ DEBUG: switching to sequential query execution mode
|
||||||
DETAIL: Reference relation "referece_table" is modified, which might lead to data inconsistencies or distributed deadlocks via parallel accesses to hash distributed relations due to foreign keys. Any parallel modification to those hash distributed relations in the same transaction can only be executed in sequential query execution mode
|
DETAIL: Reference relation "referece_table" is modified, which might lead to data inconsistencies or distributed deadlocks via parallel accesses to hash distributed relations due to foreign keys. Any parallel modification to those hash distributed relations in the same transaction can only be executed in sequential query execution mode
|
||||||
ALTER TABLE on_update_fkey_table ALTER COLUMN value_1 SET DATA TYPE bigint;
|
ALTER TABLE on_update_fkey_table ALTER COLUMN value_1 SET DATA TYPE bigint;
|
||||||
DEBUG: rewriting table "on_update_fkey_table"
|
DEBUG: rewriting table "on_update_fkey_table"
|
||||||
DEBUG: building index "on_update_fkey_table_pkey" on table "on_update_fkey_table" serially
|
DEBUG: building index "on_update_fkey_table_pkey" on table "on_update_fkey_table"
|
||||||
DEBUG: validating foreign key constraint "fkey"
|
DEBUG: validating foreign key constraint "fkey"
|
||||||
ROLLBACK;
|
ROLLBACK;
|
||||||
-- case 2.6: UPDATE to a reference table is followed by an unrelated DDL
|
-- case 2.6: UPDATE to a reference table is followed by an unrelated DDL
|
||||||
|
@ -297,7 +297,7 @@ BEGIN;
|
||||||
DEBUG: switching to sequential query execution mode
|
DEBUG: switching to sequential query execution mode
|
||||||
DETAIL: Reference relation "referece_table" is modified, which might lead to data inconsistencies or distributed deadlocks via parallel accesses to hash distributed relations due to foreign keys. Any parallel modification to those hash distributed relations in the same transaction can only be executed in sequential query execution mode
|
DETAIL: Reference relation "referece_table" is modified, which might lead to data inconsistencies or distributed deadlocks via parallel accesses to hash distributed relations due to foreign keys. Any parallel modification to those hash distributed relations in the same transaction can only be executed in sequential query execution mode
|
||||||
TRUNCATE on_update_fkey_table;
|
TRUNCATE on_update_fkey_table;
|
||||||
DEBUG: building index "on_update_fkey_table_pkey" on table "on_update_fkey_table" serially
|
DEBUG: building index "on_update_fkey_table_pkey" on table "on_update_fkey_table"
|
||||||
ROLLBACK;
|
ROLLBACK;
|
||||||
-- case 3.1: an unrelated DDL to a reference table is followed by a real-time SELECT
|
-- case 3.1: an unrelated DDL to a reference table is followed by a real-time SELECT
|
||||||
BEGIN;
|
BEGIN;
|
||||||
|
@ -342,20 +342,20 @@ ROLLBACK;
|
||||||
BEGIN;
|
BEGIN;
|
||||||
ALTER TABLE referece_table ALTER COLUMN id SET DATA TYPE smallint;
|
ALTER TABLE referece_table ALTER COLUMN id SET DATA TYPE smallint;
|
||||||
DEBUG: rewriting table "referece_table"
|
DEBUG: rewriting table "referece_table"
|
||||||
DEBUG: building index "referece_table_pkey" on table "referece_table" serially
|
DEBUG: building index "referece_table_pkey" on table "referece_table"
|
||||||
DEBUG: validating foreign key constraint "fkey"
|
DEBUG: validating foreign key constraint "fkey"
|
||||||
CREATE INDEX fkey_test_index_1 ON on_update_fkey_table(value_1);
|
CREATE INDEX fkey_test_index_1 ON on_update_fkey_table(value_1);
|
||||||
DEBUG: building index "fkey_test_index_1" on table "on_update_fkey_table" serially
|
DEBUG: building index "fkey_test_index_1" on table "on_update_fkey_table"
|
||||||
ROLLBACK;
|
ROLLBACK;
|
||||||
-- case 4.6: DDL to reference table followed by a DDL to dist table, both touching fkey columns
|
-- case 4.6: DDL to reference table followed by a DDL to dist table, both touching fkey columns
|
||||||
BEGIN;
|
BEGIN;
|
||||||
ALTER TABLE referece_table ALTER COLUMN id SET DATA TYPE smallint;
|
ALTER TABLE referece_table ALTER COLUMN id SET DATA TYPE smallint;
|
||||||
DEBUG: rewriting table "referece_table"
|
DEBUG: rewriting table "referece_table"
|
||||||
DEBUG: building index "referece_table_pkey" on table "referece_table" serially
|
DEBUG: building index "referece_table_pkey" on table "referece_table"
|
||||||
DEBUG: validating foreign key constraint "fkey"
|
DEBUG: validating foreign key constraint "fkey"
|
||||||
ALTER TABLE on_update_fkey_table ALTER COLUMN value_1 SET DATA TYPE smallint;
|
ALTER TABLE on_update_fkey_table ALTER COLUMN value_1 SET DATA TYPE smallint;
|
||||||
DEBUG: rewriting table "on_update_fkey_table"
|
DEBUG: rewriting table "on_update_fkey_table"
|
||||||
DEBUG: building index "on_update_fkey_table_pkey" on table "on_update_fkey_table" serially
|
DEBUG: building index "on_update_fkey_table_pkey" on table "on_update_fkey_table"
|
||||||
DEBUG: validating foreign key constraint "fkey"
|
DEBUG: validating foreign key constraint "fkey"
|
||||||
ROLLBACK;
|
ROLLBACK;
|
||||||
-- case 3.7: DDL to a reference table is followed by COPY
|
-- case 3.7: DDL to a reference table is followed by COPY
|
||||||
|
@ -371,16 +371,16 @@ BEGIN;
|
||||||
DEBUG: switching to sequential query execution mode
|
DEBUG: switching to sequential query execution mode
|
||||||
DETAIL: Reference relation "referece_table" is modified, which might lead to data inconsistencies or distributed deadlocks via parallel accesses to hash distributed relations due to foreign keys. Any parallel modification to those hash distributed relations in the same transaction can only be executed in sequential query execution mode
|
DETAIL: Reference relation "referece_table" is modified, which might lead to data inconsistencies or distributed deadlocks via parallel accesses to hash distributed relations due to foreign keys. Any parallel modification to those hash distributed relations in the same transaction can only be executed in sequential query execution mode
|
||||||
TRUNCATE on_update_fkey_table;
|
TRUNCATE on_update_fkey_table;
|
||||||
DEBUG: building index "on_update_fkey_table_pkey" on table "on_update_fkey_table" serially
|
DEBUG: building index "on_update_fkey_table_pkey" on table "on_update_fkey_table"
|
||||||
ROLLBACK;
|
ROLLBACK;
|
||||||
-- case 3.9: DDL to a reference table is followed by TRUNCATE
|
-- case 3.9: DDL to a reference table is followed by TRUNCATE
|
||||||
BEGIN;
|
BEGIN;
|
||||||
ALTER TABLE referece_table ALTER COLUMN id SET DATA TYPE smallint;
|
ALTER TABLE referece_table ALTER COLUMN id SET DATA TYPE smallint;
|
||||||
DEBUG: rewriting table "referece_table"
|
DEBUG: rewriting table "referece_table"
|
||||||
DEBUG: building index "referece_table_pkey" on table "referece_table" serially
|
DEBUG: building index "referece_table_pkey" on table "referece_table"
|
||||||
DEBUG: validating foreign key constraint "fkey"
|
DEBUG: validating foreign key constraint "fkey"
|
||||||
TRUNCATE on_update_fkey_table;
|
TRUNCATE on_update_fkey_table;
|
||||||
DEBUG: building index "on_update_fkey_table_pkey" on table "on_update_fkey_table" serially
|
DEBUG: building index "on_update_fkey_table_pkey" on table "on_update_fkey_table"
|
||||||
ROLLBACK;
|
ROLLBACK;
|
||||||
-----
|
-----
|
||||||
--- Now, start testing the other way araound
|
--- Now, start testing the other way araound
|
||||||
|
@ -435,7 +435,7 @@ BEGIN;
|
||||||
|
|
||||||
ALTER TABLE referece_table ALTER COLUMN id SET DATA TYPE smallint;
|
ALTER TABLE referece_table ALTER COLUMN id SET DATA TYPE smallint;
|
||||||
DEBUG: rewriting table "referece_table"
|
DEBUG: rewriting table "referece_table"
|
||||||
DEBUG: building index "referece_table_pkey" on table "referece_table" serially
|
DEBUG: building index "referece_table_pkey" on table "referece_table"
|
||||||
DEBUG: validating foreign key constraint "fkey"
|
DEBUG: validating foreign key constraint "fkey"
|
||||||
ERROR: cannot execute DDL on reference relation "referece_table" because there was a parallel SELECT access to distributed relation "on_update_fkey_table" in the same transaction
|
ERROR: cannot execute DDL on reference relation "referece_table" because there was a parallel SELECT access to distributed relation "on_update_fkey_table" in the same transaction
|
||||||
HINT: Try re-running the transaction with "SET LOCAL citus.multi_shard_modify_mode TO 'sequential';"
|
HINT: Try re-running the transaction with "SET LOCAL citus.multi_shard_modify_mode TO 'sequential';"
|
||||||
|
@ -475,8 +475,8 @@ DEBUG: truncate cascades to table "on_update_fkey_table_2380001"
|
||||||
DETAIL: NOTICE from localhost:57637
|
DETAIL: NOTICE from localhost:57637
|
||||||
DEBUG: truncate cascades to table "on_update_fkey_table_2380003"
|
DEBUG: truncate cascades to table "on_update_fkey_table_2380003"
|
||||||
DETAIL: NOTICE from localhost:57637
|
DETAIL: NOTICE from localhost:57637
|
||||||
DEBUG: building index "referece_table_pkey" on table "referece_table" serially
|
DEBUG: building index "referece_table_pkey" on table "referece_table"
|
||||||
DEBUG: building index "on_update_fkey_table_pkey" on table "on_update_fkey_table" serially
|
DEBUG: building index "on_update_fkey_table_pkey" on table "on_update_fkey_table"
|
||||||
ROLLBACK;
|
ROLLBACK;
|
||||||
-- case 5.1: Parallel UPDATE on distributed table follow by a SELECT
|
-- case 5.1: Parallel UPDATE on distributed table follow by a SELECT
|
||||||
BEGIN;
|
BEGIN;
|
||||||
|
@ -507,7 +507,7 @@ BEGIN;
|
||||||
UPDATE on_update_fkey_table SET value_1 = 16 WHERE value_1 = 15;
|
UPDATE on_update_fkey_table SET value_1 = 16 WHERE value_1 = 15;
|
||||||
ALTER TABLE referece_table ALTER COLUMN id SET DATA TYPE smallint;
|
ALTER TABLE referece_table ALTER COLUMN id SET DATA TYPE smallint;
|
||||||
DEBUG: rewriting table "referece_table"
|
DEBUG: rewriting table "referece_table"
|
||||||
DEBUG: building index "referece_table_pkey" on table "referece_table" serially
|
DEBUG: building index "referece_table_pkey" on table "referece_table"
|
||||||
DEBUG: validating foreign key constraint "fkey"
|
DEBUG: validating foreign key constraint "fkey"
|
||||||
ERROR: cannot execute DDL on reference relation "referece_table" because there was a parallel DML access to distributed relation "on_update_fkey_table" in the same transaction
|
ERROR: cannot execute DDL on reference relation "referece_table" because there was a parallel DML access to distributed relation "on_update_fkey_table" in the same transaction
|
||||||
HINT: Try re-running the transaction with "SET LOCAL citus.multi_shard_modify_mode TO 'sequential';"
|
HINT: Try re-running the transaction with "SET LOCAL citus.multi_shard_modify_mode TO 'sequential';"
|
||||||
|
@ -523,7 +523,7 @@ ROLLBACK;
|
||||||
BEGIN;
|
BEGIN;
|
||||||
ALTER TABLE on_update_fkey_table ALTER COLUMN value_1 SET DATA TYPE smallint;
|
ALTER TABLE on_update_fkey_table ALTER COLUMN value_1 SET DATA TYPE smallint;
|
||||||
DEBUG: rewriting table "on_update_fkey_table"
|
DEBUG: rewriting table "on_update_fkey_table"
|
||||||
DEBUG: building index "on_update_fkey_table_pkey" on table "on_update_fkey_table" serially
|
DEBUG: building index "on_update_fkey_table_pkey" on table "on_update_fkey_table"
|
||||||
DEBUG: validating foreign key constraint "fkey"
|
DEBUG: validating foreign key constraint "fkey"
|
||||||
UPDATE referece_table SET id = 160 WHERE id = 15;
|
UPDATE referece_table SET id = 160 WHERE id = 15;
|
||||||
ROLLBACK;
|
ROLLBACK;
|
||||||
|
@ -590,7 +590,7 @@ ROLLBACK;
|
||||||
BEGIN;
|
BEGIN;
|
||||||
CREATE TABLE test_table_1(id int PRIMARY KEY);
|
CREATE TABLE test_table_1(id int PRIMARY KEY);
|
||||||
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_1_pkey" for table "test_table_1"
|
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_1_pkey" for table "test_table_1"
|
||||||
DEBUG: building index "test_table_1_pkey" on table "test_table_1" serially
|
DEBUG: building index "test_table_1_pkey" on table "test_table_1"
|
||||||
SELECT create_reference_table('test_table_1');
|
SELECT create_reference_table('test_table_1');
|
||||||
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
||||||
DETAIL: NOTICE from localhost:57638
|
DETAIL: NOTICE from localhost:57638
|
||||||
|
@ -607,7 +607,7 @@ DETAIL: NOTICE from localhost:57638
|
||||||
|
|
||||||
CREATE TABLE test_table_2(id int PRIMARY KEY, value_1 int, FOREIGN KEY(value_1) REFERENCES test_table_1(id));
|
CREATE TABLE test_table_2(id int PRIMARY KEY, value_1 int, FOREIGN KEY(value_1) REFERENCES test_table_1(id));
|
||||||
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_2_pkey" for table "test_table_2"
|
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_2_pkey" for table "test_table_2"
|
||||||
DEBUG: building index "test_table_2_pkey" on table "test_table_2" serially
|
DEBUG: building index "test_table_2_pkey" on table "test_table_2"
|
||||||
SELECT create_distributed_table('test_table_2', 'id');
|
SELECT create_distributed_table('test_table_2', 'id');
|
||||||
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
||||||
DETAIL: NOTICE from localhost:57638
|
DETAIL: NOTICE from localhost:57638
|
||||||
|
@ -635,7 +635,7 @@ ROLLBACK;
|
||||||
BEGIN;
|
BEGIN;
|
||||||
CREATE TABLE test_table_1(id int PRIMARY KEY);
|
CREATE TABLE test_table_1(id int PRIMARY KEY);
|
||||||
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_1_pkey" for table "test_table_1"
|
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_1_pkey" for table "test_table_1"
|
||||||
DEBUG: building index "test_table_1_pkey" on table "test_table_1" serially
|
DEBUG: building index "test_table_1_pkey" on table "test_table_1"
|
||||||
SELECT create_reference_table('test_table_1');
|
SELECT create_reference_table('test_table_1');
|
||||||
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
||||||
DETAIL: NOTICE from localhost:57638
|
DETAIL: NOTICE from localhost:57638
|
||||||
|
@ -652,7 +652,7 @@ DETAIL: NOTICE from localhost:57638
|
||||||
|
|
||||||
CREATE TABLE tt4(id int PRIMARY KEY, value_1 int, FOREIGN KEY(id) REFERENCES tt4(id));
|
CREATE TABLE tt4(id int PRIMARY KEY, value_1 int, FOREIGN KEY(id) REFERENCES tt4(id));
|
||||||
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "tt4_pkey" for table "tt4"
|
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "tt4_pkey" for table "tt4"
|
||||||
DEBUG: building index "tt4_pkey" on table "tt4" serially
|
DEBUG: building index "tt4_pkey" on table "tt4"
|
||||||
SELECT create_distributed_table('tt4', 'id');
|
SELECT create_distributed_table('tt4', 'id');
|
||||||
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
||||||
DETAIL: NOTICE from localhost:57638
|
DETAIL: NOTICE from localhost:57638
|
||||||
|
@ -673,7 +673,7 @@ DETAIL: NOTICE from localhost:57638
|
||||||
|
|
||||||
CREATE TABLE test_table_2(id int PRIMARY KEY, value_1 int, FOREIGN KEY(value_1) REFERENCES test_table_1(id), FOREIGN KEY(id) REFERENCES tt4(id));
|
CREATE TABLE test_table_2(id int PRIMARY KEY, value_1 int, FOREIGN KEY(value_1) REFERENCES test_table_1(id), FOREIGN KEY(id) REFERENCES tt4(id));
|
||||||
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_2_pkey" for table "test_table_2"
|
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_2_pkey" for table "test_table_2"
|
||||||
DEBUG: building index "test_table_2_pkey" on table "test_table_2" serially
|
DEBUG: building index "test_table_2_pkey" on table "test_table_2"
|
||||||
SELECT create_distributed_table('test_table_2', 'id');
|
SELECT create_distributed_table('test_table_2', 'id');
|
||||||
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
||||||
DETAIL: NOTICE from localhost:57638
|
DETAIL: NOTICE from localhost:57638
|
||||||
|
@ -694,7 +694,7 @@ BEGIN;
|
||||||
SET LOCAL citus.multi_shard_modify_mode TO 'sequential';
|
SET LOCAL citus.multi_shard_modify_mode TO 'sequential';
|
||||||
CREATE TABLE test_table_1(id int PRIMARY KEY);
|
CREATE TABLE test_table_1(id int PRIMARY KEY);
|
||||||
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_1_pkey" for table "test_table_1"
|
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_1_pkey" for table "test_table_1"
|
||||||
DEBUG: building index "test_table_1_pkey" on table "test_table_1" serially
|
DEBUG: building index "test_table_1_pkey" on table "test_table_1"
|
||||||
SELECT create_reference_table('test_table_1');
|
SELECT create_reference_table('test_table_1');
|
||||||
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
||||||
DETAIL: NOTICE from localhost:57638
|
DETAIL: NOTICE from localhost:57638
|
||||||
|
@ -711,7 +711,7 @@ DETAIL: NOTICE from localhost:57638
|
||||||
|
|
||||||
CREATE TABLE tt4(id int PRIMARY KEY, value_1 int, FOREIGN KEY(id) REFERENCES tt4(id));
|
CREATE TABLE tt4(id int PRIMARY KEY, value_1 int, FOREIGN KEY(id) REFERENCES tt4(id));
|
||||||
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "tt4_pkey" for table "tt4"
|
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "tt4_pkey" for table "tt4"
|
||||||
DEBUG: building index "tt4_pkey" on table "tt4" serially
|
DEBUG: building index "tt4_pkey" on table "tt4"
|
||||||
SELECT create_distributed_table('tt4', 'id');
|
SELECT create_distributed_table('tt4', 'id');
|
||||||
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
||||||
DETAIL: NOTICE from localhost:57638
|
DETAIL: NOTICE from localhost:57638
|
||||||
|
@ -732,7 +732,7 @@ DETAIL: NOTICE from localhost:57638
|
||||||
|
|
||||||
CREATE TABLE test_table_2(id int PRIMARY KEY, value_1 int, FOREIGN KEY(value_1) REFERENCES test_table_1(id), FOREIGN KEY(id) REFERENCES tt4(id));
|
CREATE TABLE test_table_2(id int PRIMARY KEY, value_1 int, FOREIGN KEY(value_1) REFERENCES test_table_1(id), FOREIGN KEY(id) REFERENCES tt4(id));
|
||||||
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_2_pkey" for table "test_table_2"
|
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_2_pkey" for table "test_table_2"
|
||||||
DEBUG: building index "test_table_2_pkey" on table "test_table_2" serially
|
DEBUG: building index "test_table_2_pkey" on table "test_table_2"
|
||||||
SELECT create_distributed_table('test_table_2', 'id');
|
SELECT create_distributed_table('test_table_2', 'id');
|
||||||
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
||||||
DETAIL: NOTICE from localhost:57638
|
DETAIL: NOTICE from localhost:57638
|
||||||
|
@ -762,7 +762,7 @@ BEGIN;
|
||||||
|
|
||||||
CREATE TABLE test_table_1(id int PRIMARY KEY);
|
CREATE TABLE test_table_1(id int PRIMARY KEY);
|
||||||
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_1_pkey" for table "test_table_1"
|
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_1_pkey" for table "test_table_1"
|
||||||
DEBUG: building index "test_table_1_pkey" on table "test_table_1" serially
|
DEBUG: building index "test_table_1_pkey" on table "test_table_1"
|
||||||
SELECT create_reference_table('test_table_1');
|
SELECT create_reference_table('test_table_1');
|
||||||
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
||||||
DETAIL: NOTICE from localhost:57638
|
DETAIL: NOTICE from localhost:57638
|
||||||
|
@ -779,7 +779,7 @@ DETAIL: NOTICE from localhost:57638
|
||||||
|
|
||||||
CREATE TABLE test_table_2(id int PRIMARY KEY, value_1 int);
|
CREATE TABLE test_table_2(id int PRIMARY KEY, value_1 int);
|
||||||
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_2_pkey" for table "test_table_2"
|
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_2_pkey" for table "test_table_2"
|
||||||
DEBUG: building index "test_table_2_pkey" on table "test_table_2" serially
|
DEBUG: building index "test_table_2_pkey" on table "test_table_2"
|
||||||
SELECT create_distributed_table('test_table_2', 'id');
|
SELECT create_distributed_table('test_table_2', 'id');
|
||||||
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
||||||
DETAIL: NOTICE from localhost:57638
|
DETAIL: NOTICE from localhost:57638
|
||||||
|
@ -814,7 +814,7 @@ BEGIN;
|
||||||
SET LOCAL citus.multi_shard_modify_mode TO 'sequential';
|
SET LOCAL citus.multi_shard_modify_mode TO 'sequential';
|
||||||
CREATE TABLE test_table_1(id int PRIMARY KEY);
|
CREATE TABLE test_table_1(id int PRIMARY KEY);
|
||||||
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_1_pkey" for table "test_table_1"
|
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_1_pkey" for table "test_table_1"
|
||||||
DEBUG: building index "test_table_1_pkey" on table "test_table_1" serially
|
DEBUG: building index "test_table_1_pkey" on table "test_table_1"
|
||||||
SELECT create_reference_table('test_table_1');
|
SELECT create_reference_table('test_table_1');
|
||||||
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
||||||
DETAIL: NOTICE from localhost:57638
|
DETAIL: NOTICE from localhost:57638
|
||||||
|
@ -831,7 +831,7 @@ DETAIL: NOTICE from localhost:57638
|
||||||
|
|
||||||
CREATE TABLE test_table_2(id int PRIMARY KEY, value_1 int);
|
CREATE TABLE test_table_2(id int PRIMARY KEY, value_1 int);
|
||||||
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_2_pkey" for table "test_table_2"
|
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_2_pkey" for table "test_table_2"
|
||||||
DEBUG: building index "test_table_2_pkey" on table "test_table_2" serially
|
DEBUG: building index "test_table_2_pkey" on table "test_table_2"
|
||||||
SELECT create_distributed_table('test_table_2', 'id');
|
SELECT create_distributed_table('test_table_2', 'id');
|
||||||
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
||||||
DETAIL: NOTICE from localhost:57638
|
DETAIL: NOTICE from localhost:57638
|
||||||
|
@ -861,7 +861,7 @@ COMMIT;
|
||||||
BEGIN;
|
BEGIN;
|
||||||
CREATE TABLE test_table_2(id int PRIMARY KEY, value_1 int);
|
CREATE TABLE test_table_2(id int PRIMARY KEY, value_1 int);
|
||||||
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_2_pkey" for table "test_table_2"
|
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_2_pkey" for table "test_table_2"
|
||||||
DEBUG: building index "test_table_2_pkey" on table "test_table_2" serially
|
DEBUG: building index "test_table_2_pkey" on table "test_table_2"
|
||||||
SELECT create_distributed_table('test_table_2', 'id');
|
SELECT create_distributed_table('test_table_2', 'id');
|
||||||
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
||||||
DETAIL: NOTICE from localhost:57638
|
DETAIL: NOTICE from localhost:57638
|
||||||
|
@ -882,7 +882,7 @@ DETAIL: NOTICE from localhost:57638
|
||||||
|
|
||||||
CREATE TABLE test_table_1(id int PRIMARY KEY);
|
CREATE TABLE test_table_1(id int PRIMARY KEY);
|
||||||
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_1_pkey" for table "test_table_1"
|
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_1_pkey" for table "test_table_1"
|
||||||
DEBUG: building index "test_table_1_pkey" on table "test_table_1" serially
|
DEBUG: building index "test_table_1_pkey" on table "test_table_1"
|
||||||
SELECT create_reference_table('test_table_1');
|
SELECT create_reference_table('test_table_1');
|
||||||
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
||||||
DETAIL: NOTICE from localhost:57638
|
DETAIL: NOTICE from localhost:57638
|
||||||
|
@ -912,7 +912,7 @@ BEGIN;
|
||||||
SET LOCAL citus.multi_shard_modify_mode TO 'sequential';
|
SET LOCAL citus.multi_shard_modify_mode TO 'sequential';
|
||||||
CREATE TABLE test_table_2(id int PRIMARY KEY, value_1 int);
|
CREATE TABLE test_table_2(id int PRIMARY KEY, value_1 int);
|
||||||
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_2_pkey" for table "test_table_2"
|
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_2_pkey" for table "test_table_2"
|
||||||
DEBUG: building index "test_table_2_pkey" on table "test_table_2" serially
|
DEBUG: building index "test_table_2_pkey" on table "test_table_2"
|
||||||
SELECT create_distributed_table('test_table_2', 'id');
|
SELECT create_distributed_table('test_table_2', 'id');
|
||||||
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
||||||
DETAIL: NOTICE from localhost:57638
|
DETAIL: NOTICE from localhost:57638
|
||||||
|
@ -933,7 +933,7 @@ DETAIL: NOTICE from localhost:57638
|
||||||
|
|
||||||
CREATE TABLE test_table_1(id int PRIMARY KEY);
|
CREATE TABLE test_table_1(id int PRIMARY KEY);
|
||||||
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_1_pkey" for table "test_table_1"
|
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_1_pkey" for table "test_table_1"
|
||||||
DEBUG: building index "test_table_1_pkey" on table "test_table_1" serially
|
DEBUG: building index "test_table_1_pkey" on table "test_table_1"
|
||||||
SELECT create_reference_table('test_table_1');
|
SELECT create_reference_table('test_table_1');
|
||||||
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
||||||
DETAIL: NOTICE from localhost:57638
|
DETAIL: NOTICE from localhost:57638
|
||||||
|
@ -966,7 +966,7 @@ BEGIN;
|
||||||
SET LOCAL citus.multi_shard_modify_mode TO 'sequential';
|
SET LOCAL citus.multi_shard_modify_mode TO 'sequential';
|
||||||
CREATE TABLE test_table_2(id int PRIMARY KEY, value_1 int);
|
CREATE TABLE test_table_2(id int PRIMARY KEY, value_1 int);
|
||||||
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_2_pkey" for table "test_table_2"
|
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_2_pkey" for table "test_table_2"
|
||||||
DEBUG: building index "test_table_2_pkey" on table "test_table_2" serially
|
DEBUG: building index "test_table_2_pkey" on table "test_table_2"
|
||||||
SELECT create_distributed_table('test_table_2', 'id');
|
SELECT create_distributed_table('test_table_2', 'id');
|
||||||
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
||||||
DETAIL: NOTICE from localhost:57638
|
DETAIL: NOTICE from localhost:57638
|
||||||
|
@ -993,11 +993,11 @@ BEGIN;
|
||||||
|
|
||||||
CREATE TABLE test_table_1(id int PRIMARY KEY);
|
CREATE TABLE test_table_1(id int PRIMARY KEY);
|
||||||
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_1_pkey" for table "test_table_1"
|
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_1_pkey" for table "test_table_1"
|
||||||
DEBUG: building index "test_table_1_pkey" on table "test_table_1" serially
|
DEBUG: building index "test_table_1_pkey" on table "test_table_1"
|
||||||
INSERT INTO test_table_1 SELECT i FROM generate_series(0,100) i;
|
INSERT INTO test_table_1 SELECT i FROM generate_series(0,100) i;
|
||||||
CREATE TABLE test_table_2(id int PRIMARY KEY, value_1 int, FOREIGN KEY(value_1) REFERENCES test_table_1(id));
|
CREATE TABLE test_table_2(id int PRIMARY KEY, value_1 int, FOREIGN KEY(value_1) REFERENCES test_table_1(id));
|
||||||
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_2_pkey" for table "test_table_2"
|
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_2_pkey" for table "test_table_2"
|
||||||
DEBUG: building index "test_table_2_pkey" on table "test_table_2" serially
|
DEBUG: building index "test_table_2_pkey" on table "test_table_2"
|
||||||
INSERT INTO test_table_2 SELECT i, i FROM generate_series(0,100) i;
|
INSERT INTO test_table_2 SELECT i, i FROM generate_series(0,100) i;
|
||||||
SELECT create_reference_table('test_table_1');
|
SELECT create_reference_table('test_table_1');
|
||||||
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
||||||
|
@ -1037,11 +1037,11 @@ BEGIN;
|
||||||
SET LOCAL citus.multi_shard_modify_mode TO 'sequential';
|
SET LOCAL citus.multi_shard_modify_mode TO 'sequential';
|
||||||
CREATE TABLE test_table_1(id int PRIMARY KEY);
|
CREATE TABLE test_table_1(id int PRIMARY KEY);
|
||||||
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_1_pkey" for table "test_table_1"
|
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_1_pkey" for table "test_table_1"
|
||||||
DEBUG: building index "test_table_1_pkey" on table "test_table_1" serially
|
DEBUG: building index "test_table_1_pkey" on table "test_table_1"
|
||||||
INSERT INTO test_table_1 SELECT i FROM generate_series(0,100) i;
|
INSERT INTO test_table_1 SELECT i FROM generate_series(0,100) i;
|
||||||
CREATE TABLE test_table_2(id int PRIMARY KEY, value_1 int, FOREIGN KEY(value_1) REFERENCES test_table_1(id));
|
CREATE TABLE test_table_2(id int PRIMARY KEY, value_1 int, FOREIGN KEY(value_1) REFERENCES test_table_1(id));
|
||||||
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_2_pkey" for table "test_table_2"
|
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_2_pkey" for table "test_table_2"
|
||||||
DEBUG: building index "test_table_2_pkey" on table "test_table_2" serially
|
DEBUG: building index "test_table_2_pkey" on table "test_table_2"
|
||||||
INSERT INTO test_table_2 SELECT i, i FROM generate_series(0,100) i;
|
INSERT INTO test_table_2 SELECT i, i FROM generate_series(0,100) i;
|
||||||
SELECT create_reference_table('test_table_1');
|
SELECT create_reference_table('test_table_1');
|
||||||
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
||||||
|
@ -1079,10 +1079,10 @@ BEGIN;
|
||||||
|
|
||||||
CREATE TABLE test_table_1(id int PRIMARY KEY);
|
CREATE TABLE test_table_1(id int PRIMARY KEY);
|
||||||
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_1_pkey" for table "test_table_1"
|
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_1_pkey" for table "test_table_1"
|
||||||
DEBUG: building index "test_table_1_pkey" on table "test_table_1" serially
|
DEBUG: building index "test_table_1_pkey" on table "test_table_1"
|
||||||
CREATE TABLE test_table_2(id int PRIMARY KEY, value_1 int, FOREIGN KEY(value_1) REFERENCES test_table_1(id));
|
CREATE TABLE test_table_2(id int PRIMARY KEY, value_1 int, FOREIGN KEY(value_1) REFERENCES test_table_1(id));
|
||||||
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_2_pkey" for table "test_table_2"
|
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "test_table_2_pkey" for table "test_table_2"
|
||||||
DEBUG: building index "test_table_2_pkey" on table "test_table_2" serially
|
DEBUG: building index "test_table_2_pkey" on table "test_table_2"
|
||||||
SELECT create_reference_table('test_table_1');
|
SELECT create_reference_table('test_table_1');
|
||||||
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
||||||
DETAIL: NOTICE from localhost:57638
|
DETAIL: NOTICE from localhost:57638
|
||||||
|
@ -1119,7 +1119,7 @@ DETAIL: NOTICE from localhost:57638
|
||||||
|
|
||||||
-- and maybe some other test
|
-- and maybe some other test
|
||||||
CREATE INDEX i1 ON test_table_1(id);
|
CREATE INDEX i1 ON test_table_1(id);
|
||||||
DEBUG: building index "i1" on table "test_table_1" serially
|
DEBUG: building index "i1" on table "test_table_1"
|
||||||
ALTER TABLE test_table_2 ADD CONSTRAINT check_val CHECK (id > 0);
|
ALTER TABLE test_table_2 ADD CONSTRAINT check_val CHECK (id > 0);
|
||||||
DEBUG: verifying table "test_table_2"
|
DEBUG: verifying table "test_table_2"
|
||||||
SELECT count(*) FROM test_table_2;
|
SELECT count(*) FROM test_table_2;
|
||||||
|
@ -1143,7 +1143,7 @@ COMMIT;
|
||||||
-- set the mode to sequential for the next operations
|
-- set the mode to sequential for the next operations
|
||||||
CREATE TABLE reference_table(id int PRIMARY KEY);
|
CREATE TABLE reference_table(id int PRIMARY KEY);
|
||||||
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "reference_table_pkey" for table "reference_table"
|
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "reference_table_pkey" for table "reference_table"
|
||||||
DEBUG: building index "reference_table_pkey" on table "reference_table" serially
|
DEBUG: building index "reference_table_pkey" on table "reference_table"
|
||||||
SELECT create_reference_table('reference_table');
|
SELECT create_reference_table('reference_table');
|
||||||
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
||||||
DETAIL: NOTICE from localhost:57638
|
DETAIL: NOTICE from localhost:57638
|
||||||
|
@ -1160,7 +1160,7 @@ DETAIL: NOTICE from localhost:57638
|
||||||
|
|
||||||
CREATE TABLE distributed_table(id int PRIMARY KEY, value_1 int);
|
CREATE TABLE distributed_table(id int PRIMARY KEY, value_1 int);
|
||||||
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "distributed_table_pkey" for table "distributed_table"
|
DEBUG: CREATE TABLE / PRIMARY KEY will create implicit index "distributed_table_pkey" for table "distributed_table"
|
||||||
DEBUG: building index "distributed_table_pkey" on table "distributed_table" serially
|
DEBUG: building index "distributed_table_pkey" on table "distributed_table"
|
||||||
SELECT create_distributed_table('distributed_table', 'id');
|
SELECT create_distributed_table('distributed_table', 'id');
|
||||||
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
DEBUG: schema "test_fkey_to_ref_in_tx" already exists, skipping
|
||||||
DETAIL: NOTICE from localhost:57638
|
DETAIL: NOTICE from localhost:57638
|
||||||
|
@ -1199,7 +1199,6 @@ DEBUG: Collecting INSERT ... SELECT results on coordinator
|
||||||
-- see https://github.com/citusdata/citus_docs/issues/664 for the discussion
|
-- see https://github.com/citusdata/citus_docs/issues/664 for the discussion
|
||||||
WITH t1 AS (DELETE FROM reference_table RETURNING id)
|
WITH t1 AS (DELETE FROM reference_table RETURNING id)
|
||||||
DELETE FROM distributed_table USING t1 WHERE value_1 = t1.id RETURNING *;
|
DELETE FROM distributed_table USING t1 WHERE value_1 = t1.id RETURNING *;
|
||||||
DEBUG: common table expressions are not supported in distributed modifications
|
|
||||||
DEBUG: generating subplan 92_1 for CTE t1: DELETE FROM test_fkey_to_ref_in_tx.reference_table RETURNING id
|
DEBUG: generating subplan 92_1 for CTE t1: DELETE FROM test_fkey_to_ref_in_tx.reference_table RETURNING id
|
||||||
DEBUG: Plan 92 query after replacing subqueries and CTEs: DELETE FROM test_fkey_to_ref_in_tx.distributed_table USING (SELECT intermediate_result.id FROM read_intermediate_result('92_1'::text, 'binary'::citus_copy_format) intermediate_result(id integer)) t1 WHERE (distributed_table.value_1 OPERATOR(pg_catalog.=) t1.id) RETURNING distributed_table.id, distributed_table.value_1, t1.id
|
DEBUG: Plan 92 query after replacing subqueries and CTEs: DELETE FROM test_fkey_to_ref_in_tx.distributed_table USING (SELECT intermediate_result.id FROM read_intermediate_result('92_1'::text, 'binary'::citus_copy_format) intermediate_result(id integer)) t1 WHERE (distributed_table.value_1 OPERATOR(pg_catalog.=) t1.id) RETURNING distributed_table.id, distributed_table.value_1, t1.id
|
||||||
DEBUG: switching to sequential query execution mode
|
DEBUG: switching to sequential query execution mode
|
||||||
|
@ -1221,7 +1220,6 @@ DEBUG: Collecting INSERT ... SELECT results on coordinator
|
||||||
-- see https://github.com/citusdata/citus_docs/issues/664 for the discussion
|
-- see https://github.com/citusdata/citus_docs/issues/664 for the discussion
|
||||||
WITH t1 AS (DELETE FROM reference_table RETURNING id)
|
WITH t1 AS (DELETE FROM reference_table RETURNING id)
|
||||||
SELECT count(*) FROM distributed_table, t1 WHERE value_1 = t1.id;
|
SELECT count(*) FROM distributed_table, t1 WHERE value_1 = t1.id;
|
||||||
DEBUG: data-modifying statements are not supported in the WITH clauses of distributed queries
|
|
||||||
DEBUG: generating subplan 96_1 for CTE t1: DELETE FROM test_fkey_to_ref_in_tx.reference_table RETURNING id
|
DEBUG: generating subplan 96_1 for CTE t1: DELETE FROM test_fkey_to_ref_in_tx.reference_table RETURNING id
|
||||||
DEBUG: Plan 96 query after replacing subqueries and CTEs: SELECT count(*) AS count FROM test_fkey_to_ref_in_tx.distributed_table, (SELECT intermediate_result.id FROM read_intermediate_result('96_1'::text, 'binary'::citus_copy_format) intermediate_result(id integer)) t1 WHERE (distributed_table.value_1 OPERATOR(pg_catalog.=) t1.id)
|
DEBUG: Plan 96 query after replacing subqueries and CTEs: SELECT count(*) AS count FROM test_fkey_to_ref_in_tx.distributed_table, (SELECT intermediate_result.id FROM read_intermediate_result('96_1'::text, 'binary'::citus_copy_format) intermediate_result(id integer)) t1 WHERE (distributed_table.value_1 OPERATOR(pg_catalog.=) t1.id)
|
||||||
DEBUG: switching to sequential query execution mode
|
DEBUG: switching to sequential query execution mode
|
||||||
|
@ -1236,7 +1234,6 @@ DETAIL: Reference relation "reference_table" is modified, which might lead to d
|
||||||
WITH t1 AS (DELETE FROM distributed_table RETURNING id),
|
WITH t1 AS (DELETE FROM distributed_table RETURNING id),
|
||||||
t2 AS (DELETE FROM reference_table RETURNING id)
|
t2 AS (DELETE FROM reference_table RETURNING id)
|
||||||
SELECT count(*) FROM distributed_table, t1, t2 WHERE value_1 = t1.id AND value_1 = t2.id;
|
SELECT count(*) FROM distributed_table, t1, t2 WHERE value_1 = t1.id AND value_1 = t2.id;
|
||||||
DEBUG: data-modifying statements are not supported in the WITH clauses of distributed queries
|
|
||||||
DEBUG: generating subplan 98_1 for CTE t1: DELETE FROM test_fkey_to_ref_in_tx.distributed_table RETURNING id
|
DEBUG: generating subplan 98_1 for CTE t1: DELETE FROM test_fkey_to_ref_in_tx.distributed_table RETURNING id
|
||||||
DEBUG: generating subplan 98_2 for CTE t2: DELETE FROM test_fkey_to_ref_in_tx.reference_table RETURNING id
|
DEBUG: generating subplan 98_2 for CTE t2: DELETE FROM test_fkey_to_ref_in_tx.reference_table RETURNING id
|
||||||
DEBUG: Plan 98 query after replacing subqueries and CTEs: SELECT count(*) AS count FROM test_fkey_to_ref_in_tx.distributed_table, (SELECT intermediate_result.id FROM read_intermediate_result('98_1'::text, 'binary'::citus_copy_format) intermediate_result(id integer)) t1, (SELECT intermediate_result.id FROM read_intermediate_result('98_2'::text, 'binary'::citus_copy_format) intermediate_result(id integer)) t2 WHERE ((distributed_table.value_1 OPERATOR(pg_catalog.=) t1.id) AND (distributed_table.value_1 OPERATOR(pg_catalog.=) t2.id))
|
DEBUG: Plan 98 query after replacing subqueries and CTEs: SELECT count(*) AS count FROM test_fkey_to_ref_in_tx.distributed_table, (SELECT intermediate_result.id FROM read_intermediate_result('98_1'::text, 'binary'::citus_copy_format) intermediate_result(id integer)) t1, (SELECT intermediate_result.id FROM read_intermediate_result('98_2'::text, 'binary'::citus_copy_format) intermediate_result(id integer)) t2 WHERE ((distributed_table.value_1 OPERATOR(pg_catalog.=) t1.id) AND (distributed_table.value_1 OPERATOR(pg_catalog.=) t2.id))
|
||||||
|
@ -1246,7 +1243,6 @@ HINT: Try re-running the transaction with "SET LOCAL citus.multi_shard_modify_m
|
||||||
-- table via t1, and then access to the reference table in the main query
|
-- table via t1, and then access to the reference table in the main query
|
||||||
WITH t1 AS (DELETE FROM distributed_table RETURNING id)
|
WITH t1 AS (DELETE FROM distributed_table RETURNING id)
|
||||||
DELETE FROM reference_table RETURNING id;
|
DELETE FROM reference_table RETURNING id;
|
||||||
DEBUG: common table expressions are not supported in distributed modifications
|
|
||||||
DEBUG: generating subplan 101_1 for CTE t1: DELETE FROM test_fkey_to_ref_in_tx.distributed_table RETURNING id
|
DEBUG: generating subplan 101_1 for CTE t1: DELETE FROM test_fkey_to_ref_in_tx.distributed_table RETURNING id
|
||||||
DEBUG: Plan 101 query after replacing subqueries and CTEs: DELETE FROM test_fkey_to_ref_in_tx.reference_table RETURNING id
|
DEBUG: Plan 101 query after replacing subqueries and CTEs: DELETE FROM test_fkey_to_ref_in_tx.reference_table RETURNING id
|
||||||
ERROR: cannot execute DML on reference relation "reference_table" because there was a parallel DML access to distributed relation "distributed_table" in the same transaction
|
ERROR: cannot execute DML on reference relation "reference_table" because there was a parallel DML access to distributed relation "distributed_table" in the same transaction
|
||||||
|
@ -1259,7 +1255,6 @@ BEGIN;
|
||||||
WITH t1 AS (DELETE FROM distributed_table RETURNING id),
|
WITH t1 AS (DELETE FROM distributed_table RETURNING id),
|
||||||
t2 AS (DELETE FROM reference_table RETURNING id)
|
t2 AS (DELETE FROM reference_table RETURNING id)
|
||||||
SELECT count(*) FROM distributed_table, t1, t2 WHERE value_1 = t1.id AND value_1 = t2.id;
|
SELECT count(*) FROM distributed_table, t1, t2 WHERE value_1 = t1.id AND value_1 = t2.id;
|
||||||
DEBUG: data-modifying statements are not supported in the WITH clauses of distributed queries
|
|
||||||
DEBUG: generating subplan 103_1 for CTE t1: DELETE FROM test_fkey_to_ref_in_tx.distributed_table RETURNING id
|
DEBUG: generating subplan 103_1 for CTE t1: DELETE FROM test_fkey_to_ref_in_tx.distributed_table RETURNING id
|
||||||
DEBUG: generating subplan 103_2 for CTE t2: DELETE FROM test_fkey_to_ref_in_tx.reference_table RETURNING id
|
DEBUG: generating subplan 103_2 for CTE t2: DELETE FROM test_fkey_to_ref_in_tx.reference_table RETURNING id
|
||||||
DEBUG: Plan 103 query after replacing subqueries and CTEs: SELECT count(*) AS count FROM test_fkey_to_ref_in_tx.distributed_table, (SELECT intermediate_result.id FROM read_intermediate_result('103_1'::text, 'binary'::citus_copy_format) intermediate_result(id integer)) t1, (SELECT intermediate_result.id FROM read_intermediate_result('103_2'::text, 'binary'::citus_copy_format) intermediate_result(id integer)) t2 WHERE ((distributed_table.value_1 OPERATOR(pg_catalog.=) t1.id) AND (distributed_table.value_1 OPERATOR(pg_catalog.=) t2.id))
|
DEBUG: Plan 103 query after replacing subqueries and CTEs: SELECT count(*) AS count FROM test_fkey_to_ref_in_tx.distributed_table, (SELECT intermediate_result.id FROM read_intermediate_result('103_1'::text, 'binary'::citus_copy_format) intermediate_result(id integer)) t1, (SELECT intermediate_result.id FROM read_intermediate_result('103_2'::text, 'binary'::citus_copy_format) intermediate_result(id integer)) t2 WHERE ((distributed_table.value_1 OPERATOR(pg_catalog.=) t1.id) AND (distributed_table.value_1 OPERATOR(pg_catalog.=) t2.id))
|
||||||
|
@ -1274,7 +1269,6 @@ BEGIN;
|
||||||
SET LOCAL citus.multi_shard_modify_mode TO 'sequential';
|
SET LOCAL citus.multi_shard_modify_mode TO 'sequential';
|
||||||
WITH t1 AS (DELETE FROM distributed_table RETURNING id)
|
WITH t1 AS (DELETE FROM distributed_table RETURNING id)
|
||||||
DELETE FROM reference_table RETURNING id;
|
DELETE FROM reference_table RETURNING id;
|
||||||
DEBUG: common table expressions are not supported in distributed modifications
|
|
||||||
DEBUG: generating subplan 106_1 for CTE t1: DELETE FROM test_fkey_to_ref_in_tx.distributed_table RETURNING id
|
DEBUG: generating subplan 106_1 for CTE t1: DELETE FROM test_fkey_to_ref_in_tx.distributed_table RETURNING id
|
||||||
DEBUG: Plan 106 query after replacing subqueries and CTEs: DELETE FROM test_fkey_to_ref_in_tx.reference_table RETURNING id
|
DEBUG: Plan 106 query after replacing subqueries and CTEs: DELETE FROM test_fkey_to_ref_in_tx.reference_table RETURNING id
|
||||||
id
|
id
|
||||||
|
|
|
@ -766,7 +766,6 @@ FROM
|
||||||
WHERE
|
WHERE
|
||||||
colocated_table_test.value_1 = reference_table_test.value_1
|
colocated_table_test.value_1 = reference_table_test.value_1
|
||||||
ORDER BY 1;
|
ORDER BY 1;
|
||||||
DEBUG: Router planner cannot handle multi-shard select queries
|
|
||||||
LOG: join order: [ "colocated_table_test" ][ reference join "reference_table_test" ]
|
LOG: join order: [ "colocated_table_test" ][ reference join "reference_table_test" ]
|
||||||
value_1
|
value_1
|
||||||
---------
|
---------
|
||||||
|
@ -781,7 +780,6 @@ FROM
|
||||||
WHERE
|
WHERE
|
||||||
colocated_table_test.value_2 = reference_table_test.value_2
|
colocated_table_test.value_2 = reference_table_test.value_2
|
||||||
ORDER BY 1;
|
ORDER BY 1;
|
||||||
DEBUG: Router planner cannot handle multi-shard select queries
|
|
||||||
LOG: join order: [ "colocated_table_test" ][ reference join "reference_table_test" ]
|
LOG: join order: [ "colocated_table_test" ][ reference join "reference_table_test" ]
|
||||||
value_2
|
value_2
|
||||||
---------
|
---------
|
||||||
|
@ -796,7 +794,6 @@ FROM
|
||||||
WHERE
|
WHERE
|
||||||
reference_table_test.value_1 = colocated_table_test.value_1
|
reference_table_test.value_1 = colocated_table_test.value_1
|
||||||
ORDER BY 1;
|
ORDER BY 1;
|
||||||
DEBUG: Router planner cannot handle multi-shard select queries
|
|
||||||
LOG: join order: [ "colocated_table_test" ][ reference join "reference_table_test" ]
|
LOG: join order: [ "colocated_table_test" ][ reference join "reference_table_test" ]
|
||||||
value_2
|
value_2
|
||||||
---------
|
---------
|
||||||
|
@ -811,7 +808,6 @@ FROM
|
||||||
WHERE
|
WHERE
|
||||||
colocated_table_test.value_2 = reference_table_test.value_2
|
colocated_table_test.value_2 = reference_table_test.value_2
|
||||||
ORDER BY 1;
|
ORDER BY 1;
|
||||||
DEBUG: Router planner cannot handle multi-shard select queries
|
|
||||||
LOG: join order: [ "colocated_table_test" ][ reference join "reference_table_test" ][ cartesian product "colocated_table_test_2" ]
|
LOG: join order: [ "colocated_table_test" ][ reference join "reference_table_test" ][ cartesian product "colocated_table_test_2" ]
|
||||||
ERROR: cannot perform distributed planning on this query
|
ERROR: cannot perform distributed planning on this query
|
||||||
DETAIL: Cartesian products are currently unsupported
|
DETAIL: Cartesian products are currently unsupported
|
||||||
|
@ -822,7 +818,6 @@ FROM
|
||||||
WHERE
|
WHERE
|
||||||
colocated_table_test.value_1 = colocated_table_test_2.value_1 AND colocated_table_test.value_2 = reference_table_test.value_2
|
colocated_table_test.value_1 = colocated_table_test_2.value_1 AND colocated_table_test.value_2 = reference_table_test.value_2
|
||||||
ORDER BY 1;
|
ORDER BY 1;
|
||||||
DEBUG: Router planner cannot handle multi-shard select queries
|
|
||||||
LOG: join order: [ "colocated_table_test" ][ reference join "reference_table_test" ][ local partition join "colocated_table_test_2" ]
|
LOG: join order: [ "colocated_table_test" ][ reference join "reference_table_test" ][ local partition join "colocated_table_test_2" ]
|
||||||
value_2
|
value_2
|
||||||
---------
|
---------
|
||||||
|
@ -838,7 +833,6 @@ FROM
|
||||||
WHERE
|
WHERE
|
||||||
colocated_table_test.value_2 = colocated_table_test_2.value_2 AND colocated_table_test.value_2 = reference_table_test.value_2
|
colocated_table_test.value_2 = colocated_table_test_2.value_2 AND colocated_table_test.value_2 = reference_table_test.value_2
|
||||||
ORDER BY 1;
|
ORDER BY 1;
|
||||||
DEBUG: Router planner cannot handle multi-shard select queries
|
|
||||||
LOG: join order: [ "colocated_table_test" ][ reference join "reference_table_test" ][ dual partition join "colocated_table_test_2" ]
|
LOG: join order: [ "colocated_table_test" ][ reference join "reference_table_test" ][ dual partition join "colocated_table_test_2" ]
|
||||||
value_2
|
value_2
|
||||||
---------
|
---------
|
||||||
|
@ -853,7 +847,6 @@ FROM
|
||||||
WHERE
|
WHERE
|
||||||
colocated_table_test.value_1 = reference_table_test.value_1 AND colocated_table_test_2.value_1 = reference_table_test.value_1
|
colocated_table_test.value_1 = reference_table_test.value_1 AND colocated_table_test_2.value_1 = reference_table_test.value_1
|
||||||
ORDER BY 1;
|
ORDER BY 1;
|
||||||
DEBUG: Router planner cannot handle multi-shard select queries
|
|
||||||
LOG: join order: [ "colocated_table_test" ][ reference join "reference_table_test" ][ dual partition join "colocated_table_test_2" ]
|
LOG: join order: [ "colocated_table_test" ][ reference join "reference_table_test" ][ dual partition join "colocated_table_test_2" ]
|
||||||
value_2
|
value_2
|
||||||
---------
|
---------
|
||||||
|
|
|
@ -815,7 +815,6 @@ SET client_min_messages TO DEBUG1;
|
||||||
UNION
|
UNION
|
||||||
(SELECT * FROM articles_hash_mx WHERE author_id = 2)
|
(SELECT * FROM articles_hash_mx WHERE author_id = 2)
|
||||||
ORDER BY 1,2;
|
ORDER BY 1,2;
|
||||||
DEBUG: cannot run command which targets multiple shards
|
|
||||||
DEBUG: generating subplan 110_1 for subquery SELECT id, author_id, title, word_count FROM public.articles_hash_mx WHERE (author_id OPERATOR(pg_catalog.=) 1)
|
DEBUG: generating subplan 110_1 for subquery SELECT id, author_id, title, word_count FROM public.articles_hash_mx WHERE (author_id OPERATOR(pg_catalog.=) 1)
|
||||||
DEBUG: generating subplan 110_2 for subquery SELECT id, author_id, title, word_count FROM public.articles_hash_mx WHERE (author_id OPERATOR(pg_catalog.=) 2)
|
DEBUG: generating subplan 110_2 for subquery SELECT id, author_id, title, word_count FROM public.articles_hash_mx WHERE (author_id OPERATOR(pg_catalog.=) 2)
|
||||||
DEBUG: Plan 110 query after replacing subqueries and CTEs: SELECT intermediate_result.id, intermediate_result.author_id, intermediate_result.title, intermediate_result.word_count FROM read_intermediate_result('110_1'::text, 'binary'::citus_copy_format) intermediate_result(id bigint, author_id bigint, title character varying(20), word_count integer) UNION SELECT intermediate_result.id, intermediate_result.author_id, intermediate_result.title, intermediate_result.word_count FROM read_intermediate_result('110_2'::text, 'binary'::citus_copy_format) intermediate_result(id bigint, author_id bigint, title character varying(20), word_count integer) ORDER BY 1, 2
|
DEBUG: Plan 110 query after replacing subqueries and CTEs: SELECT intermediate_result.id, intermediate_result.author_id, intermediate_result.title, intermediate_result.word_count FROM read_intermediate_result('110_1'::text, 'binary'::citus_copy_format) intermediate_result(id bigint, author_id bigint, title character varying(20), word_count integer) UNION SELECT intermediate_result.id, intermediate_result.author_id, intermediate_result.title, intermediate_result.word_count FROM read_intermediate_result('110_2'::text, 'binary'::citus_copy_format) intermediate_result(id bigint, author_id bigint, title character varying(20), word_count integer) ORDER BY 1, 2
|
||||||
|
@ -839,7 +838,6 @@ SELECT * FROM (
|
||||||
(SELECT * FROM articles_hash_mx WHERE author_id = 2)) uu
|
(SELECT * FROM articles_hash_mx WHERE author_id = 2)) uu
|
||||||
ORDER BY 1, 2
|
ORDER BY 1, 2
|
||||||
LIMIT 5;
|
LIMIT 5;
|
||||||
DEBUG: cannot run command which targets multiple shards
|
|
||||||
DEBUG: push down of limit count: 5
|
DEBUG: push down of limit count: 5
|
||||||
id | author_id | title | word_count
|
id | author_id | title | word_count
|
||||||
----+-----------+------------+------------
|
----+-----------+------------+------------
|
||||||
|
@ -854,7 +852,6 @@ DEBUG: push down of limit count: 5
|
||||||
SELECT *
|
SELECT *
|
||||||
FROM articles_hash_mx a, articles_hash_mx b
|
FROM articles_hash_mx a, articles_hash_mx b
|
||||||
WHERE a.id = b.id AND a.author_id = 1;
|
WHERE a.id = b.id AND a.author_id = 1;
|
||||||
DEBUG: Router planner cannot handle multi-shard select queries
|
|
||||||
ERROR: the query contains a join that requires repartitioning
|
ERROR: the query contains a join that requires repartitioning
|
||||||
HINT: Set citus.enable_repartition_joins to on to enable repartitioning
|
HINT: Set citus.enable_repartition_joins to on to enable repartitioning
|
||||||
-- queries which hit more than 1 shards are not router plannable or executable
|
-- queries which hit more than 1 shards are not router plannable or executable
|
||||||
|
@ -863,7 +860,6 @@ SELECT *
|
||||||
FROM articles_hash_mx
|
FROM articles_hash_mx
|
||||||
WHERE author_id >= 1 AND author_id <= 3
|
WHERE author_id >= 1 AND author_id <= 3
|
||||||
ORDER BY 1,2,3,4;
|
ORDER BY 1,2,3,4;
|
||||||
DEBUG: Router planner cannot handle multi-shard select queries
|
|
||||||
id | author_id | title | word_count
|
id | author_id | title | word_count
|
||||||
----+-----------+--------------+------------
|
----+-----------+--------------+------------
|
||||||
1 | 1 | arsenous | 9572
|
1 | 1 | arsenous | 9572
|
||||||
|
|
|
@ -36,6 +36,7 @@ SELECT shardminvalue, shardmaxvalue from pg_dist_shard WHERE shardid = 290001;
|
||||||
-- Adding l_orderkey = 1 to make the query not router executable
|
-- Adding l_orderkey = 1 to make the query not router executable
|
||||||
EXPLAIN (COSTS FALSE)
|
EXPLAIN (COSTS FALSE)
|
||||||
SELECT l_orderkey, l_linenumber, l_shipdate FROM lineitem WHERE l_orderkey = 9030 or l_orderkey = 1;
|
SELECT l_orderkey, l_linenumber, l_shipdate FROM lineitem WHERE l_orderkey = 9030 or l_orderkey = 1;
|
||||||
|
DEBUG: Router planner does not support append-partitioned tables.
|
||||||
LOG: join order: [ "lineitem" ]
|
LOG: join order: [ "lineitem" ]
|
||||||
QUERY PLAN
|
QUERY PLAN
|
||||||
-----------------------------------------------------------------------
|
-----------------------------------------------------------------------
|
||||||
|
@ -65,6 +66,7 @@ LOG: join order: [ "lineitem" ]
|
||||||
EXPLAIN (COSTS FALSE)
|
EXPLAIN (COSTS FALSE)
|
||||||
SELECT sum(l_linenumber), avg(l_linenumber) FROM lineitem, orders
|
SELECT sum(l_linenumber), avg(l_linenumber) FROM lineitem, orders
|
||||||
WHERE l_orderkey = o_orderkey;
|
WHERE l_orderkey = o_orderkey;
|
||||||
|
DEBUG: Router planner does not support append-partitioned tables.
|
||||||
LOG: join order: [ "lineitem" ][ local partition join "orders" ]
|
LOG: join order: [ "lineitem" ][ local partition join "orders" ]
|
||||||
DEBUG: join prunable for intervals [1,5986] and [8997,14947]
|
DEBUG: join prunable for intervals [1,5986] and [8997,14947]
|
||||||
DEBUG: join prunable for intervals [8997,14947] and [1,5986]
|
DEBUG: join prunable for intervals [8997,14947] and [1,5986]
|
||||||
|
@ -98,6 +100,7 @@ DEBUG: join prunable for intervals [8997,14947] and [1,5986]
|
||||||
UPDATE pg_dist_shard SET shardminvalue = NULL WHERE shardid = 290000;
|
UPDATE pg_dist_shard SET shardminvalue = NULL WHERE shardid = 290000;
|
||||||
EXPLAIN (COSTS FALSE)
|
EXPLAIN (COSTS FALSE)
|
||||||
SELECT l_orderkey, l_linenumber, l_shipdate FROM lineitem WHERE l_orderkey = 9030;
|
SELECT l_orderkey, l_linenumber, l_shipdate FROM lineitem WHERE l_orderkey = 9030;
|
||||||
|
DEBUG: Router planner does not support append-partitioned tables.
|
||||||
LOG: join order: [ "lineitem" ]
|
LOG: join order: [ "lineitem" ]
|
||||||
QUERY PLAN
|
QUERY PLAN
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
@ -117,6 +120,7 @@ LOG: join order: [ "lineitem" ]
|
||||||
EXPLAIN (COSTS FALSE)
|
EXPLAIN (COSTS FALSE)
|
||||||
SELECT sum(l_linenumber), avg(l_linenumber) FROM lineitem, orders
|
SELECT sum(l_linenumber), avg(l_linenumber) FROM lineitem, orders
|
||||||
WHERE l_partkey = o_custkey;
|
WHERE l_partkey = o_custkey;
|
||||||
|
DEBUG: Router planner does not support append-partitioned tables.
|
||||||
LOG: join order: [ "lineitem" ][ dual partition join "orders" ]
|
LOG: join order: [ "lineitem" ][ dual partition join "orders" ]
|
||||||
DEBUG: join prunable for task partitionId 0 and 1
|
DEBUG: join prunable for task partitionId 0 and 1
|
||||||
DEBUG: join prunable for task partitionId 0 and 2
|
DEBUG: join prunable for task partitionId 0 and 2
|
||||||
|
@ -168,6 +172,7 @@ HINT: Since you enabled citus.enable_repartition_joins Citus chose to use task-
|
||||||
UPDATE pg_dist_shard SET shardmaxvalue = NULL WHERE shardid = 290001;
|
UPDATE pg_dist_shard SET shardmaxvalue = NULL WHERE shardid = 290001;
|
||||||
EXPLAIN (COSTS FALSE)
|
EXPLAIN (COSTS FALSE)
|
||||||
SELECT l_orderkey, l_linenumber, l_shipdate FROM lineitem WHERE l_orderkey = 9030;
|
SELECT l_orderkey, l_linenumber, l_shipdate FROM lineitem WHERE l_orderkey = 9030;
|
||||||
|
DEBUG: Router planner does not support append-partitioned tables.
|
||||||
LOG: join order: [ "lineitem" ]
|
LOG: join order: [ "lineitem" ]
|
||||||
QUERY PLAN
|
QUERY PLAN
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
@ -187,6 +192,7 @@ LOG: join order: [ "lineitem" ]
|
||||||
EXPLAIN (COSTS FALSE)
|
EXPLAIN (COSTS FALSE)
|
||||||
SELECT sum(l_linenumber), avg(l_linenumber) FROM lineitem, orders
|
SELECT sum(l_linenumber), avg(l_linenumber) FROM lineitem, orders
|
||||||
WHERE l_partkey = o_custkey;
|
WHERE l_partkey = o_custkey;
|
||||||
|
DEBUG: Router planner does not support append-partitioned tables.
|
||||||
LOG: join order: [ "lineitem" ][ dual partition join "orders" ]
|
LOG: join order: [ "lineitem" ][ dual partition join "orders" ]
|
||||||
DEBUG: join prunable for task partitionId 0 and 1
|
DEBUG: join prunable for task partitionId 0 and 1
|
||||||
DEBUG: join prunable for task partitionId 0 and 2
|
DEBUG: join prunable for task partitionId 0 and 2
|
||||||
|
@ -238,6 +244,7 @@ HINT: Since you enabled citus.enable_repartition_joins Citus chose to use task-
|
||||||
UPDATE pg_dist_shard SET shardminvalue = '0' WHERE shardid = 290000;
|
UPDATE pg_dist_shard SET shardminvalue = '0' WHERE shardid = 290000;
|
||||||
EXPLAIN (COSTS FALSE)
|
EXPLAIN (COSTS FALSE)
|
||||||
SELECT l_orderkey, l_linenumber, l_shipdate FROM lineitem WHERE l_orderkey = 9030;
|
SELECT l_orderkey, l_linenumber, l_shipdate FROM lineitem WHERE l_orderkey = 9030;
|
||||||
|
DEBUG: Router planner does not support append-partitioned tables.
|
||||||
LOG: join order: [ "lineitem" ]
|
LOG: join order: [ "lineitem" ]
|
||||||
DEBUG: Plan is router executable
|
DEBUG: Plan is router executable
|
||||||
QUERY PLAN
|
QUERY PLAN
|
||||||
|
@ -254,6 +261,7 @@ DEBUG: Plan is router executable
|
||||||
EXPLAIN (COSTS FALSE)
|
EXPLAIN (COSTS FALSE)
|
||||||
SELECT sum(l_linenumber), avg(l_linenumber) FROM lineitem, orders
|
SELECT sum(l_linenumber), avg(l_linenumber) FROM lineitem, orders
|
||||||
WHERE l_partkey = o_custkey;
|
WHERE l_partkey = o_custkey;
|
||||||
|
DEBUG: Router planner does not support append-partitioned tables.
|
||||||
LOG: join order: [ "lineitem" ][ dual partition join "orders" ]
|
LOG: join order: [ "lineitem" ][ dual partition join "orders" ]
|
||||||
DEBUG: join prunable for task partitionId 0 and 1
|
DEBUG: join prunable for task partitionId 0 and 1
|
||||||
DEBUG: join prunable for task partitionId 0 and 2
|
DEBUG: join prunable for task partitionId 0 and 2
|
||||||
|
|
|
@ -41,8 +41,6 @@ FROM
|
||||||
) as foo
|
) as foo
|
||||||
WHERE
|
WHERE
|
||||||
foo.avg_tenant_id::int::text = reference_table.id;
|
foo.avg_tenant_id::int::text = reference_table.id;
|
||||||
DEBUG: only reference tables may be queried when targeting a reference table with multi shard UPDATE/DELETE queries with multiple tables
|
|
||||||
DEBUG: Router planner cannot handle multi-shard select queries
|
|
||||||
DEBUG: generating subplan 4_1 for subquery SELECT avg((tenant_id)::integer) AS avg_tenant_id FROM recursive_dml_queries_mx.second_distributed_table
|
DEBUG: generating subplan 4_1 for subquery SELECT avg((tenant_id)::integer) AS avg_tenant_id FROM recursive_dml_queries_mx.second_distributed_table
|
||||||
DEBUG: Plan 4 query after replacing subqueries and CTEs: UPDATE recursive_dml_queries_mx.reference_table SET name = ('new_'::text OPERATOR(pg_catalog.||) reference_table.name) FROM (SELECT intermediate_result.avg_tenant_id FROM read_intermediate_result('4_1'::text, 'binary'::citus_copy_format) intermediate_result(avg_tenant_id numeric)) foo WHERE (((foo.avg_tenant_id)::integer)::text OPERATOR(pg_catalog.=) reference_table.id)
|
DEBUG: Plan 4 query after replacing subqueries and CTEs: UPDATE recursive_dml_queries_mx.reference_table SET name = ('new_'::text OPERATOR(pg_catalog.||) reference_table.name) FROM (SELECT intermediate_result.avg_tenant_id FROM read_intermediate_result('4_1'::text, 'binary'::citus_copy_format) intermediate_result(avg_tenant_id numeric)) foo WHERE (((foo.avg_tenant_id)::integer)::text OPERATOR(pg_catalog.=) reference_table.id)
|
||||||
-- the subquery foo is recursively planned
|
-- the subquery foo is recursively planned
|
||||||
|
@ -69,8 +67,6 @@ FROM
|
||||||
WHERE
|
WHERE
|
||||||
foo.tenant_id != second_distributed_table.tenant_id
|
foo.tenant_id != second_distributed_table.tenant_id
|
||||||
AND second_distributed_table.dept IN (2);
|
AND second_distributed_table.dept IN (2);
|
||||||
DEBUG: complex joins are only supported when all distributed tables are joined on their distribution columns with equal operator
|
|
||||||
DEBUG: Router planner cannot handle multi-shard select queries
|
|
||||||
DEBUG: generating subplan 6_1 for subquery SELECT DISTINCT ON (tenant_id) tenant_id, max(dept) AS max_dept FROM (SELECT second_distributed_table.dept, second_distributed_table.tenant_id FROM recursive_dml_queries_mx.second_distributed_table, recursive_dml_queries_mx.distributed_table WHERE (distributed_table.tenant_id OPERATOR(pg_catalog.=) second_distributed_table.tenant_id)) foo_inner GROUP BY tenant_id ORDER BY tenant_id DESC
|
DEBUG: generating subplan 6_1 for subquery SELECT DISTINCT ON (tenant_id) tenant_id, max(dept) AS max_dept FROM (SELECT second_distributed_table.dept, second_distributed_table.tenant_id FROM recursive_dml_queries_mx.second_distributed_table, recursive_dml_queries_mx.distributed_table WHERE (distributed_table.tenant_id OPERATOR(pg_catalog.=) second_distributed_table.tenant_id)) foo_inner GROUP BY tenant_id ORDER BY tenant_id DESC
|
||||||
DEBUG: Plan 6 query after replacing subqueries and CTEs: UPDATE recursive_dml_queries_mx.second_distributed_table SET dept = (foo.max_dept OPERATOR(pg_catalog.*) 2) FROM (SELECT intermediate_result.tenant_id, intermediate_result.max_dept FROM read_intermediate_result('6_1'::text, 'binary'::citus_copy_format) intermediate_result(tenant_id text, max_dept integer)) foo WHERE ((foo.tenant_id OPERATOR(pg_catalog.<>) second_distributed_table.tenant_id) AND (second_distributed_table.dept OPERATOR(pg_catalog.=) 2))
|
DEBUG: Plan 6 query after replacing subqueries and CTEs: UPDATE recursive_dml_queries_mx.second_distributed_table SET dept = (foo.max_dept OPERATOR(pg_catalog.*) 2) FROM (SELECT intermediate_result.tenant_id, intermediate_result.max_dept FROM read_intermediate_result('6_1'::text, 'binary'::citus_copy_format) intermediate_result(tenant_id text, max_dept integer)) foo WHERE ((foo.tenant_id OPERATOR(pg_catalog.<>) second_distributed_table.tenant_id) AND (second_distributed_table.dept OPERATOR(pg_catalog.=) 2))
|
||||||
-- run some queries from worker nodes
|
-- run some queries from worker nodes
|
||||||
|
|
|
@ -3,6 +3,14 @@
|
||||||
-- ===================================================================
|
-- ===================================================================
|
||||||
SET search_path TO subquery_and_ctes;
|
SET search_path TO subquery_and_ctes;
|
||||||
CREATE TABLE users_table_local AS SELECT * FROM users_table;
|
CREATE TABLE users_table_local AS SELECT * FROM users_table;
|
||||||
|
CREATE TABLE dist_table (id int, value int);
|
||||||
|
SELECT create_distributed_table('dist_table', 'id', colocate_with => 'users_table');
|
||||||
|
create_distributed_table
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
INSERT INTO dist_table (id, value) VALUES(1, 2),(2, 3),(3,4);
|
||||||
SET client_min_messages TO DEBUG1;
|
SET client_min_messages TO DEBUG1;
|
||||||
-- CTEs are recursively planned, and subquery foo is also recursively planned
|
-- CTEs are recursively planned, and subquery foo is also recursively planned
|
||||||
-- final plan becomes a router plan
|
-- final plan becomes a router plan
|
||||||
|
@ -13,7 +21,7 @@ WITH cte AS (
|
||||||
dist_cte AS (
|
dist_cte AS (
|
||||||
SELECT user_id FROM events_table
|
SELECT user_id FROM events_table
|
||||||
)
|
)
|
||||||
SELECT dist_cte.user_id FROM local_cte join dist_cte on dist_cte.user_id=local_cte.user_id
|
SELECT dist_cte.user_id FROM local_cte JOIN dist_cte ON dist_cte.user_id=local_cte.user_id
|
||||||
)
|
)
|
||||||
SELECT
|
SELECT
|
||||||
count(*)
|
count(*)
|
||||||
|
@ -29,18 +37,84 @@ FROM
|
||||||
ORDER BY 1 DESC LIMIT 5
|
ORDER BY 1 DESC LIMIT 5
|
||||||
) as foo
|
) as foo
|
||||||
WHERE foo.user_id = cte.user_id;
|
WHERE foo.user_id = cte.user_id;
|
||||||
DEBUG: generating subplan 2_1 for CTE cte: WITH local_cte AS (SELECT users_table_local.user_id, users_table_local."time", users_table_local.value_1, users_table_local.value_2, users_table_local.value_3, users_table_local.value_4 FROM subquery_and_ctes.users_table_local), dist_cte AS (SELECT events_table.user_id FROM subquery_and_ctes.events_table) SELECT dist_cte.user_id FROM (local_cte JOIN dist_cte ON ((dist_cte.user_id OPERATOR(pg_catalog.=) local_cte.user_id)))
|
DEBUG: generating subplan 3_1 for CTE cte: WITH local_cte AS (SELECT users_table_local.user_id, users_table_local."time", users_table_local.value_1, users_table_local.value_2, users_table_local.value_3, users_table_local.value_4 FROM subquery_and_ctes.users_table_local), dist_cte AS (SELECT events_table.user_id FROM subquery_and_ctes.events_table) SELECT dist_cte.user_id FROM (local_cte JOIN dist_cte ON ((dist_cte.user_id OPERATOR(pg_catalog.=) local_cte.user_id)))
|
||||||
DEBUG: generating subplan 3_1 for CTE local_cte: SELECT user_id, "time", value_1, value_2, value_3, value_4 FROM subquery_and_ctes.users_table_local
|
DEBUG: generating subplan 4_1 for CTE local_cte: SELECT user_id, "time", value_1, value_2, value_3, value_4 FROM subquery_and_ctes.users_table_local
|
||||||
DEBUG: generating subplan 3_2 for CTE dist_cte: SELECT user_id FROM subquery_and_ctes.events_table
|
DEBUG: generating subplan 4_2 for CTE dist_cte: SELECT user_id FROM subquery_and_ctes.events_table
|
||||||
DEBUG: Plan 3 query after replacing subqueries and CTEs: SELECT dist_cte.user_id FROM ((SELECT intermediate_result.user_id, intermediate_result."time", intermediate_result.value_1, intermediate_result.value_2, intermediate_result.value_3, intermediate_result.value_4 FROM read_intermediate_result('3_1'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer, "time" timestamp without time zone, value_1 integer, value_2 integer, value_3 double precision, value_4 bigint)) local_cte JOIN (SELECT intermediate_result.user_id FROM read_intermediate_result('3_2'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) dist_cte ON ((dist_cte.user_id OPERATOR(pg_catalog.=) local_cte.user_id)))
|
DEBUG: Plan 4 query after replacing subqueries and CTEs: SELECT dist_cte.user_id FROM ((SELECT intermediate_result.user_id, intermediate_result."time", intermediate_result.value_1, intermediate_result.value_2, intermediate_result.value_3, intermediate_result.value_4 FROM read_intermediate_result('4_1'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer, "time" timestamp without time zone, value_1 integer, value_2 integer, value_3 double precision, value_4 bigint)) local_cte JOIN (SELECT intermediate_result.user_id FROM read_intermediate_result('4_2'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) dist_cte ON ((dist_cte.user_id OPERATOR(pg_catalog.=) local_cte.user_id)))
|
||||||
DEBUG: push down of limit count: 5
|
DEBUG: push down of limit count: 5
|
||||||
DEBUG: generating subplan 2_2 for subquery SELECT DISTINCT users_table.user_id FROM subquery_and_ctes.users_table, subquery_and_ctes.events_table WHERE ((users_table.user_id OPERATOR(pg_catalog.=) events_table.user_id) AND (events_table.event_type OPERATOR(pg_catalog.=) ANY (ARRAY[1, 2, 3, 4]))) ORDER BY users_table.user_id DESC LIMIT 5
|
DEBUG: generating subplan 3_2 for subquery SELECT DISTINCT users_table.user_id FROM subquery_and_ctes.users_table, subquery_and_ctes.events_table WHERE ((users_table.user_id OPERATOR(pg_catalog.=) events_table.user_id) AND (events_table.event_type OPERATOR(pg_catalog.=) ANY (ARRAY[1, 2, 3, 4]))) ORDER BY users_table.user_id DESC LIMIT 5
|
||||||
DEBUG: Plan 2 query after replacing subqueries and CTEs: SELECT count(*) AS count FROM (SELECT intermediate_result.user_id FROM read_intermediate_result('2_1'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) cte, (SELECT intermediate_result.user_id FROM read_intermediate_result('2_2'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) foo WHERE (foo.user_id OPERATOR(pg_catalog.=) cte.user_id)
|
DEBUG: Plan 3 query after replacing subqueries and CTEs: SELECT count(*) AS count FROM (SELECT intermediate_result.user_id FROM read_intermediate_result('3_1'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) cte, (SELECT intermediate_result.user_id FROM read_intermediate_result('3_2'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) foo WHERE (foo.user_id OPERATOR(pg_catalog.=) cte.user_id)
|
||||||
count
|
count
|
||||||
-------
|
-------
|
||||||
1644
|
1644
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
|
-- CTEs are colocated, route entire query
|
||||||
|
WITH cte1 AS (
|
||||||
|
SELECT * FROM users_table WHERE user_id = 1
|
||||||
|
), cte2 AS (
|
||||||
|
SELECT * FROM events_table WHERE user_id = 1
|
||||||
|
)
|
||||||
|
SELECT cte1.user_id, cte1.value_1, cte2.user_id, cte2.event_type
|
||||||
|
FROM cte1, cte2
|
||||||
|
ORDER BY cte1.user_id, cte1.value_1, cte2.user_id, cte2.event_type
|
||||||
|
LIMIT 5;
|
||||||
|
user_id | value_1 | user_id | event_type
|
||||||
|
---------+---------+---------+------------
|
||||||
|
1 | 1 | 1 | 0
|
||||||
|
1 | 1 | 1 | 0
|
||||||
|
1 | 1 | 1 | 1
|
||||||
|
1 | 1 | 1 | 1
|
||||||
|
1 | 1 | 1 | 2
|
||||||
|
(5 rows)
|
||||||
|
|
||||||
|
-- CTEs aren't colocated, CTEs become intermediate results
|
||||||
|
WITH cte1 AS (
|
||||||
|
SELECT * FROM users_table WHERE user_id = 1
|
||||||
|
), cte2 AS (
|
||||||
|
SELECT * FROM events_table WHERE user_id = 6
|
||||||
|
)
|
||||||
|
SELECT cte1.user_id, cte1.value_1, cte2.user_id, cte2.user_id
|
||||||
|
FROM cte1, cte2
|
||||||
|
ORDER BY cte1.user_id, cte1.value_1, cte2.user_id, cte2.event_type
|
||||||
|
LIMIT 5;
|
||||||
|
DEBUG: generating subplan 8_1 for CTE cte1: SELECT user_id, "time", value_1, value_2, value_3, value_4 FROM subquery_and_ctes.users_table WHERE (user_id OPERATOR(pg_catalog.=) 1)
|
||||||
|
DEBUG: generating subplan 8_2 for CTE cte2: SELECT user_id, "time", event_type, value_2, value_3, value_4 FROM subquery_and_ctes.events_table WHERE (user_id OPERATOR(pg_catalog.=) 6)
|
||||||
|
DEBUG: Plan 8 query after replacing subqueries and CTEs: SELECT cte1.user_id, cte1.value_1, cte2.user_id, cte2.user_id FROM (SELECT intermediate_result.user_id, intermediate_result."time", intermediate_result.value_1, intermediate_result.value_2, intermediate_result.value_3, intermediate_result.value_4 FROM read_intermediate_result('8_1'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer, "time" timestamp without time zone, value_1 integer, value_2 integer, value_3 double precision, value_4 bigint)) cte1, (SELECT intermediate_result.user_id, intermediate_result."time", intermediate_result.event_type, intermediate_result.value_2, intermediate_result.value_3, intermediate_result.value_4 FROM read_intermediate_result('8_2'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer, "time" timestamp without time zone, event_type integer, value_2 integer, value_3 double precision, value_4 bigint)) cte2 ORDER BY cte1.user_id, cte1.value_1, cte2.user_id, cte2.event_type LIMIT 5
|
||||||
|
user_id | value_1 | user_id | user_id
|
||||||
|
---------+---------+---------+---------
|
||||||
|
1 | 1 | 6 | 6
|
||||||
|
1 | 1 | 6 | 6
|
||||||
|
1 | 1 | 6 | 6
|
||||||
|
1 | 1 | 6 | 6
|
||||||
|
1 | 1 | 6 | 6
|
||||||
|
(5 rows)
|
||||||
|
|
||||||
|
-- users_table & dist_table are colocated, route entire query
|
||||||
|
WITH cte1 AS (
|
||||||
|
SELECT * FROM users_table WHERE user_id = 1
|
||||||
|
)
|
||||||
|
UPDATE dist_table dt SET value = cte1.value_1
|
||||||
|
FROM cte1 WHERE cte1.user_id = dt.id AND dt.id = 1;
|
||||||
|
-- users_table & events_table & dist_table are colocated, route entire query
|
||||||
|
WITH cte1 AS (
|
||||||
|
SELECT * FROM users_table WHERE user_id = 1
|
||||||
|
), cte2 AS (
|
||||||
|
SELECT * FROM events_table WHERE user_id = 1
|
||||||
|
)
|
||||||
|
UPDATE dist_table dt SET value = cte1.value_1 + cte2.event_type
|
||||||
|
FROM cte1, cte2 WHERE cte1.user_id = dt.id AND dt.id = 1;
|
||||||
|
-- all relations are not colocated, CTEs become intermediate results
|
||||||
|
WITH cte1 AS (
|
||||||
|
SELECT * FROM users_table WHERE user_id = 1
|
||||||
|
), cte2 AS (
|
||||||
|
SELECT * FROM events_table WHERE user_id = 6
|
||||||
|
)
|
||||||
|
UPDATE dist_table dt SET value = cte1.value_1 + cte2.event_type
|
||||||
|
FROM cte1, cte2 WHERE cte1.user_id = dt.id AND dt.id = 1;
|
||||||
|
DEBUG: generating subplan 13_1 for CTE cte1: SELECT user_id, "time", value_1, value_2, value_3, value_4 FROM subquery_and_ctes.users_table WHERE (user_id OPERATOR(pg_catalog.=) 1)
|
||||||
|
DEBUG: generating subplan 13_2 for CTE cte2: SELECT user_id, "time", event_type, value_2, value_3, value_4 FROM subquery_and_ctes.events_table WHERE (user_id OPERATOR(pg_catalog.=) 6)
|
||||||
|
DEBUG: Plan 13 query after replacing subqueries and CTEs: UPDATE subquery_and_ctes.dist_table dt SET value = (cte1.value_1 OPERATOR(pg_catalog.+) cte2.event_type) FROM (SELECT intermediate_result.user_id, intermediate_result."time", intermediate_result.value_1, intermediate_result.value_2, intermediate_result.value_3, intermediate_result.value_4 FROM read_intermediate_result('13_1'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer, "time" timestamp without time zone, value_1 integer, value_2 integer, value_3 double precision, value_4 bigint)) cte1, (SELECT intermediate_result.user_id, intermediate_result."time", intermediate_result.event_type, intermediate_result.value_2, intermediate_result.value_3, intermediate_result.value_4 FROM read_intermediate_result('13_2'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer, "time" timestamp without time zone, event_type integer, value_2 integer, value_3 double precision, value_4 bigint)) cte2 WHERE ((cte1.user_id OPERATOR(pg_catalog.=) dt.id) AND (dt.id OPERATOR(pg_catalog.=) 1))
|
||||||
-- CTEs are recursively planned, and subquery foo is also recursively planned
|
-- CTEs are recursively planned, and subquery foo is also recursively planned
|
||||||
-- final plan becomes a real-time plan since we also have events_table in the
|
-- final plan becomes a real-time plan since we also have events_table in the
|
||||||
-- range table entries
|
-- range table entries
|
||||||
|
@ -51,7 +125,7 @@ WITH cte AS (
|
||||||
dist_cte AS (
|
dist_cte AS (
|
||||||
SELECT user_id FROM events_table
|
SELECT user_id FROM events_table
|
||||||
)
|
)
|
||||||
SELECT dist_cte.user_id FROM local_cte join dist_cte on dist_cte.user_id=local_cte.user_id
|
SELECT dist_cte.user_id FROM local_cte JOIN dist_cte ON dist_cte.user_id=local_cte.user_id
|
||||||
)
|
)
|
||||||
SELECT
|
SELECT
|
||||||
count(*)
|
count(*)
|
||||||
|
@ -67,13 +141,13 @@ FROM
|
||||||
ORDER BY 1 DESC LIMIT 5
|
ORDER BY 1 DESC LIMIT 5
|
||||||
) as foo, events_table
|
) as foo, events_table
|
||||||
WHERE foo.user_id = cte.user_id AND events_table.user_id = cte.user_id;
|
WHERE foo.user_id = cte.user_id AND events_table.user_id = cte.user_id;
|
||||||
DEBUG: generating subplan 6_1 for CTE cte: WITH local_cte AS (SELECT users_table_local.user_id, users_table_local."time", users_table_local.value_1, users_table_local.value_2, users_table_local.value_3, users_table_local.value_4 FROM subquery_and_ctes.users_table_local), dist_cte AS (SELECT events_table.user_id FROM subquery_and_ctes.events_table) SELECT dist_cte.user_id FROM (local_cte JOIN dist_cte ON ((dist_cte.user_id OPERATOR(pg_catalog.=) local_cte.user_id)))
|
DEBUG: generating subplan 16_1 for CTE cte: WITH local_cte AS (SELECT users_table_local.user_id, users_table_local."time", users_table_local.value_1, users_table_local.value_2, users_table_local.value_3, users_table_local.value_4 FROM subquery_and_ctes.users_table_local), dist_cte AS (SELECT events_table.user_id FROM subquery_and_ctes.events_table) SELECT dist_cte.user_id FROM (local_cte JOIN dist_cte ON ((dist_cte.user_id OPERATOR(pg_catalog.=) local_cte.user_id)))
|
||||||
DEBUG: generating subplan 7_1 for CTE local_cte: SELECT user_id, "time", value_1, value_2, value_3, value_4 FROM subquery_and_ctes.users_table_local
|
DEBUG: generating subplan 17_1 for CTE local_cte: SELECT user_id, "time", value_1, value_2, value_3, value_4 FROM subquery_and_ctes.users_table_local
|
||||||
DEBUG: generating subplan 7_2 for CTE dist_cte: SELECT user_id FROM subquery_and_ctes.events_table
|
DEBUG: generating subplan 17_2 for CTE dist_cte: SELECT user_id FROM subquery_and_ctes.events_table
|
||||||
DEBUG: Plan 7 query after replacing subqueries and CTEs: SELECT dist_cte.user_id FROM ((SELECT intermediate_result.user_id, intermediate_result."time", intermediate_result.value_1, intermediate_result.value_2, intermediate_result.value_3, intermediate_result.value_4 FROM read_intermediate_result('7_1'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer, "time" timestamp without time zone, value_1 integer, value_2 integer, value_3 double precision, value_4 bigint)) local_cte JOIN (SELECT intermediate_result.user_id FROM read_intermediate_result('7_2'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) dist_cte ON ((dist_cte.user_id OPERATOR(pg_catalog.=) local_cte.user_id)))
|
DEBUG: Plan 17 query after replacing subqueries and CTEs: SELECT dist_cte.user_id FROM ((SELECT intermediate_result.user_id, intermediate_result."time", intermediate_result.value_1, intermediate_result.value_2, intermediate_result.value_3, intermediate_result.value_4 FROM read_intermediate_result('17_1'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer, "time" timestamp without time zone, value_1 integer, value_2 integer, value_3 double precision, value_4 bigint)) local_cte JOIN (SELECT intermediate_result.user_id FROM read_intermediate_result('17_2'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) dist_cte ON ((dist_cte.user_id OPERATOR(pg_catalog.=) local_cte.user_id)))
|
||||||
DEBUG: push down of limit count: 5
|
DEBUG: push down of limit count: 5
|
||||||
DEBUG: generating subplan 6_2 for subquery SELECT DISTINCT users_table.user_id FROM subquery_and_ctes.users_table, subquery_and_ctes.events_table WHERE ((users_table.user_id OPERATOR(pg_catalog.=) events_table.user_id) AND (events_table.event_type OPERATOR(pg_catalog.=) ANY (ARRAY[1, 2, 3, 4]))) ORDER BY users_table.user_id DESC LIMIT 5
|
DEBUG: generating subplan 16_2 for subquery SELECT DISTINCT users_table.user_id FROM subquery_and_ctes.users_table, subquery_and_ctes.events_table WHERE ((users_table.user_id OPERATOR(pg_catalog.=) events_table.user_id) AND (events_table.event_type OPERATOR(pg_catalog.=) ANY (ARRAY[1, 2, 3, 4]))) ORDER BY users_table.user_id DESC LIMIT 5
|
||||||
DEBUG: Plan 6 query after replacing subqueries and CTEs: SELECT count(*) AS count FROM (SELECT intermediate_result.user_id FROM read_intermediate_result('6_1'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) cte, (SELECT intermediate_result.user_id FROM read_intermediate_result('6_2'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) foo, subquery_and_ctes.events_table WHERE ((foo.user_id OPERATOR(pg_catalog.=) cte.user_id) AND (events_table.user_id OPERATOR(pg_catalog.=) cte.user_id))
|
DEBUG: Plan 16 query after replacing subqueries and CTEs: SELECT count(*) AS count FROM (SELECT intermediate_result.user_id FROM read_intermediate_result('16_1'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) cte, (SELECT intermediate_result.user_id FROM read_intermediate_result('16_2'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) foo, subquery_and_ctes.events_table WHERE ((foo.user_id OPERATOR(pg_catalog.=) cte.user_id) AND (events_table.user_id OPERATOR(pg_catalog.=) cte.user_id))
|
||||||
count
|
count
|
||||||
-------
|
-------
|
||||||
30608
|
30608
|
||||||
|
@ -89,7 +163,7 @@ WITH cte AS (
|
||||||
dist_cte AS (
|
dist_cte AS (
|
||||||
SELECT user_id FROM events_table
|
SELECT user_id FROM events_table
|
||||||
)
|
)
|
||||||
SELECT dist_cte.user_id FROM local_cte join dist_cte on dist_cte.user_id=local_cte.user_id
|
SELECT dist_cte.user_id FROM local_cte JOIN dist_cte ON dist_cte.user_id=local_cte.user_id
|
||||||
)
|
)
|
||||||
SELECT DISTINCT cte.user_id
|
SELECT DISTINCT cte.user_id
|
||||||
FROM users_table, cte
|
FROM users_table, cte
|
||||||
|
@ -97,13 +171,13 @@ WHERE
|
||||||
users_table.user_id = cte.user_id AND
|
users_table.user_id = cte.user_id AND
|
||||||
users_table.user_id IN (SELECT DISTINCT value_2 FROM users_table WHERE value_1 >= 1 AND value_1 <= 20 ORDER BY 1 LIMIT 5)
|
users_table.user_id IN (SELECT DISTINCT value_2 FROM users_table WHERE value_1 >= 1 AND value_1 <= 20 ORDER BY 1 LIMIT 5)
|
||||||
ORDER BY 1 DESC;
|
ORDER BY 1 DESC;
|
||||||
DEBUG: generating subplan 10_1 for CTE cte: WITH local_cte AS (SELECT users_table_local.user_id, users_table_local."time", users_table_local.value_1, users_table_local.value_2, users_table_local.value_3, users_table_local.value_4 FROM subquery_and_ctes.users_table_local), dist_cte AS (SELECT events_table.user_id FROM subquery_and_ctes.events_table) SELECT dist_cte.user_id FROM (local_cte JOIN dist_cte ON ((dist_cte.user_id OPERATOR(pg_catalog.=) local_cte.user_id)))
|
DEBUG: generating subplan 20_1 for CTE cte: WITH local_cte AS (SELECT users_table_local.user_id, users_table_local."time", users_table_local.value_1, users_table_local.value_2, users_table_local.value_3, users_table_local.value_4 FROM subquery_and_ctes.users_table_local), dist_cte AS (SELECT events_table.user_id FROM subquery_and_ctes.events_table) SELECT dist_cte.user_id FROM (local_cte JOIN dist_cte ON ((dist_cte.user_id OPERATOR(pg_catalog.=) local_cte.user_id)))
|
||||||
DEBUG: generating subplan 11_1 for CTE local_cte: SELECT user_id, "time", value_1, value_2, value_3, value_4 FROM subquery_and_ctes.users_table_local
|
DEBUG: generating subplan 21_1 for CTE local_cte: SELECT user_id, "time", value_1, value_2, value_3, value_4 FROM subquery_and_ctes.users_table_local
|
||||||
DEBUG: generating subplan 11_2 for CTE dist_cte: SELECT user_id FROM subquery_and_ctes.events_table
|
DEBUG: generating subplan 21_2 for CTE dist_cte: SELECT user_id FROM subquery_and_ctes.events_table
|
||||||
DEBUG: Plan 11 query after replacing subqueries and CTEs: SELECT dist_cte.user_id FROM ((SELECT intermediate_result.user_id, intermediate_result."time", intermediate_result.value_1, intermediate_result.value_2, intermediate_result.value_3, intermediate_result.value_4 FROM read_intermediate_result('11_1'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer, "time" timestamp without time zone, value_1 integer, value_2 integer, value_3 double precision, value_4 bigint)) local_cte JOIN (SELECT intermediate_result.user_id FROM read_intermediate_result('11_2'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) dist_cte ON ((dist_cte.user_id OPERATOR(pg_catalog.=) local_cte.user_id)))
|
DEBUG: Plan 21 query after replacing subqueries and CTEs: SELECT dist_cte.user_id FROM ((SELECT intermediate_result.user_id, intermediate_result."time", intermediate_result.value_1, intermediate_result.value_2, intermediate_result.value_3, intermediate_result.value_4 FROM read_intermediate_result('21_1'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer, "time" timestamp without time zone, value_1 integer, value_2 integer, value_3 double precision, value_4 bigint)) local_cte JOIN (SELECT intermediate_result.user_id FROM read_intermediate_result('21_2'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) dist_cte ON ((dist_cte.user_id OPERATOR(pg_catalog.=) local_cte.user_id)))
|
||||||
DEBUG: push down of limit count: 5
|
DEBUG: push down of limit count: 5
|
||||||
DEBUG: generating subplan 10_2 for subquery SELECT DISTINCT value_2 FROM subquery_and_ctes.users_table WHERE ((value_1 OPERATOR(pg_catalog.>=) 1) AND (value_1 OPERATOR(pg_catalog.<=) 20)) ORDER BY value_2 LIMIT 5
|
DEBUG: generating subplan 20_2 for subquery SELECT DISTINCT value_2 FROM subquery_and_ctes.users_table WHERE ((value_1 OPERATOR(pg_catalog.>=) 1) AND (value_1 OPERATOR(pg_catalog.<=) 20)) ORDER BY value_2 LIMIT 5
|
||||||
DEBUG: Plan 10 query after replacing subqueries and CTEs: SELECT DISTINCT cte.user_id FROM subquery_and_ctes.users_table, (SELECT intermediate_result.user_id FROM read_intermediate_result('10_1'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) cte WHERE ((users_table.user_id OPERATOR(pg_catalog.=) cte.user_id) AND (users_table.user_id OPERATOR(pg_catalog.=) ANY (SELECT intermediate_result.value_2 FROM read_intermediate_result('10_2'::text, 'binary'::citus_copy_format) intermediate_result(value_2 integer)))) ORDER BY cte.user_id DESC
|
DEBUG: Plan 20 query after replacing subqueries and CTEs: SELECT DISTINCT cte.user_id FROM subquery_and_ctes.users_table, (SELECT intermediate_result.user_id FROM read_intermediate_result('20_1'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) cte WHERE ((users_table.user_id OPERATOR(pg_catalog.=) cte.user_id) AND (users_table.user_id OPERATOR(pg_catalog.=) ANY (SELECT intermediate_result.value_2 FROM read_intermediate_result('20_2'::text, 'binary'::citus_copy_format) intermediate_result(value_2 integer)))) ORDER BY cte.user_id DESC
|
||||||
user_id
|
user_id
|
||||||
---------
|
---------
|
||||||
4
|
4
|
||||||
|
@ -121,19 +195,19 @@ WITH cte AS (
|
||||||
dist_cte AS (
|
dist_cte AS (
|
||||||
SELECT user_id FROM events_table
|
SELECT user_id FROM events_table
|
||||||
)
|
)
|
||||||
SELECT dist_cte.user_id FROM local_cte join dist_cte on dist_cte.user_id=local_cte.user_id
|
SELECT dist_cte.user_id FROM local_cte JOIN dist_cte ON dist_cte.user_id=local_cte.user_id
|
||||||
)
|
)
|
||||||
SELECT DISTINCT cte.user_id
|
SELECT DISTINCT cte.user_id
|
||||||
FROM cte
|
FROM cte
|
||||||
WHERE
|
WHERE
|
||||||
cte.user_id IN (SELECT DISTINCT user_id FROM users_table WHERE value_1 >= 1 AND value_1 <= 20)
|
cte.user_id IN (SELECT DISTINCT user_id FROM users_table WHERE value_1 >= 1 AND value_1 <= 20)
|
||||||
ORDER BY 1 DESC;
|
ORDER BY 1 DESC;
|
||||||
DEBUG: generating subplan 14_1 for CTE cte: WITH local_cte AS (SELECT users_table_local.user_id, users_table_local."time", users_table_local.value_1, users_table_local.value_2, users_table_local.value_3, users_table_local.value_4 FROM subquery_and_ctes.users_table_local), dist_cte AS (SELECT events_table.user_id FROM subquery_and_ctes.events_table) SELECT dist_cte.user_id FROM (local_cte JOIN dist_cte ON ((dist_cte.user_id OPERATOR(pg_catalog.=) local_cte.user_id)))
|
DEBUG: generating subplan 24_1 for CTE cte: WITH local_cte AS (SELECT users_table_local.user_id, users_table_local."time", users_table_local.value_1, users_table_local.value_2, users_table_local.value_3, users_table_local.value_4 FROM subquery_and_ctes.users_table_local), dist_cte AS (SELECT events_table.user_id FROM subquery_and_ctes.events_table) SELECT dist_cte.user_id FROM (local_cte JOIN dist_cte ON ((dist_cte.user_id OPERATOR(pg_catalog.=) local_cte.user_id)))
|
||||||
DEBUG: generating subplan 15_1 for CTE local_cte: SELECT user_id, "time", value_1, value_2, value_3, value_4 FROM subquery_and_ctes.users_table_local
|
DEBUG: generating subplan 25_1 for CTE local_cte: SELECT user_id, "time", value_1, value_2, value_3, value_4 FROM subquery_and_ctes.users_table_local
|
||||||
DEBUG: generating subplan 15_2 for CTE dist_cte: SELECT user_id FROM subquery_and_ctes.events_table
|
DEBUG: generating subplan 25_2 for CTE dist_cte: SELECT user_id FROM subquery_and_ctes.events_table
|
||||||
DEBUG: Plan 15 query after replacing subqueries and CTEs: SELECT dist_cte.user_id FROM ((SELECT intermediate_result.user_id, intermediate_result."time", intermediate_result.value_1, intermediate_result.value_2, intermediate_result.value_3, intermediate_result.value_4 FROM read_intermediate_result('15_1'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer, "time" timestamp without time zone, value_1 integer, value_2 integer, value_3 double precision, value_4 bigint)) local_cte JOIN (SELECT intermediate_result.user_id FROM read_intermediate_result('15_2'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) dist_cte ON ((dist_cte.user_id OPERATOR(pg_catalog.=) local_cte.user_id)))
|
DEBUG: Plan 25 query after replacing subqueries and CTEs: SELECT dist_cte.user_id FROM ((SELECT intermediate_result.user_id, intermediate_result."time", intermediate_result.value_1, intermediate_result.value_2, intermediate_result.value_3, intermediate_result.value_4 FROM read_intermediate_result('25_1'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer, "time" timestamp without time zone, value_1 integer, value_2 integer, value_3 double precision, value_4 bigint)) local_cte JOIN (SELECT intermediate_result.user_id FROM read_intermediate_result('25_2'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) dist_cte ON ((dist_cte.user_id OPERATOR(pg_catalog.=) local_cte.user_id)))
|
||||||
DEBUG: generating subplan 14_2 for subquery SELECT DISTINCT user_id FROM subquery_and_ctes.users_table WHERE ((value_1 OPERATOR(pg_catalog.>=) 1) AND (value_1 OPERATOR(pg_catalog.<=) 20))
|
DEBUG: generating subplan 24_2 for subquery SELECT DISTINCT user_id FROM subquery_and_ctes.users_table WHERE ((value_1 OPERATOR(pg_catalog.>=) 1) AND (value_1 OPERATOR(pg_catalog.<=) 20))
|
||||||
DEBUG: Plan 14 query after replacing subqueries and CTEs: SELECT DISTINCT user_id FROM (SELECT intermediate_result.user_id FROM read_intermediate_result('14_1'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) cte WHERE (user_id OPERATOR(pg_catalog.=) ANY (SELECT intermediate_result.user_id FROM read_intermediate_result('14_2'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer))) ORDER BY user_id DESC
|
DEBUG: Plan 24 query after replacing subqueries and CTEs: SELECT DISTINCT user_id FROM (SELECT intermediate_result.user_id FROM read_intermediate_result('24_1'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) cte WHERE (user_id OPERATOR(pg_catalog.=) ANY (SELECT intermediate_result.user_id FROM read_intermediate_result('24_2'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer))) ORDER BY user_id DESC
|
||||||
user_id
|
user_id
|
||||||
---------
|
---------
|
||||||
6
|
6
|
||||||
|
@ -161,8 +235,8 @@ FROM
|
||||||
) SELECT * FROM cte ORDER BY 1 DESC
|
) SELECT * FROM cte ORDER BY 1 DESC
|
||||||
) as foo
|
) as foo
|
||||||
ORDER BY 1 DESC;
|
ORDER BY 1 DESC;
|
||||||
DEBUG: generating subplan 18_1 for CTE cte: SELECT DISTINCT users_table.user_id FROM subquery_and_ctes.users_table, subquery_and_ctes.events_table WHERE ((users_table.user_id OPERATOR(pg_catalog.=) events_table.user_id) AND (events_table.event_type OPERATOR(pg_catalog.=) ANY (ARRAY[1, 2, 3, 4])))
|
DEBUG: generating subplan 28_1 for CTE cte: SELECT DISTINCT users_table.user_id FROM subquery_and_ctes.users_table, subquery_and_ctes.events_table WHERE ((users_table.user_id OPERATOR(pg_catalog.=) events_table.user_id) AND (events_table.event_type OPERATOR(pg_catalog.=) ANY (ARRAY[1, 2, 3, 4])))
|
||||||
DEBUG: Plan 18 query after replacing subqueries and CTEs: SELECT user_id FROM (SELECT cte.user_id FROM (SELECT intermediate_result.user_id FROM read_intermediate_result('18_1'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) cte ORDER BY cte.user_id DESC) foo ORDER BY user_id DESC
|
DEBUG: Plan 28 query after replacing subqueries and CTEs: SELECT user_id FROM (SELECT cte.user_id FROM (SELECT intermediate_result.user_id FROM read_intermediate_result('28_1'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) cte ORDER BY cte.user_id DESC) foo ORDER BY user_id DESC
|
||||||
user_id
|
user_id
|
||||||
---------
|
---------
|
||||||
6
|
6
|
||||||
|
@ -201,8 +275,8 @@ FROM
|
||||||
) as bar
|
) as bar
|
||||||
WHERE foo.user_id = bar.user_id
|
WHERE foo.user_id = bar.user_id
|
||||||
ORDER BY 1 DESC;
|
ORDER BY 1 DESC;
|
||||||
DEBUG: generating subplan 20_1 for CTE cte: SELECT DISTINCT users_table.user_id FROM subquery_and_ctes.users_table, subquery_and_ctes.events_table WHERE ((users_table.user_id OPERATOR(pg_catalog.=) events_table.user_id) AND (events_table.event_type OPERATOR(pg_catalog.=) ANY (ARRAY[1, 2, 3, 4])))
|
DEBUG: generating subplan 30_1 for CTE cte: SELECT DISTINCT users_table.user_id FROM subquery_and_ctes.users_table, subquery_and_ctes.events_table WHERE ((users_table.user_id OPERATOR(pg_catalog.=) events_table.user_id) AND (events_table.event_type OPERATOR(pg_catalog.=) ANY (ARRAY[1, 2, 3, 4])))
|
||||||
DEBUG: Plan 20 query after replacing subqueries and CTEs: SELECT bar.user_id FROM (SELECT cte.user_id FROM (SELECT intermediate_result.user_id FROM read_intermediate_result('20_1'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) cte ORDER BY cte.user_id DESC) foo, (SELECT DISTINCT users_table.user_id FROM subquery_and_ctes.users_table, subquery_and_ctes.events_table WHERE ((users_table.user_id OPERATOR(pg_catalog.=) events_table.user_id) AND (events_table.event_type OPERATOR(pg_catalog.=) ANY (ARRAY[1, 2, 3, 4])))) bar WHERE (foo.user_id OPERATOR(pg_catalog.=) bar.user_id) ORDER BY bar.user_id DESC
|
DEBUG: Plan 30 query after replacing subqueries and CTEs: SELECT bar.user_id FROM (SELECT cte.user_id FROM (SELECT intermediate_result.user_id FROM read_intermediate_result('30_1'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) cte ORDER BY cte.user_id DESC) foo, (SELECT DISTINCT users_table.user_id FROM subquery_and_ctes.users_table, subquery_and_ctes.events_table WHERE ((users_table.user_id OPERATOR(pg_catalog.=) events_table.user_id) AND (events_table.event_type OPERATOR(pg_catalog.=) ANY (ARRAY[1, 2, 3, 4])))) bar WHERE (foo.user_id OPERATOR(pg_catalog.=) bar.user_id) ORDER BY bar.user_id DESC
|
||||||
user_id
|
user_id
|
||||||
---------
|
---------
|
||||||
6
|
6
|
||||||
|
@ -254,11 +328,11 @@ FROM
|
||||||
) as bar
|
) as bar
|
||||||
WHERE foo.user_id = bar.user_id
|
WHERE foo.user_id = bar.user_id
|
||||||
ORDER BY 1 DESC LIMIT 5;
|
ORDER BY 1 DESC LIMIT 5;
|
||||||
DEBUG: generating subplan 22_1 for CTE cte: SELECT DISTINCT users_table.user_id FROM subquery_and_ctes.users_table, subquery_and_ctes.events_table WHERE ((users_table.user_id OPERATOR(pg_catalog.=) events_table.user_id) AND (events_table.event_type OPERATOR(pg_catalog.=) ANY (ARRAY[1, 2, 3, 4])))
|
DEBUG: generating subplan 32_1 for CTE cte: SELECT DISTINCT users_table.user_id FROM subquery_and_ctes.users_table, subquery_and_ctes.events_table WHERE ((users_table.user_id OPERATOR(pg_catalog.=) events_table.user_id) AND (events_table.event_type OPERATOR(pg_catalog.=) ANY (ARRAY[1, 2, 3, 4])))
|
||||||
DEBUG: generating subplan 22_2 for CTE cte: SELECT events_table.event_type, users_table.user_id FROM subquery_and_ctes.users_table, subquery_and_ctes.events_table WHERE ((users_table.user_id OPERATOR(pg_catalog.=) events_table.user_id) AND (users_table.value_1 OPERATOR(pg_catalog.=) ANY (ARRAY[1, 2])))
|
DEBUG: generating subplan 32_2 for CTE cte: SELECT events_table.event_type, users_table.user_id FROM subquery_and_ctes.users_table, subquery_and_ctes.events_table WHERE ((users_table.user_id OPERATOR(pg_catalog.=) events_table.user_id) AND (users_table.value_1 OPERATOR(pg_catalog.=) ANY (ARRAY[1, 2])))
|
||||||
DEBUG: push down of limit count: 2
|
DEBUG: push down of limit count: 2
|
||||||
DEBUG: generating subplan 22_3 for subquery SELECT users_table.user_id, some_events.event_type FROM subquery_and_ctes.users_table, (SELECT cte.event_type, cte.user_id FROM (SELECT intermediate_result.event_type, intermediate_result.user_id FROM read_intermediate_result('22_2'::text, 'binary'::citus_copy_format) intermediate_result(event_type integer, user_id integer)) cte ORDER BY cte.event_type DESC) some_events WHERE ((users_table.user_id OPERATOR(pg_catalog.=) some_events.user_id) AND (some_events.event_type OPERATOR(pg_catalog.=) ANY (ARRAY[1, 2, 3, 4]))) ORDER BY some_events.event_type, users_table.user_id LIMIT 2
|
DEBUG: generating subplan 32_3 for subquery SELECT users_table.user_id, some_events.event_type FROM subquery_and_ctes.users_table, (SELECT cte.event_type, cte.user_id FROM (SELECT intermediate_result.event_type, intermediate_result.user_id FROM read_intermediate_result('32_2'::text, 'binary'::citus_copy_format) intermediate_result(event_type integer, user_id integer)) cte ORDER BY cte.event_type DESC) some_events WHERE ((users_table.user_id OPERATOR(pg_catalog.=) some_events.user_id) AND (some_events.event_type OPERATOR(pg_catalog.=) ANY (ARRAY[1, 2, 3, 4]))) ORDER BY some_events.event_type, users_table.user_id LIMIT 2
|
||||||
DEBUG: Plan 22 query after replacing subqueries and CTEs: SELECT DISTINCT bar.user_id FROM (SELECT cte.user_id FROM (SELECT intermediate_result.user_id FROM read_intermediate_result('22_1'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) cte ORDER BY cte.user_id DESC) foo, (SELECT intermediate_result.user_id, intermediate_result.event_type FROM read_intermediate_result('22_3'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer, event_type integer)) bar WHERE (foo.user_id OPERATOR(pg_catalog.=) bar.user_id) ORDER BY bar.user_id DESC LIMIT 5
|
DEBUG: Plan 32 query after replacing subqueries and CTEs: SELECT DISTINCT bar.user_id FROM (SELECT cte.user_id FROM (SELECT intermediate_result.user_id FROM read_intermediate_result('32_1'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) cte ORDER BY cte.user_id DESC) foo, (SELECT intermediate_result.user_id, intermediate_result.event_type FROM read_intermediate_result('32_3'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer, event_type integer)) bar WHERE (foo.user_id OPERATOR(pg_catalog.=) bar.user_id) ORDER BY bar.user_id DESC LIMIT 5
|
||||||
user_id
|
user_id
|
||||||
---------
|
---------
|
||||||
1
|
1
|
||||||
|
@ -276,7 +350,7 @@ SELECT * FROM
|
||||||
dist_cte AS (
|
dist_cte AS (
|
||||||
SELECT user_id FROM events_table
|
SELECT user_id FROM events_table
|
||||||
)
|
)
|
||||||
SELECT dist_cte.user_id FROM local_cte join dist_cte on dist_cte.user_id=local_cte.user_id
|
SELECT dist_cte.user_id FROM local_cte JOIN dist_cte ON dist_cte.user_id=local_cte.user_id
|
||||||
)
|
)
|
||||||
SELECT DISTINCT cte.user_id
|
SELECT DISTINCT cte.user_id
|
||||||
FROM users_table, cte
|
FROM users_table, cte
|
||||||
|
@ -291,14 +365,14 @@ SELECT * FROM
|
||||||
foo.user_id = events_table.value_2
|
foo.user_id = events_table.value_2
|
||||||
ORDER BY 3 DESC, 2 DESC, 1 DESC
|
ORDER BY 3 DESC, 2 DESC, 1 DESC
|
||||||
LIMIT 5;
|
LIMIT 5;
|
||||||
DEBUG: generating subplan 26_1 for CTE cte: WITH local_cte AS (SELECT users_table_local.user_id, users_table_local."time", users_table_local.value_1, users_table_local.value_2, users_table_local.value_3, users_table_local.value_4 FROM subquery_and_ctes.users_table_local), dist_cte AS (SELECT events_table.user_id FROM subquery_and_ctes.events_table) SELECT dist_cte.user_id FROM (local_cte JOIN dist_cte ON ((dist_cte.user_id OPERATOR(pg_catalog.=) local_cte.user_id)))
|
DEBUG: generating subplan 36_1 for CTE cte: WITH local_cte AS (SELECT users_table_local.user_id, users_table_local."time", users_table_local.value_1, users_table_local.value_2, users_table_local.value_3, users_table_local.value_4 FROM subquery_and_ctes.users_table_local), dist_cte AS (SELECT events_table.user_id FROM subquery_and_ctes.events_table) SELECT dist_cte.user_id FROM (local_cte JOIN dist_cte ON ((dist_cte.user_id OPERATOR(pg_catalog.=) local_cte.user_id)))
|
||||||
DEBUG: generating subplan 27_1 for CTE local_cte: SELECT user_id, "time", value_1, value_2, value_3, value_4 FROM subquery_and_ctes.users_table_local
|
DEBUG: generating subplan 37_1 for CTE local_cte: SELECT user_id, "time", value_1, value_2, value_3, value_4 FROM subquery_and_ctes.users_table_local
|
||||||
DEBUG: generating subplan 27_2 for CTE dist_cte: SELECT user_id FROM subquery_and_ctes.events_table
|
DEBUG: generating subplan 37_2 for CTE dist_cte: SELECT user_id FROM subquery_and_ctes.events_table
|
||||||
DEBUG: Plan 27 query after replacing subqueries and CTEs: SELECT dist_cte.user_id FROM ((SELECT intermediate_result.user_id, intermediate_result."time", intermediate_result.value_1, intermediate_result.value_2, intermediate_result.value_3, intermediate_result.value_4 FROM read_intermediate_result('27_1'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer, "time" timestamp without time zone, value_1 integer, value_2 integer, value_3 double precision, value_4 bigint)) local_cte JOIN (SELECT intermediate_result.user_id FROM read_intermediate_result('27_2'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) dist_cte ON ((dist_cte.user_id OPERATOR(pg_catalog.=) local_cte.user_id)))
|
DEBUG: Plan 37 query after replacing subqueries and CTEs: SELECT dist_cte.user_id FROM ((SELECT intermediate_result.user_id, intermediate_result."time", intermediate_result.value_1, intermediate_result.value_2, intermediate_result.value_3, intermediate_result.value_4 FROM read_intermediate_result('37_1'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer, "time" timestamp without time zone, value_1 integer, value_2 integer, value_3 double precision, value_4 bigint)) local_cte JOIN (SELECT intermediate_result.user_id FROM read_intermediate_result('37_2'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) dist_cte ON ((dist_cte.user_id OPERATOR(pg_catalog.=) local_cte.user_id)))
|
||||||
DEBUG: generating subplan 26_2 for CTE cte_in_where: SELECT DISTINCT value_2 FROM subquery_and_ctes.users_table WHERE ((value_1 OPERATOR(pg_catalog.>=) 1) AND (value_1 OPERATOR(pg_catalog.<=) 20)) ORDER BY value_2 LIMIT 5
|
DEBUG: generating subplan 36_2 for CTE cte_in_where: SELECT DISTINCT value_2 FROM subquery_and_ctes.users_table WHERE ((value_1 OPERATOR(pg_catalog.>=) 1) AND (value_1 OPERATOR(pg_catalog.<=) 20)) ORDER BY value_2 LIMIT 5
|
||||||
DEBUG: push down of limit count: 5
|
DEBUG: push down of limit count: 5
|
||||||
DEBUG: generating subplan 26_3 for subquery SELECT DISTINCT cte.user_id FROM subquery_and_ctes.users_table, (SELECT intermediate_result.user_id FROM read_intermediate_result('26_1'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) cte WHERE ((users_table.user_id OPERATOR(pg_catalog.=) cte.user_id) AND (users_table.user_id OPERATOR(pg_catalog.=) ANY (SELECT cte_in_where.value_2 FROM (SELECT intermediate_result.value_2 FROM read_intermediate_result('26_2'::text, 'binary'::citus_copy_format) intermediate_result(value_2 integer)) cte_in_where))) ORDER BY cte.user_id DESC
|
DEBUG: generating subplan 36_3 for subquery SELECT DISTINCT cte.user_id FROM subquery_and_ctes.users_table, (SELECT intermediate_result.user_id FROM read_intermediate_result('36_1'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) cte WHERE ((users_table.user_id OPERATOR(pg_catalog.=) cte.user_id) AND (users_table.user_id OPERATOR(pg_catalog.=) ANY (SELECT cte_in_where.value_2 FROM (SELECT intermediate_result.value_2 FROM read_intermediate_result('36_2'::text, 'binary'::citus_copy_format) intermediate_result(value_2 integer)) cte_in_where))) ORDER BY cte.user_id DESC
|
||||||
DEBUG: Plan 26 query after replacing subqueries and CTEs: SELECT foo.user_id, events_table.user_id, events_table."time", events_table.event_type, events_table.value_2, events_table.value_3, events_table.value_4 FROM (SELECT intermediate_result.user_id FROM read_intermediate_result('26_3'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) foo, subquery_and_ctes.events_table WHERE (foo.user_id OPERATOR(pg_catalog.=) events_table.value_2) ORDER BY events_table."time" DESC, events_table.user_id DESC, foo.user_id DESC LIMIT 5
|
DEBUG: Plan 36 query after replacing subqueries and CTEs: SELECT foo.user_id, events_table.user_id, events_table."time", events_table.event_type, events_table.value_2, events_table.value_3, events_table.value_4 FROM (SELECT intermediate_result.user_id FROM read_intermediate_result('36_3'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) foo, subquery_and_ctes.events_table WHERE (foo.user_id OPERATOR(pg_catalog.=) events_table.value_2) ORDER BY events_table."time" DESC, events_table.user_id DESC, foo.user_id DESC LIMIT 5
|
||||||
DEBUG: push down of limit count: 5
|
DEBUG: push down of limit count: 5
|
||||||
user_id | user_id | time | event_type | value_2 | value_3 | value_4
|
user_id | user_id | time | event_type | value_2 | value_3 | value_4
|
||||||
---------+---------+---------------------------------+------------+---------+---------+---------
|
---------+---------+---------------------------------+------------+---------+---------+---------
|
||||||
|
@ -324,7 +398,7 @@ WITH cte AS (
|
||||||
events_table.user_id = foo.value_2 AND
|
events_table.user_id = foo.value_2 AND
|
||||||
events_table.user_id IN (SELECT DISTINCT value_1 FROM users_table ORDER BY 1 LIMIT 3)
|
events_table.user_id IN (SELECT DISTINCT value_1 FROM users_table ORDER BY 1 LIMIT 3)
|
||||||
)
|
)
|
||||||
SELECT dist_cte.user_id FROM local_cte join dist_cte on dist_cte.user_id=local_cte.user_id
|
SELECT dist_cte.user_id FROM local_cte JOIN dist_cte ON dist_cte.user_id=local_cte.user_id
|
||||||
)
|
)
|
||||||
SELECT
|
SELECT
|
||||||
count(*)
|
count(*)
|
||||||
|
@ -340,17 +414,17 @@ FROM
|
||||||
ORDER BY 1 DESC LIMIT 5
|
ORDER BY 1 DESC LIMIT 5
|
||||||
) as foo
|
) as foo
|
||||||
WHERE foo.user_id = cte.user_id;
|
WHERE foo.user_id = cte.user_id;
|
||||||
DEBUG: generating subplan 31_1 for CTE cte: WITH local_cte AS (SELECT users_table_local.user_id, users_table_local."time", users_table_local.value_1, users_table_local.value_2, users_table_local.value_3, users_table_local.value_4 FROM subquery_and_ctes.users_table_local), dist_cte AS (SELECT events_table.user_id FROM subquery_and_ctes.events_table, (SELECT DISTINCT users_table.value_2 FROM subquery_and_ctes.users_table OFFSET 0) foo WHERE ((events_table.user_id OPERATOR(pg_catalog.=) foo.value_2) AND (events_table.user_id OPERATOR(pg_catalog.=) ANY (SELECT DISTINCT users_table.value_1 FROM subquery_and_ctes.users_table ORDER BY users_table.value_1 LIMIT 3)))) SELECT dist_cte.user_id FROM (local_cte JOIN dist_cte ON ((dist_cte.user_id OPERATOR(pg_catalog.=) local_cte.user_id)))
|
DEBUG: generating subplan 41_1 for CTE cte: WITH local_cte AS (SELECT users_table_local.user_id, users_table_local."time", users_table_local.value_1, users_table_local.value_2, users_table_local.value_3, users_table_local.value_4 FROM subquery_and_ctes.users_table_local), dist_cte AS (SELECT events_table.user_id FROM subquery_and_ctes.events_table, (SELECT DISTINCT users_table.value_2 FROM subquery_and_ctes.users_table OFFSET 0) foo WHERE ((events_table.user_id OPERATOR(pg_catalog.=) foo.value_2) AND (events_table.user_id OPERATOR(pg_catalog.=) ANY (SELECT DISTINCT users_table.value_1 FROM subquery_and_ctes.users_table ORDER BY users_table.value_1 LIMIT 3)))) SELECT dist_cte.user_id FROM (local_cte JOIN dist_cte ON ((dist_cte.user_id OPERATOR(pg_catalog.=) local_cte.user_id)))
|
||||||
DEBUG: generating subplan 32_1 for CTE local_cte: SELECT user_id, "time", value_1, value_2, value_3, value_4 FROM subquery_and_ctes.users_table_local
|
DEBUG: generating subplan 42_1 for CTE local_cte: SELECT user_id, "time", value_1, value_2, value_3, value_4 FROM subquery_and_ctes.users_table_local
|
||||||
DEBUG: generating subplan 32_2 for CTE dist_cte: SELECT events_table.user_id FROM subquery_and_ctes.events_table, (SELECT DISTINCT users_table.value_2 FROM subquery_and_ctes.users_table OFFSET 0) foo WHERE ((events_table.user_id OPERATOR(pg_catalog.=) foo.value_2) AND (events_table.user_id OPERATOR(pg_catalog.=) ANY (SELECT DISTINCT users_table.value_1 FROM subquery_and_ctes.users_table ORDER BY users_table.value_1 LIMIT 3)))
|
DEBUG: generating subplan 42_2 for CTE dist_cte: SELECT events_table.user_id FROM subquery_and_ctes.events_table, (SELECT DISTINCT users_table.value_2 FROM subquery_and_ctes.users_table OFFSET 0) foo WHERE ((events_table.user_id OPERATOR(pg_catalog.=) foo.value_2) AND (events_table.user_id OPERATOR(pg_catalog.=) ANY (SELECT DISTINCT users_table.value_1 FROM subquery_and_ctes.users_table ORDER BY users_table.value_1 LIMIT 3)))
|
||||||
DEBUG: push down of limit count: 3
|
DEBUG: push down of limit count: 3
|
||||||
DEBUG: generating subplan 33_1 for subquery SELECT DISTINCT value_1 FROM subquery_and_ctes.users_table ORDER BY value_1 LIMIT 3
|
DEBUG: generating subplan 43_1 for subquery SELECT DISTINCT value_1 FROM subquery_and_ctes.users_table ORDER BY value_1 LIMIT 3
|
||||||
DEBUG: generating subplan 33_2 for subquery SELECT DISTINCT value_2 FROM subquery_and_ctes.users_table OFFSET 0
|
DEBUG: generating subplan 43_2 for subquery SELECT DISTINCT value_2 FROM subquery_and_ctes.users_table OFFSET 0
|
||||||
DEBUG: Plan 33 query after replacing subqueries and CTEs: SELECT events_table.user_id FROM subquery_and_ctes.events_table, (SELECT intermediate_result.value_2 FROM read_intermediate_result('33_2'::text, 'binary'::citus_copy_format) intermediate_result(value_2 integer)) foo WHERE ((events_table.user_id OPERATOR(pg_catalog.=) foo.value_2) AND (events_table.user_id OPERATOR(pg_catalog.=) ANY (SELECT intermediate_result.value_1 FROM read_intermediate_result('33_1'::text, 'binary'::citus_copy_format) intermediate_result(value_1 integer))))
|
DEBUG: Plan 43 query after replacing subqueries and CTEs: SELECT events_table.user_id FROM subquery_and_ctes.events_table, (SELECT intermediate_result.value_2 FROM read_intermediate_result('43_2'::text, 'binary'::citus_copy_format) intermediate_result(value_2 integer)) foo WHERE ((events_table.user_id OPERATOR(pg_catalog.=) foo.value_2) AND (events_table.user_id OPERATOR(pg_catalog.=) ANY (SELECT intermediate_result.value_1 FROM read_intermediate_result('43_1'::text, 'binary'::citus_copy_format) intermediate_result(value_1 integer))))
|
||||||
DEBUG: Plan 32 query after replacing subqueries and CTEs: SELECT dist_cte.user_id FROM ((SELECT intermediate_result.user_id, intermediate_result."time", intermediate_result.value_1, intermediate_result.value_2, intermediate_result.value_3, intermediate_result.value_4 FROM read_intermediate_result('32_1'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer, "time" timestamp without time zone, value_1 integer, value_2 integer, value_3 double precision, value_4 bigint)) local_cte JOIN (SELECT intermediate_result.user_id FROM read_intermediate_result('32_2'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) dist_cte ON ((dist_cte.user_id OPERATOR(pg_catalog.=) local_cte.user_id)))
|
DEBUG: Plan 42 query after replacing subqueries and CTEs: SELECT dist_cte.user_id FROM ((SELECT intermediate_result.user_id, intermediate_result."time", intermediate_result.value_1, intermediate_result.value_2, intermediate_result.value_3, intermediate_result.value_4 FROM read_intermediate_result('42_1'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer, "time" timestamp without time zone, value_1 integer, value_2 integer, value_3 double precision, value_4 bigint)) local_cte JOIN (SELECT intermediate_result.user_id FROM read_intermediate_result('42_2'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) dist_cte ON ((dist_cte.user_id OPERATOR(pg_catalog.=) local_cte.user_id)))
|
||||||
DEBUG: push down of limit count: 5
|
DEBUG: push down of limit count: 5
|
||||||
DEBUG: generating subplan 31_2 for subquery SELECT DISTINCT users_table.user_id FROM subquery_and_ctes.users_table, subquery_and_ctes.events_table WHERE ((users_table.user_id OPERATOR(pg_catalog.=) events_table.user_id) AND (events_table.event_type OPERATOR(pg_catalog.=) ANY (ARRAY[1, 2, 3, 4]))) ORDER BY users_table.user_id DESC LIMIT 5
|
DEBUG: generating subplan 41_2 for subquery SELECT DISTINCT users_table.user_id FROM subquery_and_ctes.users_table, subquery_and_ctes.events_table WHERE ((users_table.user_id OPERATOR(pg_catalog.=) events_table.user_id) AND (events_table.event_type OPERATOR(pg_catalog.=) ANY (ARRAY[1, 2, 3, 4]))) ORDER BY users_table.user_id DESC LIMIT 5
|
||||||
DEBUG: Plan 31 query after replacing subqueries and CTEs: SELECT count(*) AS count FROM (SELECT intermediate_result.user_id FROM read_intermediate_result('31_1'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) cte, (SELECT intermediate_result.user_id FROM read_intermediate_result('31_2'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) foo WHERE (foo.user_id OPERATOR(pg_catalog.=) cte.user_id)
|
DEBUG: Plan 41 query after replacing subqueries and CTEs: SELECT count(*) AS count FROM (SELECT intermediate_result.user_id FROM read_intermediate_result('41_1'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) cte, (SELECT intermediate_result.user_id FROM read_intermediate_result('41_2'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) foo WHERE (foo.user_id OPERATOR(pg_catalog.=) cte.user_id)
|
||||||
count
|
count
|
||||||
-------
|
-------
|
||||||
432
|
432
|
||||||
|
@ -375,7 +449,7 @@ FROM
|
||||||
events_table.user_id = foo.value_2 AND
|
events_table.user_id = foo.value_2 AND
|
||||||
events_table.user_id IN (SELECT DISTINCT value_1 FROM users_table ORDER BY 1 LIMIT 3)
|
events_table.user_id IN (SELECT DISTINCT value_1 FROM users_table ORDER BY 1 LIMIT 3)
|
||||||
)
|
)
|
||||||
SELECT dist_cte.user_id FROM local_cte join dist_cte on dist_cte.user_id=local_cte.user_id
|
SELECT dist_cte.user_id FROM local_cte JOIN dist_cte ON dist_cte.user_id=local_cte.user_id
|
||||||
)
|
)
|
||||||
SELECT
|
SELECT
|
||||||
count(*) as cnt
|
count(*) as cnt
|
||||||
|
@ -394,18 +468,18 @@ FROM
|
||||||
) as foo, users_table WHERE foo.cnt > users_table.value_2
|
) as foo, users_table WHERE foo.cnt > users_table.value_2
|
||||||
ORDER BY 3 DESC, 1 DESC, 2 DESC, 4 DESC
|
ORDER BY 3 DESC, 1 DESC, 2 DESC, 4 DESC
|
||||||
LIMIT 5;
|
LIMIT 5;
|
||||||
DEBUG: generating subplan 37_1 for CTE cte: WITH local_cte AS (SELECT users_table_local.user_id, users_table_local."time", users_table_local.value_1, users_table_local.value_2, users_table_local.value_3, users_table_local.value_4 FROM subquery_and_ctes.users_table_local), dist_cte AS (SELECT events_table.user_id FROM subquery_and_ctes.events_table, (SELECT DISTINCT users_table.value_2 FROM subquery_and_ctes.users_table OFFSET 0) foo WHERE ((events_table.user_id OPERATOR(pg_catalog.=) foo.value_2) AND (events_table.user_id OPERATOR(pg_catalog.=) ANY (SELECT DISTINCT users_table.value_1 FROM subquery_and_ctes.users_table ORDER BY users_table.value_1 LIMIT 3)))) SELECT dist_cte.user_id FROM (local_cte JOIN dist_cte ON ((dist_cte.user_id OPERATOR(pg_catalog.=) local_cte.user_id)))
|
DEBUG: generating subplan 47_1 for CTE cte: WITH local_cte AS (SELECT users_table_local.user_id, users_table_local."time", users_table_local.value_1, users_table_local.value_2, users_table_local.value_3, users_table_local.value_4 FROM subquery_and_ctes.users_table_local), dist_cte AS (SELECT events_table.user_id FROM subquery_and_ctes.events_table, (SELECT DISTINCT users_table.value_2 FROM subquery_and_ctes.users_table OFFSET 0) foo WHERE ((events_table.user_id OPERATOR(pg_catalog.=) foo.value_2) AND (events_table.user_id OPERATOR(pg_catalog.=) ANY (SELECT DISTINCT users_table.value_1 FROM subquery_and_ctes.users_table ORDER BY users_table.value_1 LIMIT 3)))) SELECT dist_cte.user_id FROM (local_cte JOIN dist_cte ON ((dist_cte.user_id OPERATOR(pg_catalog.=) local_cte.user_id)))
|
||||||
DEBUG: generating subplan 38_1 for CTE local_cte: SELECT user_id, "time", value_1, value_2, value_3, value_4 FROM subquery_and_ctes.users_table_local
|
DEBUG: generating subplan 48_1 for CTE local_cte: SELECT user_id, "time", value_1, value_2, value_3, value_4 FROM subquery_and_ctes.users_table_local
|
||||||
DEBUG: generating subplan 38_2 for CTE dist_cte: SELECT events_table.user_id FROM subquery_and_ctes.events_table, (SELECT DISTINCT users_table.value_2 FROM subquery_and_ctes.users_table OFFSET 0) foo WHERE ((events_table.user_id OPERATOR(pg_catalog.=) foo.value_2) AND (events_table.user_id OPERATOR(pg_catalog.=) ANY (SELECT DISTINCT users_table.value_1 FROM subquery_and_ctes.users_table ORDER BY users_table.value_1 LIMIT 3)))
|
DEBUG: generating subplan 48_2 for CTE dist_cte: SELECT events_table.user_id FROM subquery_and_ctes.events_table, (SELECT DISTINCT users_table.value_2 FROM subquery_and_ctes.users_table OFFSET 0) foo WHERE ((events_table.user_id OPERATOR(pg_catalog.=) foo.value_2) AND (events_table.user_id OPERATOR(pg_catalog.=) ANY (SELECT DISTINCT users_table.value_1 FROM subquery_and_ctes.users_table ORDER BY users_table.value_1 LIMIT 3)))
|
||||||
DEBUG: push down of limit count: 3
|
DEBUG: push down of limit count: 3
|
||||||
DEBUG: generating subplan 39_1 for subquery SELECT DISTINCT value_1 FROM subquery_and_ctes.users_table ORDER BY value_1 LIMIT 3
|
DEBUG: generating subplan 49_1 for subquery SELECT DISTINCT value_1 FROM subquery_and_ctes.users_table ORDER BY value_1 LIMIT 3
|
||||||
DEBUG: generating subplan 39_2 for subquery SELECT DISTINCT value_2 FROM subquery_and_ctes.users_table OFFSET 0
|
DEBUG: generating subplan 49_2 for subquery SELECT DISTINCT value_2 FROM subquery_and_ctes.users_table OFFSET 0
|
||||||
DEBUG: Plan 39 query after replacing subqueries and CTEs: SELECT events_table.user_id FROM subquery_and_ctes.events_table, (SELECT intermediate_result.value_2 FROM read_intermediate_result('39_2'::text, 'binary'::citus_copy_format) intermediate_result(value_2 integer)) foo WHERE ((events_table.user_id OPERATOR(pg_catalog.=) foo.value_2) AND (events_table.user_id OPERATOR(pg_catalog.=) ANY (SELECT intermediate_result.value_1 FROM read_intermediate_result('39_1'::text, 'binary'::citus_copy_format) intermediate_result(value_1 integer))))
|
DEBUG: Plan 49 query after replacing subqueries and CTEs: SELECT events_table.user_id FROM subquery_and_ctes.events_table, (SELECT intermediate_result.value_2 FROM read_intermediate_result('49_2'::text, 'binary'::citus_copy_format) intermediate_result(value_2 integer)) foo WHERE ((events_table.user_id OPERATOR(pg_catalog.=) foo.value_2) AND (events_table.user_id OPERATOR(pg_catalog.=) ANY (SELECT intermediate_result.value_1 FROM read_intermediate_result('49_1'::text, 'binary'::citus_copy_format) intermediate_result(value_1 integer))))
|
||||||
DEBUG: Plan 38 query after replacing subqueries and CTEs: SELECT dist_cte.user_id FROM ((SELECT intermediate_result.user_id, intermediate_result."time", intermediate_result.value_1, intermediate_result.value_2, intermediate_result.value_3, intermediate_result.value_4 FROM read_intermediate_result('38_1'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer, "time" timestamp without time zone, value_1 integer, value_2 integer, value_3 double precision, value_4 bigint)) local_cte JOIN (SELECT intermediate_result.user_id FROM read_intermediate_result('38_2'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) dist_cte ON ((dist_cte.user_id OPERATOR(pg_catalog.=) local_cte.user_id)))
|
DEBUG: Plan 48 query after replacing subqueries and CTEs: SELECT dist_cte.user_id FROM ((SELECT intermediate_result.user_id, intermediate_result."time", intermediate_result.value_1, intermediate_result.value_2, intermediate_result.value_3, intermediate_result.value_4 FROM read_intermediate_result('48_1'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer, "time" timestamp without time zone, value_1 integer, value_2 integer, value_3 double precision, value_4 bigint)) local_cte JOIN (SELECT intermediate_result.user_id FROM read_intermediate_result('48_2'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) dist_cte ON ((dist_cte.user_id OPERATOR(pg_catalog.=) local_cte.user_id)))
|
||||||
DEBUG: push down of limit count: 5
|
DEBUG: push down of limit count: 5
|
||||||
DEBUG: generating subplan 37_2 for subquery SELECT DISTINCT users_table.user_id FROM subquery_and_ctes.users_table, subquery_and_ctes.events_table WHERE ((users_table.user_id OPERATOR(pg_catalog.=) events_table.user_id) AND (events_table.event_type OPERATOR(pg_catalog.=) ANY (ARRAY[1, 2, 3, 4]))) ORDER BY users_table.user_id DESC LIMIT 5
|
DEBUG: generating subplan 47_2 for subquery SELECT DISTINCT users_table.user_id FROM subquery_and_ctes.users_table, subquery_and_ctes.events_table WHERE ((users_table.user_id OPERATOR(pg_catalog.=) events_table.user_id) AND (events_table.event_type OPERATOR(pg_catalog.=) ANY (ARRAY[1, 2, 3, 4]))) ORDER BY users_table.user_id DESC LIMIT 5
|
||||||
DEBUG: generating subplan 37_3 for subquery SELECT count(*) AS cnt FROM (SELECT intermediate_result.user_id FROM read_intermediate_result('37_1'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) cte, (SELECT intermediate_result.user_id FROM read_intermediate_result('37_2'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) foo WHERE (foo.user_id OPERATOR(pg_catalog.=) cte.user_id)
|
DEBUG: generating subplan 47_3 for subquery SELECT count(*) AS cnt FROM (SELECT intermediate_result.user_id FROM read_intermediate_result('47_1'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) cte, (SELECT intermediate_result.user_id FROM read_intermediate_result('47_2'::text, 'binary'::citus_copy_format) intermediate_result(user_id integer)) foo WHERE (foo.user_id OPERATOR(pg_catalog.=) cte.user_id)
|
||||||
DEBUG: Plan 37 query after replacing subqueries and CTEs: SELECT foo.cnt, users_table.user_id, users_table."time", users_table.value_1, users_table.value_2, users_table.value_3, users_table.value_4 FROM (SELECT intermediate_result.cnt FROM read_intermediate_result('37_3'::text, 'binary'::citus_copy_format) intermediate_result(cnt bigint)) foo, subquery_and_ctes.users_table WHERE (foo.cnt OPERATOR(pg_catalog.>) users_table.value_2) ORDER BY users_table."time" DESC, foo.cnt DESC, users_table.user_id DESC, users_table.value_1 DESC LIMIT 5
|
DEBUG: Plan 47 query after replacing subqueries and CTEs: SELECT foo.cnt, users_table.user_id, users_table."time", users_table.value_1, users_table.value_2, users_table.value_3, users_table.value_4 FROM (SELECT intermediate_result.cnt FROM read_intermediate_result('47_3'::text, 'binary'::citus_copy_format) intermediate_result(cnt bigint)) foo, subquery_and_ctes.users_table WHERE (foo.cnt OPERATOR(pg_catalog.>) users_table.value_2) ORDER BY users_table."time" DESC, foo.cnt DESC, users_table.user_id DESC, users_table.value_1 DESC LIMIT 5
|
||||||
DEBUG: push down of limit count: 5
|
DEBUG: push down of limit count: 5
|
||||||
cnt | user_id | time | value_1 | value_2 | value_3 | value_4
|
cnt | user_id | time | value_1 | value_2 | value_3 | value_4
|
||||||
-----+---------+---------------------------------+---------+---------+---------+---------
|
-----+---------+---------------------------------+---------+---------+---------+---------
|
||||||
|
@ -482,8 +556,9 @@ ERROR: (3/3) failed to execute one of the tasks
|
||||||
CONTEXT: PL/pgSQL function inline_code_block line 29 at RAISE
|
CONTEXT: PL/pgSQL function inline_code_block line 29 at RAISE
|
||||||
SET client_min_messages TO DEFAULT;
|
SET client_min_messages TO DEFAULT;
|
||||||
DROP SCHEMA subquery_and_ctes CASCADE;
|
DROP SCHEMA subquery_and_ctes CASCADE;
|
||||||
NOTICE: drop cascades to 3 other objects
|
NOTICE: drop cascades to 4 other objects
|
||||||
DETAIL: drop cascades to table users_table
|
DETAIL: drop cascades to table users_table
|
||||||
drop cascades to table events_table
|
drop cascades to table events_table
|
||||||
drop cascades to table users_table_local
|
drop cascades to table users_table_local
|
||||||
|
drop cascades to table dist_table
|
||||||
SET search_path TO public;
|
SET search_path TO public;
|
||||||
|
|
|
@ -3,9 +3,12 @@
|
||||||
-- ===================================================================
|
-- ===================================================================
|
||||||
SET search_path TO subquery_and_ctes;
|
SET search_path TO subquery_and_ctes;
|
||||||
|
|
||||||
|
|
||||||
CREATE TABLE users_table_local AS SELECT * FROM users_table;
|
CREATE TABLE users_table_local AS SELECT * FROM users_table;
|
||||||
|
|
||||||
|
CREATE TABLE dist_table (id int, value int);
|
||||||
|
SELECT create_distributed_table('dist_table', 'id', colocate_with => 'users_table');
|
||||||
|
INSERT INTO dist_table (id, value) VALUES(1, 2),(2, 3),(3,4);
|
||||||
|
|
||||||
SET client_min_messages TO DEBUG1;
|
SET client_min_messages TO DEBUG1;
|
||||||
|
|
||||||
-- CTEs are recursively planned, and subquery foo is also recursively planned
|
-- CTEs are recursively planned, and subquery foo is also recursively planned
|
||||||
|
@ -17,7 +20,7 @@ WITH cte AS (
|
||||||
dist_cte AS (
|
dist_cte AS (
|
||||||
SELECT user_id FROM events_table
|
SELECT user_id FROM events_table
|
||||||
)
|
)
|
||||||
SELECT dist_cte.user_id FROM local_cte join dist_cte on dist_cte.user_id=local_cte.user_id
|
SELECT dist_cte.user_id FROM local_cte JOIN dist_cte ON dist_cte.user_id=local_cte.user_id
|
||||||
)
|
)
|
||||||
SELECT
|
SELECT
|
||||||
count(*)
|
count(*)
|
||||||
|
@ -34,6 +37,53 @@ FROM
|
||||||
) as foo
|
) as foo
|
||||||
WHERE foo.user_id = cte.user_id;
|
WHERE foo.user_id = cte.user_id;
|
||||||
|
|
||||||
|
-- CTEs are colocated, route entire query
|
||||||
|
WITH cte1 AS (
|
||||||
|
SELECT * FROM users_table WHERE user_id = 1
|
||||||
|
), cte2 AS (
|
||||||
|
SELECT * FROM events_table WHERE user_id = 1
|
||||||
|
)
|
||||||
|
SELECT cte1.user_id, cte1.value_1, cte2.user_id, cte2.event_type
|
||||||
|
FROM cte1, cte2
|
||||||
|
ORDER BY cte1.user_id, cte1.value_1, cte2.user_id, cte2.event_type
|
||||||
|
LIMIT 5;
|
||||||
|
|
||||||
|
-- CTEs aren't colocated, CTEs become intermediate results
|
||||||
|
WITH cte1 AS (
|
||||||
|
SELECT * FROM users_table WHERE user_id = 1
|
||||||
|
), cte2 AS (
|
||||||
|
SELECT * FROM events_table WHERE user_id = 6
|
||||||
|
)
|
||||||
|
SELECT cte1.user_id, cte1.value_1, cte2.user_id, cte2.user_id
|
||||||
|
FROM cte1, cte2
|
||||||
|
ORDER BY cte1.user_id, cte1.value_1, cte2.user_id, cte2.event_type
|
||||||
|
LIMIT 5;
|
||||||
|
|
||||||
|
-- users_table & dist_table are colocated, route entire query
|
||||||
|
WITH cte1 AS (
|
||||||
|
SELECT * FROM users_table WHERE user_id = 1
|
||||||
|
)
|
||||||
|
UPDATE dist_table dt SET value = cte1.value_1
|
||||||
|
FROM cte1 WHERE cte1.user_id = dt.id AND dt.id = 1;
|
||||||
|
|
||||||
|
-- users_table & events_table & dist_table are colocated, route entire query
|
||||||
|
WITH cte1 AS (
|
||||||
|
SELECT * FROM users_table WHERE user_id = 1
|
||||||
|
), cte2 AS (
|
||||||
|
SELECT * FROM events_table WHERE user_id = 1
|
||||||
|
)
|
||||||
|
UPDATE dist_table dt SET value = cte1.value_1 + cte2.event_type
|
||||||
|
FROM cte1, cte2 WHERE cte1.user_id = dt.id AND dt.id = 1;
|
||||||
|
|
||||||
|
-- all relations are not colocated, CTEs become intermediate results
|
||||||
|
WITH cte1 AS (
|
||||||
|
SELECT * FROM users_table WHERE user_id = 1
|
||||||
|
), cte2 AS (
|
||||||
|
SELECT * FROM events_table WHERE user_id = 6
|
||||||
|
)
|
||||||
|
UPDATE dist_table dt SET value = cte1.value_1 + cte2.event_type
|
||||||
|
FROM cte1, cte2 WHERE cte1.user_id = dt.id AND dt.id = 1;
|
||||||
|
|
||||||
-- CTEs are recursively planned, and subquery foo is also recursively planned
|
-- CTEs are recursively planned, and subquery foo is also recursively planned
|
||||||
-- final plan becomes a real-time plan since we also have events_table in the
|
-- final plan becomes a real-time plan since we also have events_table in the
|
||||||
-- range table entries
|
-- range table entries
|
||||||
|
@ -44,7 +94,7 @@ WITH cte AS (
|
||||||
dist_cte AS (
|
dist_cte AS (
|
||||||
SELECT user_id FROM events_table
|
SELECT user_id FROM events_table
|
||||||
)
|
)
|
||||||
SELECT dist_cte.user_id FROM local_cte join dist_cte on dist_cte.user_id=local_cte.user_id
|
SELECT dist_cte.user_id FROM local_cte JOIN dist_cte ON dist_cte.user_id=local_cte.user_id
|
||||||
)
|
)
|
||||||
SELECT
|
SELECT
|
||||||
count(*)
|
count(*)
|
||||||
|
@ -71,7 +121,7 @@ WITH cte AS (
|
||||||
dist_cte AS (
|
dist_cte AS (
|
||||||
SELECT user_id FROM events_table
|
SELECT user_id FROM events_table
|
||||||
)
|
)
|
||||||
SELECT dist_cte.user_id FROM local_cte join dist_cte on dist_cte.user_id=local_cte.user_id
|
SELECT dist_cte.user_id FROM local_cte JOIN dist_cte ON dist_cte.user_id=local_cte.user_id
|
||||||
)
|
)
|
||||||
SELECT DISTINCT cte.user_id
|
SELECT DISTINCT cte.user_id
|
||||||
FROM users_table, cte
|
FROM users_table, cte
|
||||||
|
@ -89,7 +139,7 @@ WITH cte AS (
|
||||||
dist_cte AS (
|
dist_cte AS (
|
||||||
SELECT user_id FROM events_table
|
SELECT user_id FROM events_table
|
||||||
)
|
)
|
||||||
SELECT dist_cte.user_id FROM local_cte join dist_cte on dist_cte.user_id=local_cte.user_id
|
SELECT dist_cte.user_id FROM local_cte JOIN dist_cte ON dist_cte.user_id=local_cte.user_id
|
||||||
)
|
)
|
||||||
SELECT DISTINCT cte.user_id
|
SELECT DISTINCT cte.user_id
|
||||||
FROM cte
|
FROM cte
|
||||||
|
@ -201,7 +251,7 @@ SELECT * FROM
|
||||||
dist_cte AS (
|
dist_cte AS (
|
||||||
SELECT user_id FROM events_table
|
SELECT user_id FROM events_table
|
||||||
)
|
)
|
||||||
SELECT dist_cte.user_id FROM local_cte join dist_cte on dist_cte.user_id=local_cte.user_id
|
SELECT dist_cte.user_id FROM local_cte JOIN dist_cte ON dist_cte.user_id=local_cte.user_id
|
||||||
)
|
)
|
||||||
SELECT DISTINCT cte.user_id
|
SELECT DISTINCT cte.user_id
|
||||||
FROM users_table, cte
|
FROM users_table, cte
|
||||||
|
@ -233,7 +283,7 @@ WITH cte AS (
|
||||||
events_table.user_id = foo.value_2 AND
|
events_table.user_id = foo.value_2 AND
|
||||||
events_table.user_id IN (SELECT DISTINCT value_1 FROM users_table ORDER BY 1 LIMIT 3)
|
events_table.user_id IN (SELECT DISTINCT value_1 FROM users_table ORDER BY 1 LIMIT 3)
|
||||||
)
|
)
|
||||||
SELECT dist_cte.user_id FROM local_cte join dist_cte on dist_cte.user_id=local_cte.user_id
|
SELECT dist_cte.user_id FROM local_cte JOIN dist_cte ON dist_cte.user_id=local_cte.user_id
|
||||||
)
|
)
|
||||||
SELECT
|
SELECT
|
||||||
count(*)
|
count(*)
|
||||||
|
@ -270,7 +320,7 @@ FROM
|
||||||
events_table.user_id = foo.value_2 AND
|
events_table.user_id = foo.value_2 AND
|
||||||
events_table.user_id IN (SELECT DISTINCT value_1 FROM users_table ORDER BY 1 LIMIT 3)
|
events_table.user_id IN (SELECT DISTINCT value_1 FROM users_table ORDER BY 1 LIMIT 3)
|
||||||
)
|
)
|
||||||
SELECT dist_cte.user_id FROM local_cte join dist_cte on dist_cte.user_id=local_cte.user_id
|
SELECT dist_cte.user_id FROM local_cte JOIN dist_cte ON dist_cte.user_id=local_cte.user_id
|
||||||
)
|
)
|
||||||
SELECT
|
SELECT
|
||||||
count(*) as cnt
|
count(*) as cnt
|
||||||
|
|
Loading…
Reference in New Issue