mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-16 18:43:18 +08:00
This patch does following: 1. Planner changes to create ChunkDispatch node when MERGE command has INSERT action. 2. Changes to map partition attributes from a tuple returned from child node of ChunkDispatch against physical targetlist, so that ChunkDispatch node can read the correct value from partition column. 3. Fixed issues with MERGE on compressed hypertable. 4. Added more testcases. 5. MERGE in distributed hypertables is not supported. 6. Since there is no Custom Scan (HypertableModify) node for MERGE with UPDATE/DELETE on compressed hypertables, we don't support this. Fixes #5139
73 lines
3.0 KiB
SQL
73 lines
3.0 KiB
SQL
-- This file and its contents are licensed under the Apache License 2.0.
|
|
-- Please see the included NOTICE for copyright information and
|
|
-- LICENSE-APACHE for a copy of the license.
|
|
|
|
CREATE USER regress_merge_privs;
|
|
CREATE USER regress_merge_no_privs;
|
|
DROP TABLE IF EXISTS target;
|
|
DROP TABLE IF EXISTS source;
|
|
CREATE TABLE target (tid integer, balance integer)
|
|
WITH (autovacuum_enabled=off);
|
|
SELECT create_hypertable('target', 'tid', chunk_time_interval => 3);
|
|
CREATE TABLE source (sid integer, delta integer) -- no index
|
|
WITH (autovacuum_enabled=off);
|
|
INSERT INTO target VALUES (1, 10);
|
|
INSERT INTO target VALUES (2, 20);
|
|
INSERT INTO target VALUES (3, 30);
|
|
SELECT t.ctid is not null as matched, t.*, s.* FROM source s FULL OUTER JOIN target t ON s.sid = t.tid ORDER BY t.tid, s.sid;
|
|
|
|
ALTER TABLE target OWNER TO regress_merge_privs;
|
|
ALTER TABLE source OWNER TO regress_merge_privs;
|
|
|
|
CREATE TABLE target2 (tid integer, balance integer)
|
|
WITH (autovacuum_enabled=off);
|
|
SELECT create_hypertable('target2', 'tid', chunk_time_interval => 3);
|
|
CREATE TABLE source2 (sid integer, delta integer)
|
|
WITH (autovacuum_enabled=off);
|
|
|
|
ALTER TABLE target2 OWNER TO regress_merge_no_privs;
|
|
ALTER TABLE source2 OWNER TO regress_merge_no_privs;
|
|
|
|
GRANT INSERT ON target TO regress_merge_no_privs;
|
|
GRANT CREATE ON SCHEMA public TO regress_merge_privs;
|
|
SET SESSION AUTHORIZATION regress_merge_privs;
|
|
|
|
CREATE TABLE sq_target (tid integer NOT NULL, balance integer)
|
|
WITH (autovacuum_enabled=off);
|
|
SELECT create_hypertable('sq_target', 'tid', chunk_time_interval => 3);
|
|
|
|
CREATE TABLE sq_source (delta integer, sid integer, balance integer DEFAULT 0)
|
|
WITH (autovacuum_enabled=off);
|
|
|
|
INSERT INTO sq_target(tid, balance) VALUES (1,100), (2,200), (3,300);
|
|
INSERT INTO sq_source(sid, delta) VALUES (1,10), (2,20), (4,40);
|
|
|
|
-- conditional WHEN clause
|
|
CREATE TABLE wq_target (tid integer not null, balance integer DEFAULT -1)
|
|
WITH (autovacuum_enabled=off);
|
|
SELECT create_hypertable('wq_target', 'tid', chunk_time_interval => 3);
|
|
CREATE TABLE wq_source (balance integer, sid integer)
|
|
WITH (autovacuum_enabled=off);
|
|
|
|
INSERT INTO wq_source (sid, balance) VALUES (1, 100);
|
|
|
|
-- some complex joins on the source side
|
|
|
|
CREATE TABLE cj_target (tid integer, balance float, val text)
|
|
WITH (autovacuum_enabled=off);
|
|
SELECT create_hypertable('cj_target', 'tid', chunk_time_interval => 3);
|
|
CREATE TABLE cj_source1 (sid1 integer, scat integer, delta integer)
|
|
WITH (autovacuum_enabled=off);
|
|
CREATE TABLE cj_source2 (sid2 integer, sval text)
|
|
WITH (autovacuum_enabled=off);
|
|
INSERT INTO cj_source1 VALUES (1, 10, 100);
|
|
INSERT INTO cj_source1 VALUES (1, 20, 200);
|
|
INSERT INTO cj_source1 VALUES (2, 20, 300);
|
|
INSERT INTO cj_source1 VALUES (3, 10, 400);
|
|
INSERT INTO cj_source2 VALUES (1, 'initial source2');
|
|
INSERT INTO cj_source2 VALUES (2, 'initial source2');
|
|
INSERT INTO cj_source2 VALUES (3, 'initial source2');
|
|
|
|
CREATE TABLE fs_target (a int, b int, c text)
|
|
WITH (autovacuum_enabled=off);
|
|
SELECT create_hypertable('fs_target', 'a', chunk_time_interval => 3); |