1
0
mirror of https://github.com/timescale/timescaledb.git synced 2025-05-18 03:23:37 +08:00

Fix DELETE command tag

DELETE on hypertables always reports 0 as affected rows.
This patch fixes this issue.
This commit is contained in:
Bharathy 2023-03-07 20:11:42 +05:30
parent f680b99529
commit c13ed17fbc
3 changed files with 69 additions and 1 deletions

@ -947,8 +947,8 @@ ExecModifyTable(PlanState *pstate)
tupleid,
oldtuple,
true,
false,
node->canSetTag,
false,
NULL,
NULL);
break;

@ -16,3 +16,44 @@ SELECT create_hypertable('test_hyper_pk', 'time');
CREATE TABLE test_fk(time TIMESTAMPTZ REFERENCES test_hyper_pk(time));
ERROR: foreign keys to hypertables are not supported
\set ON_ERROR_STOP 1
CREATE TABLE test_delete(time timestamp with time zone PRIMARY KEY, temp float);
SELECT create_hypertable('test_delete', 'time');
create_hypertable
--------------------------
(2,public,test_delete,t)
(1 row)
INSERT INTO test_delete VALUES('2017-01-20T09:00:01', 22.5);
INSERT INTO test_delete VALUES('2017-01-20T09:00:21', 21.2);
INSERT INTO test_delete VALUES('2017-01-20T09:00:47', 25.1);
INSERT INTO test_delete VALUES('2020-01-20T09:00:47', 25.1);
INSERT INTO test_delete VALUES('2021-01-20T09:00:47', 25.1);
SELECT * FROM test_delete WHERE temp = 25.1 ORDER BY time;
time | temp
------------------------------+------
Fri Jan 20 09:00:47 2017 PST | 25.1
Mon Jan 20 09:00:47 2020 PST | 25.1
Wed Jan 20 09:00:47 2021 PST | 25.1
(3 rows)
CREATE OR replace FUNCTION test_delete_row_count()
RETURNS void AS $$
DECLARE
v_cnt numeric;
BEGIN
v_cnt := 0;
DELETE FROM test_delete WHERE temp = 25.1;
GET DIAGNOSTICS v_cnt = ROW_COUNT;
IF v_cnt != 3 THEN
RAISE EXCEPTION 'unexpected result';
END IF;
END;
$$ LANGUAGE plpgsql;
SELECT test_delete_row_count();
test_delete_row_count
-----------------------
(1 row)

@ -13,3 +13,30 @@ SELECT create_hypertable('test_hyper_pk', 'time');
-- Foreign key constraints that reference hypertables are currently unsupported
CREATE TABLE test_fk(time TIMESTAMPTZ REFERENCES test_hyper_pk(time));
\set ON_ERROR_STOP 1
CREATE TABLE test_delete(time timestamp with time zone PRIMARY KEY, temp float);
SELECT create_hypertable('test_delete', 'time');
INSERT INTO test_delete VALUES('2017-01-20T09:00:01', 22.5);
INSERT INTO test_delete VALUES('2017-01-20T09:00:21', 21.2);
INSERT INTO test_delete VALUES('2017-01-20T09:00:47', 25.1);
INSERT INTO test_delete VALUES('2020-01-20T09:00:47', 25.1);
INSERT INTO test_delete VALUES('2021-01-20T09:00:47', 25.1);
SELECT * FROM test_delete WHERE temp = 25.1 ORDER BY time;
CREATE OR replace FUNCTION test_delete_row_count()
RETURNS void AS $$
DECLARE
v_cnt numeric;
BEGIN
v_cnt := 0;
DELETE FROM test_delete WHERE temp = 25.1;
GET DIAGNOSTICS v_cnt = ROW_COUNT;
IF v_cnt != 3 THEN
RAISE EXCEPTION 'unexpected result';
END IF;
END;
$$ LANGUAGE plpgsql;
SELECT test_delete_row_count();