mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-17 02:53:51 +08:00
Fix DELETE statement trigger on hypertables for PG14
Commit 3c40f924 accidently broke DELETE statement triggers on PG14 that were only defined on the hypertable itself. This patch fixes the issue and also makes the trigger test no longer pg version specific.
This commit is contained in:
parent
0f70ae87bf
commit
6d40c30d10
@ -121,7 +121,16 @@ hypertable_modify_begin(CustomScanState *node, EState *estate, int eflags)
|
||||
List *chunk_dispatch_states = NIL;
|
||||
ListCell *lc;
|
||||
|
||||
ps = ExecInitNode(&state->mt->plan, estate, eflags);
|
||||
ModifyTable *mt = castNode(ModifyTable, &state->mt->plan);
|
||||
/*
|
||||
* To make statement trigger defined on the hypertable work
|
||||
* we need to set the hypertable as the rootRelation otherwise
|
||||
* statement trigger defined only on the hypertable will not fire.
|
||||
*/
|
||||
if (mt->operation == CMD_DELETE)
|
||||
mt->rootRelation = mt->nominalRelation;
|
||||
|
||||
ps = ExecInitNode(&mt->plan, estate, eflags);
|
||||
node->custom_ps = list_make1(ps);
|
||||
mtstate = castNode(ModifyTableState, ps);
|
||||
|
||||
|
@ -1,444 +0,0 @@
|
||||
-- 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 TABLE hyper (
|
||||
time BIGINT NOT NULL,
|
||||
device_id TEXT NOT NULL,
|
||||
sensor_1 NUMERIC NULL DEFAULT 1
|
||||
);
|
||||
CREATE OR REPLACE FUNCTION test_trigger()
|
||||
RETURNS TRIGGER LANGUAGE PLPGSQL AS
|
||||
$BODY$
|
||||
DECLARE
|
||||
cnt INTEGER;
|
||||
BEGIN
|
||||
SELECT count(*) INTO cnt FROM hyper;
|
||||
RAISE WARNING 'FIRING trigger when: % level: % op: % cnt: % trigger_name %',
|
||||
tg_when, tg_level, tg_op, cnt, tg_name;
|
||||
|
||||
IF TG_OP = 'DELETE' THEN
|
||||
RETURN OLD;
|
||||
END IF;
|
||||
RETURN NEW;
|
||||
END
|
||||
$BODY$;
|
||||
-- row triggers: BEFORE
|
||||
CREATE TRIGGER _0_test_trigger_insert
|
||||
BEFORE INSERT ON hyper
|
||||
FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER _0_test_trigger_update
|
||||
BEFORE UPDATE ON hyper
|
||||
FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER _0_test_trigger_delete
|
||||
BEFORE delete ON hyper
|
||||
FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER z_test_trigger_all
|
||||
BEFORE INSERT OR UPDATE OR DELETE ON hyper
|
||||
FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
-- row triggers: AFTER
|
||||
CREATE TRIGGER _0_test_trigger_insert_after
|
||||
AFTER INSERT ON hyper
|
||||
FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER _0_test_trigger_insert_after_when_dev1
|
||||
AFTER INSERT ON hyper
|
||||
FOR EACH ROW
|
||||
WHEN (NEW.device_id = 'dev1')
|
||||
EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER _0_test_trigger_update_after
|
||||
AFTER UPDATE ON hyper
|
||||
FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER _0_test_trigger_delete_after
|
||||
AFTER delete ON hyper
|
||||
FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER z_test_trigger_all_after
|
||||
AFTER INSERT OR UPDATE OR DELETE ON hyper
|
||||
FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
-- statement triggers: BEFORE
|
||||
CREATE TRIGGER _0_test_trigger_insert_s_before
|
||||
BEFORE INSERT ON hyper
|
||||
FOR EACH STATEMENT EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER _0_test_trigger_update_s_before
|
||||
BEFORE UPDATE ON hyper
|
||||
FOR EACH STATEMENT EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER _0_test_trigger_delete_s_before
|
||||
BEFORE DELETE ON hyper
|
||||
FOR EACH STATEMENT EXECUTE FUNCTION test_trigger();
|
||||
-- statement triggers: AFTER
|
||||
CREATE TRIGGER _0_test_trigger_insert_s_after
|
||||
AFTER INSERT ON hyper
|
||||
FOR EACH STATEMENT EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER _0_test_trigger_update_s_after
|
||||
AFTER UPDATE ON hyper
|
||||
FOR EACH STATEMENT EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER _0_test_trigger_delete_s_after
|
||||
AFTER DELETE ON hyper
|
||||
FOR EACH STATEMENT EXECUTE FUNCTION test_trigger();
|
||||
-- CONSTRAINT TRIGGER
|
||||
CREATE CONSTRAINT TRIGGER _0_test_trigger_constraint_insert
|
||||
AFTER INSERT ON hyper FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
CREATE CONSTRAINT TRIGGER _0_test_trigger_constraint_update
|
||||
AFTER UPDATE ON hyper FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
CREATE CONSTRAINT TRIGGER _0_test_trigger_constraint_delete
|
||||
AFTER DELETE ON hyper FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
SELECT * FROM create_hypertable('hyper', 'time', chunk_time_interval => 10);
|
||||
hypertable_id | schema_name | table_name | created
|
||||
---------------+-------------+------------+---------
|
||||
1 | public | hyper | t
|
||||
(1 row)
|
||||
|
||||
--test triggers before create_hypertable
|
||||
INSERT INTO hyper(time, device_id,sensor_1) VALUES
|
||||
(1257987600000000000, 'dev1', 1);
|
||||
WARNING: FIRING trigger when: BEFORE level: STATEMENT op: INSERT cnt: 0 trigger_name _0_test_trigger_insert_s_before
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: INSERT cnt: 0 trigger_name _0_test_trigger_insert
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: INSERT cnt: 0 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 1 trigger_name _0_test_trigger_constraint_insert
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 1 trigger_name _0_test_trigger_insert_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 1 trigger_name _0_test_trigger_insert_after_when_dev1
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 1 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: STATEMENT op: INSERT cnt: 1 trigger_name _0_test_trigger_insert_s_after
|
||||
INSERT INTO hyper(time, device_id,sensor_1) VALUES
|
||||
(1257987700000000000, 'dev2', 1), (1257987800000000000, 'dev2', 1);
|
||||
WARNING: FIRING trigger when: BEFORE level: STATEMENT op: INSERT cnt: 1 trigger_name _0_test_trigger_insert_s_before
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: INSERT cnt: 1 trigger_name _0_test_trigger_insert
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: INSERT cnt: 1 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: INSERT cnt: 2 trigger_name _0_test_trigger_insert
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: INSERT cnt: 2 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 3 trigger_name _0_test_trigger_constraint_insert
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 3 trigger_name _0_test_trigger_insert_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 3 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 3 trigger_name _0_test_trigger_constraint_insert
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 3 trigger_name _0_test_trigger_insert_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 3 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: STATEMENT op: INSERT cnt: 3 trigger_name _0_test_trigger_insert_s_after
|
||||
UPDATE hyper SET sensor_1 = 2;
|
||||
WARNING: FIRING trigger when: BEFORE level: STATEMENT op: UPDATE cnt: 3 trigger_name _0_test_trigger_update_s_before
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_update
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: UPDATE cnt: 3 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_update
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: UPDATE cnt: 3 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_update
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: UPDATE cnt: 3 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_constraint_update
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_update_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_constraint_update
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_update_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_constraint_update
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_update_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: STATEMENT op: UPDATE cnt: 3 trigger_name _0_test_trigger_update_s_after
|
||||
DELETE FROM hyper;
|
||||
WARNING: FIRING trigger when: BEFORE level: STATEMENT op: DELETE cnt: 3 trigger_name _0_test_trigger_delete_s_before
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: DELETE cnt: 3 trigger_name _0_test_trigger_delete
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: DELETE cnt: 3 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: DELETE cnt: 2 trigger_name _0_test_trigger_delete
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: DELETE cnt: 2 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: DELETE cnt: 1 trigger_name _0_test_trigger_delete
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: DELETE cnt: 1 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name _0_test_trigger_constraint_delete
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name _0_test_trigger_delete_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name _0_test_trigger_constraint_delete
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name _0_test_trigger_delete_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name _0_test_trigger_constraint_delete
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name _0_test_trigger_delete_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: STATEMENT op: DELETE cnt: 0 trigger_name _0_test_trigger_delete_s_after
|
||||
--test drop trigger
|
||||
DROP TRIGGER _0_test_trigger_insert ON hyper;
|
||||
DROP TRIGGER _0_test_trigger_insert_s_before ON hyper;
|
||||
DROP TRIGGER _0_test_trigger_insert_after ON hyper;
|
||||
DROP TRIGGER _0_test_trigger_insert_s_after ON hyper;
|
||||
INSERT INTO hyper(time, device_id,sensor_1) VALUES
|
||||
(1257987600000000000, 'dev1', 1);
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: INSERT cnt: 0 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 1 trigger_name _0_test_trigger_constraint_insert
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 1 trigger_name _0_test_trigger_insert_after_when_dev1
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 1 trigger_name z_test_trigger_all_after
|
||||
INSERT INTO hyper(time, device_id,sensor_1) VALUES
|
||||
(1257987700000000000, 'dev2', 1), (1257987800000000000, 'dev2', 1);
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: INSERT cnt: 1 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: INSERT cnt: 2 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 3 trigger_name _0_test_trigger_constraint_insert
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 3 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 3 trigger_name _0_test_trigger_constraint_insert
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 3 trigger_name z_test_trigger_all_after
|
||||
DROP TRIGGER _0_test_trigger_update ON hyper;
|
||||
DROP TRIGGER _0_test_trigger_update_s_before ON hyper;
|
||||
DROP TRIGGER _0_test_trigger_update_after ON hyper;
|
||||
DROP TRIGGER _0_test_trigger_update_s_after ON hyper;
|
||||
UPDATE hyper SET sensor_1 = 2;
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: UPDATE cnt: 3 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: UPDATE cnt: 3 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: UPDATE cnt: 3 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_constraint_update
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_constraint_update
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_constraint_update
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name z_test_trigger_all_after
|
||||
DROP TRIGGER _0_test_trigger_delete ON hyper;
|
||||
DROP TRIGGER _0_test_trigger_delete_s_before ON hyper;
|
||||
DROP TRIGGER _0_test_trigger_delete_after ON hyper;
|
||||
DROP TRIGGER _0_test_trigger_delete_s_after ON hyper;
|
||||
DELETE FROM hyper;
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: DELETE cnt: 3 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: DELETE cnt: 2 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: DELETE cnt: 1 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name _0_test_trigger_constraint_delete
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name _0_test_trigger_constraint_delete
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name _0_test_trigger_constraint_delete
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name z_test_trigger_all_after
|
||||
DROP TRIGGER z_test_trigger_all ON hyper;
|
||||
DROP TRIGGER z_test_trigger_all_after ON hyper;
|
||||
--test create trigger on hypertable
|
||||
-- row triggers: BEFORE
|
||||
CREATE TRIGGER _0_test_trigger_insert
|
||||
BEFORE INSERT ON hyper
|
||||
FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER _0_test_trigger_update
|
||||
BEFORE UPDATE ON hyper
|
||||
FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER _0_test_trigger_delete
|
||||
BEFORE delete ON hyper
|
||||
FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER z_test_trigger_all
|
||||
BEFORE INSERT OR UPDATE OR DELETE ON hyper
|
||||
FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
-- row triggers: AFTER
|
||||
CREATE TRIGGER _0_test_trigger_insert_after
|
||||
AFTER INSERT ON hyper
|
||||
FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER _0_test_trigger_update_after
|
||||
AFTER UPDATE ON hyper
|
||||
FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER _0_test_trigger_delete_after
|
||||
AFTER delete ON hyper
|
||||
FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER z_test_trigger_all_after
|
||||
AFTER INSERT OR UPDATE OR DELETE ON hyper
|
||||
FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
-- statement triggers: BEFORE
|
||||
CREATE TRIGGER _0_test_trigger_insert_s_before
|
||||
BEFORE INSERT ON hyper
|
||||
FOR EACH STATEMENT EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER _0_test_trigger_update_s_before
|
||||
BEFORE UPDATE ON hyper
|
||||
FOR EACH STATEMENT EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER _0_test_trigger_delete_s_before
|
||||
BEFORE DELETE ON hyper
|
||||
FOR EACH STATEMENT EXECUTE FUNCTION test_trigger();
|
||||
-- statement triggers: AFTER
|
||||
CREATE TRIGGER _0_test_trigger_insert_s_after
|
||||
AFTER INSERT ON hyper
|
||||
FOR EACH STATEMENT EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER _0_test_trigger_update_s_after
|
||||
AFTER UPDATE ON hyper
|
||||
FOR EACH STATEMENT EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER _0_test_trigger_delete_s_after
|
||||
AFTER DELETE ON hyper
|
||||
FOR EACH STATEMENT EXECUTE FUNCTION test_trigger();
|
||||
INSERT INTO hyper(time, device_id,sensor_1) VALUES
|
||||
(1257987600000000000, 'dev1', 1);
|
||||
WARNING: FIRING trigger when: BEFORE level: STATEMENT op: INSERT cnt: 0 trigger_name _0_test_trigger_insert_s_before
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: INSERT cnt: 0 trigger_name _0_test_trigger_insert
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: INSERT cnt: 0 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 1 trigger_name _0_test_trigger_constraint_insert
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 1 trigger_name _0_test_trigger_insert_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 1 trigger_name _0_test_trigger_insert_after_when_dev1
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 1 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: STATEMENT op: INSERT cnt: 1 trigger_name _0_test_trigger_insert_s_after
|
||||
INSERT INTO hyper(time, device_id,sensor_1) VALUES
|
||||
(1257987700000000000, 'dev2', 1), (1257987800000000000, 'dev2', 1);
|
||||
WARNING: FIRING trigger when: BEFORE level: STATEMENT op: INSERT cnt: 1 trigger_name _0_test_trigger_insert_s_before
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: INSERT cnt: 1 trigger_name _0_test_trigger_insert
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: INSERT cnt: 1 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: INSERT cnt: 2 trigger_name _0_test_trigger_insert
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: INSERT cnt: 2 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 3 trigger_name _0_test_trigger_constraint_insert
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 3 trigger_name _0_test_trigger_insert_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 3 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 3 trigger_name _0_test_trigger_constraint_insert
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 3 trigger_name _0_test_trigger_insert_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 3 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: STATEMENT op: INSERT cnt: 3 trigger_name _0_test_trigger_insert_s_after
|
||||
UPDATE hyper SET sensor_1 = 2;
|
||||
WARNING: FIRING trigger when: BEFORE level: STATEMENT op: UPDATE cnt: 3 trigger_name _0_test_trigger_update_s_before
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_update
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: UPDATE cnt: 3 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_update
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: UPDATE cnt: 3 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_update
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: UPDATE cnt: 3 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_constraint_update
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_update_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_constraint_update
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_update_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_constraint_update
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_update_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: STATEMENT op: UPDATE cnt: 3 trigger_name _0_test_trigger_update_s_after
|
||||
DELETE FROM hyper;
|
||||
WARNING: FIRING trigger when: BEFORE level: STATEMENT op: DELETE cnt: 3 trigger_name _0_test_trigger_delete_s_before
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: DELETE cnt: 3 trigger_name _0_test_trigger_delete
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: DELETE cnt: 3 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: DELETE cnt: 2 trigger_name _0_test_trigger_delete
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: DELETE cnt: 2 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: DELETE cnt: 1 trigger_name _0_test_trigger_delete
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: DELETE cnt: 1 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name _0_test_trigger_constraint_delete
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name _0_test_trigger_delete_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name _0_test_trigger_constraint_delete
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name _0_test_trigger_delete_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name _0_test_trigger_constraint_delete
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name _0_test_trigger_delete_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: STATEMENT op: DELETE cnt: 0 trigger_name _0_test_trigger_delete_s_after
|
||||
CREATE TABLE vehicles (
|
||||
vehicle_id INTEGER PRIMARY KEY,
|
||||
vin_number CHAR(17),
|
||||
last_checkup TIMESTAMP
|
||||
);
|
||||
CREATE TABLE color (
|
||||
color_id INTEGER PRIMARY KEY,
|
||||
notes text
|
||||
);
|
||||
CREATE TABLE location (
|
||||
time TIMESTAMP NOT NULL,
|
||||
vehicle_id INTEGER REFERENCES vehicles (vehicle_id),
|
||||
color_id INTEGER, --no reference since gonna populate a hypertable
|
||||
latitude FLOAT,
|
||||
longitude FLOAT
|
||||
);
|
||||
CREATE OR REPLACE FUNCTION create_vehicle_trigger_fn()
|
||||
RETURNS TRIGGER LANGUAGE PLPGSQL AS
|
||||
$BODY$
|
||||
BEGIN
|
||||
INSERT INTO vehicles VALUES(NEW.vehicle_id, NULL, NULL) ON CONFLICT DO NOTHING;
|
||||
RETURN NEW;
|
||||
END
|
||||
$BODY$;
|
||||
CREATE OR REPLACE FUNCTION create_color_trigger_fn()
|
||||
RETURNS TRIGGER LANGUAGE PLPGSQL AS
|
||||
$BODY$
|
||||
BEGIN
|
||||
--test subtxns within triggers
|
||||
BEGIN
|
||||
INSERT INTO color VALUES(NEW.color_id, 'n/a');
|
||||
EXCEPTION WHEN unique_violation THEN
|
||||
-- Nothing to do, just continue
|
||||
END;
|
||||
RETURN NEW;
|
||||
END
|
||||
$BODY$;
|
||||
CREATE TRIGGER create_color_trigger
|
||||
BEFORE INSERT OR UPDATE ON location
|
||||
FOR EACH ROW EXECUTE FUNCTION create_color_trigger_fn();
|
||||
SELECT create_hypertable('location', 'time');
|
||||
create_hypertable
|
||||
-----------------------
|
||||
(2,public,location,t)
|
||||
(1 row)
|
||||
|
||||
--make color also a hypertable
|
||||
SELECT create_hypertable('color', 'color_id', chunk_time_interval=>10);
|
||||
create_hypertable
|
||||
--------------------
|
||||
(3,public,color,t)
|
||||
(1 row)
|
||||
|
||||
-- Test that we can create and use triggers with another user
|
||||
GRANT TRIGGER, INSERT, SELECT, UPDATE ON location TO :ROLE_DEFAULT_PERM_USER_2;
|
||||
GRANT SELECT, INSERT, UPDATE ON color TO :ROLE_DEFAULT_PERM_USER_2;
|
||||
GRANT SELECT, INSERT, UPDATE ON vehicles TO :ROLE_DEFAULT_PERM_USER_2;
|
||||
\c :TEST_DBNAME :ROLE_DEFAULT_PERM_USER_2;
|
||||
CREATE TRIGGER create_vehicle_trigger
|
||||
BEFORE INSERT OR UPDATE ON location
|
||||
FOR EACH ROW EXECUTE FUNCTION create_vehicle_trigger_fn();
|
||||
INSERT INTO location VALUES('2017-01-01 01:02:03', 1, 1, 40.7493226,-73.9771259);
|
||||
INSERT INTO location VALUES('2017-01-01 01:02:04', 1, 20, 24.7493226,-73.9771259);
|
||||
INSERT INTO location VALUES('2017-01-01 01:02:03', 23, 1, 40.7493226,-73.9771269);
|
||||
INSERT INTO location VALUES('2017-01-01 01:02:03', 53, 20, 40.7493226,-73.9771269);
|
||||
UPDATE location SET vehicle_id = 52 WHERE vehicle_id = 53;
|
||||
SELECT * FROM location;
|
||||
time | vehicle_id | color_id | latitude | longitude
|
||||
--------------------------+------------+----------+------------+-------------
|
||||
Sun Jan 01 01:02:03 2017 | 1 | 1 | 40.7493226 | -73.9771259
|
||||
Sun Jan 01 01:02:04 2017 | 1 | 20 | 24.7493226 | -73.9771259
|
||||
Sun Jan 01 01:02:03 2017 | 23 | 1 | 40.7493226 | -73.9771269
|
||||
Sun Jan 01 01:02:03 2017 | 52 | 20 | 40.7493226 | -73.9771269
|
||||
(4 rows)
|
||||
|
||||
SELECT * FROM vehicles;
|
||||
vehicle_id | vin_number | last_checkup
|
||||
------------+------------+--------------
|
||||
1 | |
|
||||
23 | |
|
||||
53 | |
|
||||
52 | |
|
||||
(4 rows)
|
||||
|
||||
SELECT * FROM color;
|
||||
color_id | notes
|
||||
----------+-------
|
||||
1 | n/a
|
||||
20 | n/a
|
||||
(2 rows)
|
||||
|
||||
-- switch back to default user to run some dropping tests
|
||||
\c :TEST_DBNAME :ROLE_DEFAULT_PERM_USER;
|
||||
\set ON_ERROR_STOP 0
|
||||
-- test that disable trigger is disallowed
|
||||
ALTER TABLE location DISABLE TRIGGER create_vehicle_trigger;
|
||||
ERROR: hypertables do not support enabling or disabling triggers.
|
||||
\set ON_ERROR_STOP 1
|
||||
-- test that drop trigger works
|
||||
DROP TRIGGER create_color_trigger ON location;
|
||||
DROP TRIGGER create_vehicle_trigger ON location;
|
||||
-- test that drop trigger doesn't cause leftovers that mean that dropping chunks or hypertables no longer works
|
||||
SELECT count(1) FROM pg_depend d WHERE d.classid = 'pg_trigger'::regclass AND NOT EXISTS (SELECT 1 FROM pg_trigger WHERE oid = d.objid);
|
||||
count
|
||||
-------
|
||||
0
|
||||
(1 row)
|
||||
|
||||
DROP TABLE location;
|
||||
-- test triggers with transition tables
|
||||
-- test creating hypertable from table with triggers with transition tables
|
||||
CREATE TABLE transition_test(time timestamptz NOT NULL);
|
||||
CREATE TRIGGER t1 AFTER INSERT ON transition_test REFERENCING NEW TABLE AS new_trans FOR EACH STATEMENT EXECUTE FUNCTION test_trigger();
|
||||
\set ON_ERROR_STOP 0
|
||||
SELECT create_hypertable('transition_test','time');
|
||||
ERROR: hypertables do not support transition tables in triggers
|
||||
\set ON_ERROR_STOP 1
|
||||
DROP TRIGGER t1 ON transition_test;
|
||||
SELECT create_hypertable('transition_test','time');
|
||||
create_hypertable
|
||||
------------------------------
|
||||
(4,public,transition_test,t)
|
||||
(1 row)
|
||||
|
||||
-- test creating trigger with transition tables on existing hypertable
|
||||
\set ON_ERROR_STOP 0
|
||||
CREATE TRIGGER t2 AFTER INSERT ON transition_test REFERENCING NEW TABLE AS new_trans FOR EACH STATEMENT EXECUTE FUNCTION test_trigger();
|
||||
ERROR: trigger with transition tables not supported on hypertables
|
||||
CREATE TRIGGER t3 AFTER UPDATE ON transition_test REFERENCING NEW TABLE AS new_trans OLD TABLE AS old_trans FOR EACH STATEMENT EXECUTE FUNCTION test_trigger();
|
||||
ERROR: trigger with transition tables not supported on hypertables
|
||||
CREATE TRIGGER t4 AFTER DELETE ON transition_test REFERENCING OLD TABLE AS old_trans FOR EACH STATEMENT EXECUTE FUNCTION test_trigger();
|
||||
ERROR: trigger with transition tables not supported on hypertables
|
||||
CREATE TRIGGER t2 AFTER INSERT ON transition_test REFERENCING NEW TABLE AS new_trans FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
ERROR: trigger with transition tables not supported on hypertables
|
||||
CREATE TRIGGER t3 AFTER UPDATE ON transition_test REFERENCING NEW TABLE AS new_trans OLD TABLE AS old_trans FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
ERROR: trigger with transition tables not supported on hypertables
|
||||
CREATE TRIGGER t4 AFTER DELETE ON transition_test REFERENCING OLD TABLE AS old_trans FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
ERROR: trigger with transition tables not supported on hypertables
|
||||
\set ON_ERROR_STOP 1
|
@ -1,440 +0,0 @@
|
||||
-- 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 TABLE hyper (
|
||||
time BIGINT NOT NULL,
|
||||
device_id TEXT NOT NULL,
|
||||
sensor_1 NUMERIC NULL DEFAULT 1
|
||||
);
|
||||
CREATE OR REPLACE FUNCTION test_trigger()
|
||||
RETURNS TRIGGER LANGUAGE PLPGSQL AS
|
||||
$BODY$
|
||||
DECLARE
|
||||
cnt INTEGER;
|
||||
BEGIN
|
||||
SELECT count(*) INTO cnt FROM hyper;
|
||||
RAISE WARNING 'FIRING trigger when: % level: % op: % cnt: % trigger_name %',
|
||||
tg_when, tg_level, tg_op, cnt, tg_name;
|
||||
|
||||
IF TG_OP = 'DELETE' THEN
|
||||
RETURN OLD;
|
||||
END IF;
|
||||
RETURN NEW;
|
||||
END
|
||||
$BODY$;
|
||||
-- row triggers: BEFORE
|
||||
CREATE TRIGGER _0_test_trigger_insert
|
||||
BEFORE INSERT ON hyper
|
||||
FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER _0_test_trigger_update
|
||||
BEFORE UPDATE ON hyper
|
||||
FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER _0_test_trigger_delete
|
||||
BEFORE delete ON hyper
|
||||
FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER z_test_trigger_all
|
||||
BEFORE INSERT OR UPDATE OR DELETE ON hyper
|
||||
FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
-- row triggers: AFTER
|
||||
CREATE TRIGGER _0_test_trigger_insert_after
|
||||
AFTER INSERT ON hyper
|
||||
FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER _0_test_trigger_insert_after_when_dev1
|
||||
AFTER INSERT ON hyper
|
||||
FOR EACH ROW
|
||||
WHEN (NEW.device_id = 'dev1')
|
||||
EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER _0_test_trigger_update_after
|
||||
AFTER UPDATE ON hyper
|
||||
FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER _0_test_trigger_delete_after
|
||||
AFTER delete ON hyper
|
||||
FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER z_test_trigger_all_after
|
||||
AFTER INSERT OR UPDATE OR DELETE ON hyper
|
||||
FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
-- statement triggers: BEFORE
|
||||
CREATE TRIGGER _0_test_trigger_insert_s_before
|
||||
BEFORE INSERT ON hyper
|
||||
FOR EACH STATEMENT EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER _0_test_trigger_update_s_before
|
||||
BEFORE UPDATE ON hyper
|
||||
FOR EACH STATEMENT EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER _0_test_trigger_delete_s_before
|
||||
BEFORE DELETE ON hyper
|
||||
FOR EACH STATEMENT EXECUTE FUNCTION test_trigger();
|
||||
-- statement triggers: AFTER
|
||||
CREATE TRIGGER _0_test_trigger_insert_s_after
|
||||
AFTER INSERT ON hyper
|
||||
FOR EACH STATEMENT EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER _0_test_trigger_update_s_after
|
||||
AFTER UPDATE ON hyper
|
||||
FOR EACH STATEMENT EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER _0_test_trigger_delete_s_after
|
||||
AFTER DELETE ON hyper
|
||||
FOR EACH STATEMENT EXECUTE FUNCTION test_trigger();
|
||||
-- CONSTRAINT TRIGGER
|
||||
CREATE CONSTRAINT TRIGGER _0_test_trigger_constraint_insert
|
||||
AFTER INSERT ON hyper FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
CREATE CONSTRAINT TRIGGER _0_test_trigger_constraint_update
|
||||
AFTER UPDATE ON hyper FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
CREATE CONSTRAINT TRIGGER _0_test_trigger_constraint_delete
|
||||
AFTER DELETE ON hyper FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
SELECT * FROM create_hypertable('hyper', 'time', chunk_time_interval => 10);
|
||||
hypertable_id | schema_name | table_name | created
|
||||
---------------+-------------+------------+---------
|
||||
1 | public | hyper | t
|
||||
(1 row)
|
||||
|
||||
--test triggers before create_hypertable
|
||||
INSERT INTO hyper(time, device_id,sensor_1) VALUES
|
||||
(1257987600000000000, 'dev1', 1);
|
||||
WARNING: FIRING trigger when: BEFORE level: STATEMENT op: INSERT cnt: 0 trigger_name _0_test_trigger_insert_s_before
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: INSERT cnt: 0 trigger_name _0_test_trigger_insert
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: INSERT cnt: 0 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 1 trigger_name _0_test_trigger_constraint_insert
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 1 trigger_name _0_test_trigger_insert_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 1 trigger_name _0_test_trigger_insert_after_when_dev1
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 1 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: STATEMENT op: INSERT cnt: 1 trigger_name _0_test_trigger_insert_s_after
|
||||
INSERT INTO hyper(time, device_id,sensor_1) VALUES
|
||||
(1257987700000000000, 'dev2', 1), (1257987800000000000, 'dev2', 1);
|
||||
WARNING: FIRING trigger when: BEFORE level: STATEMENT op: INSERT cnt: 1 trigger_name _0_test_trigger_insert_s_before
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: INSERT cnt: 1 trigger_name _0_test_trigger_insert
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: INSERT cnt: 1 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: INSERT cnt: 2 trigger_name _0_test_trigger_insert
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: INSERT cnt: 2 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 3 trigger_name _0_test_trigger_constraint_insert
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 3 trigger_name _0_test_trigger_insert_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 3 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 3 trigger_name _0_test_trigger_constraint_insert
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 3 trigger_name _0_test_trigger_insert_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 3 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: STATEMENT op: INSERT cnt: 3 trigger_name _0_test_trigger_insert_s_after
|
||||
UPDATE hyper SET sensor_1 = 2;
|
||||
WARNING: FIRING trigger when: BEFORE level: STATEMENT op: UPDATE cnt: 3 trigger_name _0_test_trigger_update_s_before
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_update
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: UPDATE cnt: 3 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_update
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: UPDATE cnt: 3 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_update
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: UPDATE cnt: 3 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_constraint_update
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_update_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_constraint_update
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_update_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_constraint_update
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_update_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: STATEMENT op: UPDATE cnt: 3 trigger_name _0_test_trigger_update_s_after
|
||||
DELETE FROM hyper;
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: DELETE cnt: 3 trigger_name _0_test_trigger_delete
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: DELETE cnt: 3 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: DELETE cnt: 2 trigger_name _0_test_trigger_delete
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: DELETE cnt: 2 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: DELETE cnt: 1 trigger_name _0_test_trigger_delete
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: DELETE cnt: 1 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name _0_test_trigger_constraint_delete
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name _0_test_trigger_delete_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name _0_test_trigger_constraint_delete
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name _0_test_trigger_delete_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name _0_test_trigger_constraint_delete
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name _0_test_trigger_delete_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name z_test_trigger_all_after
|
||||
--test drop trigger
|
||||
DROP TRIGGER _0_test_trigger_insert ON hyper;
|
||||
DROP TRIGGER _0_test_trigger_insert_s_before ON hyper;
|
||||
DROP TRIGGER _0_test_trigger_insert_after ON hyper;
|
||||
DROP TRIGGER _0_test_trigger_insert_s_after ON hyper;
|
||||
INSERT INTO hyper(time, device_id,sensor_1) VALUES
|
||||
(1257987600000000000, 'dev1', 1);
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: INSERT cnt: 0 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 1 trigger_name _0_test_trigger_constraint_insert
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 1 trigger_name _0_test_trigger_insert_after_when_dev1
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 1 trigger_name z_test_trigger_all_after
|
||||
INSERT INTO hyper(time, device_id,sensor_1) VALUES
|
||||
(1257987700000000000, 'dev2', 1), (1257987800000000000, 'dev2', 1);
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: INSERT cnt: 1 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: INSERT cnt: 2 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 3 trigger_name _0_test_trigger_constraint_insert
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 3 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 3 trigger_name _0_test_trigger_constraint_insert
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 3 trigger_name z_test_trigger_all_after
|
||||
DROP TRIGGER _0_test_trigger_update ON hyper;
|
||||
DROP TRIGGER _0_test_trigger_update_s_before ON hyper;
|
||||
DROP TRIGGER _0_test_trigger_update_after ON hyper;
|
||||
DROP TRIGGER _0_test_trigger_update_s_after ON hyper;
|
||||
UPDATE hyper SET sensor_1 = 2;
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: UPDATE cnt: 3 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: UPDATE cnt: 3 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: UPDATE cnt: 3 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_constraint_update
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_constraint_update
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_constraint_update
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name z_test_trigger_all_after
|
||||
DROP TRIGGER _0_test_trigger_delete ON hyper;
|
||||
DROP TRIGGER _0_test_trigger_delete_s_before ON hyper;
|
||||
DROP TRIGGER _0_test_trigger_delete_after ON hyper;
|
||||
DROP TRIGGER _0_test_trigger_delete_s_after ON hyper;
|
||||
DELETE FROM hyper;
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: DELETE cnt: 3 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: DELETE cnt: 2 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: DELETE cnt: 1 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name _0_test_trigger_constraint_delete
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name _0_test_trigger_constraint_delete
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name _0_test_trigger_constraint_delete
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name z_test_trigger_all_after
|
||||
DROP TRIGGER z_test_trigger_all ON hyper;
|
||||
DROP TRIGGER z_test_trigger_all_after ON hyper;
|
||||
--test create trigger on hypertable
|
||||
-- row triggers: BEFORE
|
||||
CREATE TRIGGER _0_test_trigger_insert
|
||||
BEFORE INSERT ON hyper
|
||||
FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER _0_test_trigger_update
|
||||
BEFORE UPDATE ON hyper
|
||||
FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER _0_test_trigger_delete
|
||||
BEFORE delete ON hyper
|
||||
FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER z_test_trigger_all
|
||||
BEFORE INSERT OR UPDATE OR DELETE ON hyper
|
||||
FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
-- row triggers: AFTER
|
||||
CREATE TRIGGER _0_test_trigger_insert_after
|
||||
AFTER INSERT ON hyper
|
||||
FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER _0_test_trigger_update_after
|
||||
AFTER UPDATE ON hyper
|
||||
FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER _0_test_trigger_delete_after
|
||||
AFTER delete ON hyper
|
||||
FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER z_test_trigger_all_after
|
||||
AFTER INSERT OR UPDATE OR DELETE ON hyper
|
||||
FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
-- statement triggers: BEFORE
|
||||
CREATE TRIGGER _0_test_trigger_insert_s_before
|
||||
BEFORE INSERT ON hyper
|
||||
FOR EACH STATEMENT EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER _0_test_trigger_update_s_before
|
||||
BEFORE UPDATE ON hyper
|
||||
FOR EACH STATEMENT EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER _0_test_trigger_delete_s_before
|
||||
BEFORE DELETE ON hyper
|
||||
FOR EACH STATEMENT EXECUTE FUNCTION test_trigger();
|
||||
-- statement triggers: AFTER
|
||||
CREATE TRIGGER _0_test_trigger_insert_s_after
|
||||
AFTER INSERT ON hyper
|
||||
FOR EACH STATEMENT EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER _0_test_trigger_update_s_after
|
||||
AFTER UPDATE ON hyper
|
||||
FOR EACH STATEMENT EXECUTE FUNCTION test_trigger();
|
||||
CREATE TRIGGER _0_test_trigger_delete_s_after
|
||||
AFTER DELETE ON hyper
|
||||
FOR EACH STATEMENT EXECUTE FUNCTION test_trigger();
|
||||
INSERT INTO hyper(time, device_id,sensor_1) VALUES
|
||||
(1257987600000000000, 'dev1', 1);
|
||||
WARNING: FIRING trigger when: BEFORE level: STATEMENT op: INSERT cnt: 0 trigger_name _0_test_trigger_insert_s_before
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: INSERT cnt: 0 trigger_name _0_test_trigger_insert
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: INSERT cnt: 0 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 1 trigger_name _0_test_trigger_constraint_insert
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 1 trigger_name _0_test_trigger_insert_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 1 trigger_name _0_test_trigger_insert_after_when_dev1
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 1 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: STATEMENT op: INSERT cnt: 1 trigger_name _0_test_trigger_insert_s_after
|
||||
INSERT INTO hyper(time, device_id,sensor_1) VALUES
|
||||
(1257987700000000000, 'dev2', 1), (1257987800000000000, 'dev2', 1);
|
||||
WARNING: FIRING trigger when: BEFORE level: STATEMENT op: INSERT cnt: 1 trigger_name _0_test_trigger_insert_s_before
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: INSERT cnt: 1 trigger_name _0_test_trigger_insert
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: INSERT cnt: 1 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: INSERT cnt: 2 trigger_name _0_test_trigger_insert
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: INSERT cnt: 2 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 3 trigger_name _0_test_trigger_constraint_insert
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 3 trigger_name _0_test_trigger_insert_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 3 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 3 trigger_name _0_test_trigger_constraint_insert
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 3 trigger_name _0_test_trigger_insert_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: INSERT cnt: 3 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: STATEMENT op: INSERT cnt: 3 trigger_name _0_test_trigger_insert_s_after
|
||||
UPDATE hyper SET sensor_1 = 2;
|
||||
WARNING: FIRING trigger when: BEFORE level: STATEMENT op: UPDATE cnt: 3 trigger_name _0_test_trigger_update_s_before
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_update
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: UPDATE cnt: 3 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_update
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: UPDATE cnt: 3 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_update
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: UPDATE cnt: 3 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_constraint_update
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_update_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_constraint_update
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_update_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_constraint_update
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name _0_test_trigger_update_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: UPDATE cnt: 3 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: STATEMENT op: UPDATE cnt: 3 trigger_name _0_test_trigger_update_s_after
|
||||
DELETE FROM hyper;
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: DELETE cnt: 3 trigger_name _0_test_trigger_delete
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: DELETE cnt: 3 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: DELETE cnt: 2 trigger_name _0_test_trigger_delete
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: DELETE cnt: 2 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: DELETE cnt: 1 trigger_name _0_test_trigger_delete
|
||||
WARNING: FIRING trigger when: BEFORE level: ROW op: DELETE cnt: 1 trigger_name z_test_trigger_all
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name _0_test_trigger_constraint_delete
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name _0_test_trigger_delete_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name _0_test_trigger_constraint_delete
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name _0_test_trigger_delete_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name z_test_trigger_all_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name _0_test_trigger_constraint_delete
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name _0_test_trigger_delete_after
|
||||
WARNING: FIRING trigger when: AFTER level: ROW op: DELETE cnt: 0 trigger_name z_test_trigger_all_after
|
||||
CREATE TABLE vehicles (
|
||||
vehicle_id INTEGER PRIMARY KEY,
|
||||
vin_number CHAR(17),
|
||||
last_checkup TIMESTAMP
|
||||
);
|
||||
CREATE TABLE color (
|
||||
color_id INTEGER PRIMARY KEY,
|
||||
notes text
|
||||
);
|
||||
CREATE TABLE location (
|
||||
time TIMESTAMP NOT NULL,
|
||||
vehicle_id INTEGER REFERENCES vehicles (vehicle_id),
|
||||
color_id INTEGER, --no reference since gonna populate a hypertable
|
||||
latitude FLOAT,
|
||||
longitude FLOAT
|
||||
);
|
||||
CREATE OR REPLACE FUNCTION create_vehicle_trigger_fn()
|
||||
RETURNS TRIGGER LANGUAGE PLPGSQL AS
|
||||
$BODY$
|
||||
BEGIN
|
||||
INSERT INTO vehicles VALUES(NEW.vehicle_id, NULL, NULL) ON CONFLICT DO NOTHING;
|
||||
RETURN NEW;
|
||||
END
|
||||
$BODY$;
|
||||
CREATE OR REPLACE FUNCTION create_color_trigger_fn()
|
||||
RETURNS TRIGGER LANGUAGE PLPGSQL AS
|
||||
$BODY$
|
||||
BEGIN
|
||||
--test subtxns within triggers
|
||||
BEGIN
|
||||
INSERT INTO color VALUES(NEW.color_id, 'n/a');
|
||||
EXCEPTION WHEN unique_violation THEN
|
||||
-- Nothing to do, just continue
|
||||
END;
|
||||
RETURN NEW;
|
||||
END
|
||||
$BODY$;
|
||||
CREATE TRIGGER create_color_trigger
|
||||
BEFORE INSERT OR UPDATE ON location
|
||||
FOR EACH ROW EXECUTE FUNCTION create_color_trigger_fn();
|
||||
SELECT create_hypertable('location', 'time');
|
||||
create_hypertable
|
||||
-----------------------
|
||||
(2,public,location,t)
|
||||
(1 row)
|
||||
|
||||
--make color also a hypertable
|
||||
SELECT create_hypertable('color', 'color_id', chunk_time_interval=>10);
|
||||
create_hypertable
|
||||
--------------------
|
||||
(3,public,color,t)
|
||||
(1 row)
|
||||
|
||||
-- Test that we can create and use triggers with another user
|
||||
GRANT TRIGGER, INSERT, SELECT, UPDATE ON location TO :ROLE_DEFAULT_PERM_USER_2;
|
||||
GRANT SELECT, INSERT, UPDATE ON color TO :ROLE_DEFAULT_PERM_USER_2;
|
||||
GRANT SELECT, INSERT, UPDATE ON vehicles TO :ROLE_DEFAULT_PERM_USER_2;
|
||||
\c :TEST_DBNAME :ROLE_DEFAULT_PERM_USER_2;
|
||||
CREATE TRIGGER create_vehicle_trigger
|
||||
BEFORE INSERT OR UPDATE ON location
|
||||
FOR EACH ROW EXECUTE FUNCTION create_vehicle_trigger_fn();
|
||||
INSERT INTO location VALUES('2017-01-01 01:02:03', 1, 1, 40.7493226,-73.9771259);
|
||||
INSERT INTO location VALUES('2017-01-01 01:02:04', 1, 20, 24.7493226,-73.9771259);
|
||||
INSERT INTO location VALUES('2017-01-01 01:02:03', 23, 1, 40.7493226,-73.9771269);
|
||||
INSERT INTO location VALUES('2017-01-01 01:02:03', 53, 20, 40.7493226,-73.9771269);
|
||||
UPDATE location SET vehicle_id = 52 WHERE vehicle_id = 53;
|
||||
SELECT * FROM location;
|
||||
time | vehicle_id | color_id | latitude | longitude
|
||||
--------------------------+------------+----------+------------+-------------
|
||||
Sun Jan 01 01:02:03 2017 | 1 | 1 | 40.7493226 | -73.9771259
|
||||
Sun Jan 01 01:02:04 2017 | 1 | 20 | 24.7493226 | -73.9771259
|
||||
Sun Jan 01 01:02:03 2017 | 23 | 1 | 40.7493226 | -73.9771269
|
||||
Sun Jan 01 01:02:03 2017 | 52 | 20 | 40.7493226 | -73.9771269
|
||||
(4 rows)
|
||||
|
||||
SELECT * FROM vehicles;
|
||||
vehicle_id | vin_number | last_checkup
|
||||
------------+------------+--------------
|
||||
1 | |
|
||||
23 | |
|
||||
53 | |
|
||||
52 | |
|
||||
(4 rows)
|
||||
|
||||
SELECT * FROM color;
|
||||
color_id | notes
|
||||
----------+-------
|
||||
1 | n/a
|
||||
20 | n/a
|
||||
(2 rows)
|
||||
|
||||
-- switch back to default user to run some dropping tests
|
||||
\c :TEST_DBNAME :ROLE_DEFAULT_PERM_USER;
|
||||
\set ON_ERROR_STOP 0
|
||||
-- test that disable trigger is disallowed
|
||||
ALTER TABLE location DISABLE TRIGGER create_vehicle_trigger;
|
||||
ERROR: hypertables do not support enabling or disabling triggers.
|
||||
\set ON_ERROR_STOP 1
|
||||
-- test that drop trigger works
|
||||
DROP TRIGGER create_color_trigger ON location;
|
||||
DROP TRIGGER create_vehicle_trigger ON location;
|
||||
-- test that drop trigger doesn't cause leftovers that mean that dropping chunks or hypertables no longer works
|
||||
SELECT count(1) FROM pg_depend d WHERE d.classid = 'pg_trigger'::regclass AND NOT EXISTS (SELECT 1 FROM pg_trigger WHERE oid = d.objid);
|
||||
count
|
||||
-------
|
||||
0
|
||||
(1 row)
|
||||
|
||||
DROP TABLE location;
|
||||
-- test triggers with transition tables
|
||||
-- test creating hypertable from table with triggers with transition tables
|
||||
CREATE TABLE transition_test(time timestamptz NOT NULL);
|
||||
CREATE TRIGGER t1 AFTER INSERT ON transition_test REFERENCING NEW TABLE AS new_trans FOR EACH STATEMENT EXECUTE FUNCTION test_trigger();
|
||||
\set ON_ERROR_STOP 0
|
||||
SELECT create_hypertable('transition_test','time');
|
||||
ERROR: hypertables do not support transition tables in triggers
|
||||
\set ON_ERROR_STOP 1
|
||||
DROP TRIGGER t1 ON transition_test;
|
||||
SELECT create_hypertable('transition_test','time');
|
||||
create_hypertable
|
||||
------------------------------
|
||||
(4,public,transition_test,t)
|
||||
(1 row)
|
||||
|
||||
-- test creating trigger with transition tables on existing hypertable
|
||||
\set ON_ERROR_STOP 0
|
||||
CREATE TRIGGER t2 AFTER INSERT ON transition_test REFERENCING NEW TABLE AS new_trans FOR EACH STATEMENT EXECUTE FUNCTION test_trigger();
|
||||
ERROR: trigger with transition tables not supported on hypertables
|
||||
CREATE TRIGGER t3 AFTER UPDATE ON transition_test REFERENCING NEW TABLE AS new_trans OLD TABLE AS old_trans FOR EACH STATEMENT EXECUTE FUNCTION test_trigger();
|
||||
ERROR: trigger with transition tables not supported on hypertables
|
||||
CREATE TRIGGER t4 AFTER DELETE ON transition_test REFERENCING OLD TABLE AS old_trans FOR EACH STATEMENT EXECUTE FUNCTION test_trigger();
|
||||
ERROR: trigger with transition tables not supported on hypertables
|
||||
CREATE TRIGGER t2 AFTER INSERT ON transition_test REFERENCING NEW TABLE AS new_trans FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
ERROR: trigger with transition tables not supported on hypertables
|
||||
CREATE TRIGGER t3 AFTER UPDATE ON transition_test REFERENCING NEW TABLE AS new_trans OLD TABLE AS old_trans FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
ERROR: trigger with transition tables not supported on hypertables
|
||||
CREATE TRIGGER t4 AFTER DELETE ON transition_test REFERENCING OLD TABLE AS old_trans FOR EACH ROW EXECUTE FUNCTION test_trigger();
|
||||
ERROR: trigger with transition tables not supported on hypertables
|
||||
\set ON_ERROR_STOP 1
|
1
test/sql/.gitignore
vendored
1
test/sql/.gitignore
vendored
@ -16,5 +16,4 @@
|
||||
/plan_hypertable_inline-*.sql
|
||||
/plan_ordered_append-*.sql
|
||||
/rowsecurity-*.sql
|
||||
/triggers-*.sql
|
||||
/update-*.sql
|
||||
|
@ -46,6 +46,7 @@ set(TEST_FILES
|
||||
tableam.sql
|
||||
tablespace.sql
|
||||
timestamp.sql
|
||||
triggers.sql
|
||||
truncate.sql
|
||||
upsert.sql
|
||||
util.sql
|
||||
@ -66,7 +67,6 @@ set(TEST_TEMPLATES
|
||||
plan_expand_hypertable.sql.in
|
||||
plan_hypertable_inline.sql.in
|
||||
rowsecurity.sql.in
|
||||
triggers.sql.in
|
||||
update.sql.in)
|
||||
|
||||
# tests that fail or are unreliable when run in parallel bgw tests need to run
|
||||
|
Loading…
x
Reference in New Issue
Block a user