mirror of
https://github.com/postgres/postgres.git
synced 2025-07-02 09:02:37 +03:00
Don't permit transition tables with TRUNCATE triggers.
Prior to this prohibition, such a trigger caused a crash. Thomas Munro, per a report from Neha Sharma. I added a regression test. Discussion: http://postgr.es/m/CAEepm=0VR5W-N38eTkO_FqJbGqQ_ykbBRmzmvHyxDhy1p=0Csw@mail.gmail.com
This commit is contained in:
@ -366,6 +366,11 @@ CreateTrigger(CreateTrigStmt *stmt, const char *queryString,
|
|||||||
(errcode(ERRCODE_INVALID_OBJECT_DEFINITION),
|
(errcode(ERRCODE_INVALID_OBJECT_DEFINITION),
|
||||||
errmsg("transition table name can only be specified for an AFTER trigger")));
|
errmsg("transition table name can only be specified for an AFTER trigger")));
|
||||||
|
|
||||||
|
if (TRIGGER_FOR_TRUNCATE(tgtype))
|
||||||
|
ereport(ERROR,
|
||||||
|
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
||||||
|
errmsg("TRUNCATE triggers with transition tables are not supported")));
|
||||||
|
|
||||||
if (tt->isNew)
|
if (tt->isNew)
|
||||||
{
|
{
|
||||||
if (!(TRIGGER_FOR_INSERT(tgtype) ||
|
if (!(TRIGGER_FOR_INSERT(tgtype) ||
|
||||||
|
@ -5943,6 +5943,14 @@ BEGIN
|
|||||||
RETURN NULL;
|
RETURN NULL;
|
||||||
END;
|
END;
|
||||||
$$;
|
$$;
|
||||||
|
-- should fail, TRUNCATE is not compatible with transition tables
|
||||||
|
CREATE TRIGGER alter_table_under_transition_tables_upd_trigger
|
||||||
|
AFTER TRUNCATE OR UPDATE ON alter_table_under_transition_tables
|
||||||
|
REFERENCING OLD TABLE AS d NEW TABLE AS i
|
||||||
|
FOR EACH STATEMENT EXECUTE PROCEDURE
|
||||||
|
alter_table_under_transition_tables_upd_func();
|
||||||
|
ERROR: TRUNCATE triggers with transition tables are not supported
|
||||||
|
-- should work
|
||||||
CREATE TRIGGER alter_table_under_transition_tables_upd_trigger
|
CREATE TRIGGER alter_table_under_transition_tables_upd_trigger
|
||||||
AFTER UPDATE ON alter_table_under_transition_tables
|
AFTER UPDATE ON alter_table_under_transition_tables
|
||||||
REFERENCING OLD TABLE AS d NEW TABLE AS i
|
REFERENCING OLD TABLE AS d NEW TABLE AS i
|
||||||
|
@ -4736,6 +4736,14 @@ BEGIN
|
|||||||
END;
|
END;
|
||||||
$$;
|
$$;
|
||||||
|
|
||||||
|
-- should fail, TRUNCATE is not compatible with transition tables
|
||||||
|
CREATE TRIGGER alter_table_under_transition_tables_upd_trigger
|
||||||
|
AFTER TRUNCATE OR UPDATE ON alter_table_under_transition_tables
|
||||||
|
REFERENCING OLD TABLE AS d NEW TABLE AS i
|
||||||
|
FOR EACH STATEMENT EXECUTE PROCEDURE
|
||||||
|
alter_table_under_transition_tables_upd_func();
|
||||||
|
|
||||||
|
-- should work
|
||||||
CREATE TRIGGER alter_table_under_transition_tables_upd_trigger
|
CREATE TRIGGER alter_table_under_transition_tables_upd_trigger
|
||||||
AFTER UPDATE ON alter_table_under_transition_tables
|
AFTER UPDATE ON alter_table_under_transition_tables
|
||||||
REFERENCING OLD TABLE AS d NEW TABLE AS i
|
REFERENCING OLD TABLE AS d NEW TABLE AS i
|
||||||
|
Reference in New Issue
Block a user