diff --git a/.unreleased/pr_7488 b/.unreleased/pr_7488 new file mode 100644 index 000000000..f8050f7eb --- /dev/null +++ b/.unreleased/pr_7488 @@ -0,0 +1 @@ +Fixes: #7488 Emit error for transition table trigger on chunks diff --git a/src/process_utility.c b/src/process_utility.c index 7cddcff23..039a134ee 100644 --- a/src/process_utility.c +++ b/src/process_utility.c @@ -4452,6 +4452,12 @@ process_create_trigger_start(ProcessUtilityArgs *args) (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), errmsg("triggers are not supported on continuous aggregate"))); + if (stmt->transitionRels) + if (ts_chunk_get_by_relid(relid, false) != NULL) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg( + "trigger with transition tables not supported on hypertable chunks"))); return DDL_CONTINUE; } diff --git a/test/expected/triggers.out b/test/expected/triggers.out index 8d11999dd..56bc3ba92 100644 --- a/test/expected/triggers.out +++ b/test/expected/triggers.out @@ -428,6 +428,9 @@ SELECT create_hypertable('transition_test','time'); (4,public,transition_test,t) (1 row) +-- Insert some rows to create a chunk +INSERT INTO transition_test values ('2020-01-10'); +SELECT chunk FROM show_chunks('transition_test') tbl(chunk) limit 1 \gset -- 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(); @@ -436,6 +439,12 @@ CREATE TRIGGER t3 AFTER UPDATE ON transition_test REFERENCING NEW TABLE AS new_t 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 :chunk REFERENCING NEW TABLE AS new_trans FOR EACH STATEMENT EXECUTE FUNCTION test_trigger(); +ERROR: trigger with transition tables not supported on hypertable chunks +CREATE TRIGGER t3 AFTER UPDATE ON :chunk 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 hypertable chunks +CREATE TRIGGER t4 AFTER DELETE ON :chunk REFERENCING OLD TABLE AS old_trans FOR EACH STATEMENT EXECUTE FUNCTION test_trigger(); +ERROR: trigger with transition tables not supported on hypertable chunks 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(); diff --git a/test/sql/triggers.sql b/test/sql/triggers.sql index 1904f27f1..949e1e5fd 100644 --- a/test/sql/triggers.sql +++ b/test/sql/triggers.sql @@ -313,11 +313,18 @@ SELECT create_hypertable('transition_test','time'); DROP TRIGGER t1 ON transition_test; SELECT create_hypertable('transition_test','time'); +-- Insert some rows to create a chunk +INSERT INTO transition_test values ('2020-01-10'); +SELECT chunk FROM show_chunks('transition_test') tbl(chunk) limit 1 \gset + -- 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(); 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(); CREATE TRIGGER t4 AFTER DELETE ON transition_test REFERENCING OLD TABLE AS old_trans FOR EACH STATEMENT EXECUTE FUNCTION test_trigger(); +CREATE TRIGGER t2 AFTER INSERT ON :chunk REFERENCING NEW TABLE AS new_trans FOR EACH STATEMENT EXECUTE FUNCTION test_trigger(); +CREATE TRIGGER t3 AFTER UPDATE ON :chunk REFERENCING NEW TABLE AS new_trans OLD TABLE AS old_trans FOR EACH STATEMENT EXECUTE FUNCTION test_trigger(); +CREATE TRIGGER t4 AFTER DELETE ON :chunk REFERENCING OLD TABLE AS old_trans FOR EACH STATEMENT EXECUTE FUNCTION test_trigger(); CREATE TRIGGER t2 AFTER INSERT ON transition_test REFERENCING NEW TABLE AS new_trans FOR EACH ROW EXECUTE FUNCTION test_trigger(); 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();