in a postgres
database, have table base1
that is the base table for view view1
.
if a column in base1
is created, dropped or renamed, I would like to recreate the view view1
with a ddl trigger.
create event trigger base1_views
on ddl_command_end
when tag in( 'ALTER TABLE' )
execute procedure base1_views_fn();
create function base1_views_fn() returns void as $$
declare
buf varchar;
begin
-- is table being altered = 'base'?
-- add, drop or renaming a column?
buf = 'drop view view1';
execute buf;
buf = 'create view view1 as select * from base1 where ...';
execute buf;
end;
$$ language 'plpgsql';
within the function base1_views_fn()
, how do we obtain the table name and whether we are changing columns?
The variables available to plpgsql in a trigger are defined here:
http://www.postgresql.org/docs/9.3/static/plpgsql-trigger.html#PLPGSQL-EVENT-TRIGGER-EXAMPLE
What I can't tell from the text is how many 'event' variables there are. Certainly there are two:
TG_EVENT
Data type text; a string representing the event the trigger is fired for.
TG_TAG
Data type text; variable that contains the command tag for which the trigger is fired.
You can print these in your function to see if they contain the table information you are looking for. The documentation shows a bunch of other variables that are for regular events. I don't know if those will help, but, perhaps TG_TABLE_NAME is set?
same issue addressed here: How to get SQL text from Postgres event trigger
bottom line, as of now, wait until more features are added to EVENT TRIGGER in future releases
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With