diff options
author | Fujii Masao <fujii@postgresql.org> | 2022-07-12 09:18:02 +0900 |
---|---|---|
committer | Fujii Masao <fujii@postgresql.org> | 2022-07-12 09:18:02 +0900 |
commit | 3b00a944a9b3847fb02dae7c9ea62fe0b211b396 (patch) | |
tree | a2abdd3d3fe79c4ac2133d2933f01d9ecc0d5bfa /contrib/postgres_fdw | |
parent | 14168d3c62fa90f1ec447f873f0e4df16a57a717 (diff) |
Support TRUNCATE triggers on foreign tables.
Now some foreign data wrappers support TRUNCATE command.
So it's useful to support TRUNCATE triggers on foreign tables for
audit logging or for preventing undesired truncation.
Author: Yugo Nagata
Reviewed-by: Fujii Masao, Ian Lawrence Barwick
Discussion: https://postgr.es/m/20220630193848.5b02e0d6076b86617a915682@sraoss.co.jp
Diffstat (limited to 'contrib/postgres_fdw')
-rw-r--r-- | contrib/postgres_fdw/expected/postgres_fdw.out | 9 | ||||
-rw-r--r-- | contrib/postgres_fdw/sql/postgres_fdw.sql | 5 |
2 files changed, 9 insertions, 5 deletions
diff --git a/contrib/postgres_fdw/expected/postgres_fdw.out b/contrib/postgres_fdw/expected/postgres_fdw.out index 44457f930c2..5f2ef88cf38 100644 --- a/contrib/postgres_fdw/expected/postgres_fdw.out +++ b/contrib/postgres_fdw/expected/postgres_fdw.out @@ -6732,9 +6732,9 @@ BEGIN TG_ARGV[0], TG_OP, TG_WHEN, TG_LEVEL; RETURN NULL; END;$$; -CREATE TRIGGER trig_stmt_before BEFORE DELETE OR INSERT OR UPDATE ON rem1 +CREATE TRIGGER trig_stmt_before BEFORE DELETE OR INSERT OR UPDATE OR TRUNCATE ON rem1 FOR EACH STATEMENT EXECUTE PROCEDURE trigger_func(); -CREATE TRIGGER trig_stmt_after AFTER DELETE OR INSERT OR UPDATE ON rem1 +CREATE TRIGGER trig_stmt_after AFTER DELETE OR INSERT OR UPDATE OR TRUNCATE ON rem1 FOR EACH STATEMENT EXECUTE PROCEDURE trigger_func(); CREATE OR REPLACE FUNCTION trigger_data() RETURNS trigger LANGUAGE plpgsql AS $$ @@ -6821,6 +6821,9 @@ NOTICE: OLD: (1,update),NEW: (1,updateupdate) NOTICE: trig_row_after(23, skidoo) AFTER ROW UPDATE ON rem1 NOTICE: OLD: (1,update),NEW: (1,updateupdate) NOTICE: trigger_func(<NULL>) called: action = UPDATE, when = AFTER, level = STATEMENT +truncate rem1; +NOTICE: trigger_func(<NULL>) called: action = TRUNCATE, when = BEFORE, level = STATEMENT +NOTICE: trigger_func(<NULL>) called: action = TRUNCATE, when = AFTER, level = STATEMENT -- cleanup DROP TRIGGER trig_row_before ON rem1; DROP TRIGGER trig_row_after ON rem1; @@ -7087,7 +7090,7 @@ NOTICE: trig_row_after(23, skidoo) AFTER ROW INSERT ON rem1 NOTICE: NEW: (13,"test triggered !") ctid -------- - (0,32) + (0,25) (1 row) -- cleanup diff --git a/contrib/postgres_fdw/sql/postgres_fdw.sql b/contrib/postgres_fdw/sql/postgres_fdw.sql index 92d12120272..ae1fc8f58be 100644 --- a/contrib/postgres_fdw/sql/postgres_fdw.sql +++ b/contrib/postgres_fdw/sql/postgres_fdw.sql @@ -1595,9 +1595,9 @@ BEGIN RETURN NULL; END;$$; -CREATE TRIGGER trig_stmt_before BEFORE DELETE OR INSERT OR UPDATE ON rem1 +CREATE TRIGGER trig_stmt_before BEFORE DELETE OR INSERT OR UPDATE OR TRUNCATE ON rem1 FOR EACH STATEMENT EXECUTE PROCEDURE trigger_func(); -CREATE TRIGGER trig_stmt_after AFTER DELETE OR INSERT OR UPDATE ON rem1 +CREATE TRIGGER trig_stmt_after AFTER DELETE OR INSERT OR UPDATE OR TRUNCATE ON rem1 FOR EACH STATEMENT EXECUTE PROCEDURE trigger_func(); CREATE OR REPLACE FUNCTION trigger_data() RETURNS trigger @@ -1652,6 +1652,7 @@ delete from rem1; insert into rem1 values(1,'insert'); update rem1 set f2 = 'update' where f1 = 1; update rem1 set f2 = f2 || f2; +truncate rem1; -- cleanup |