However if you add columns to your subtables (which is usually the case for adding events by type) you will need to insert into the correct table.
You can enforce this by making it so you can never insert into the parent table
-- FORCE programmatic dispatch to table (v9.2).
ALTER TABLE event ADD CONSTRAINT event_no_insert CHECK (false) no inherit;
Now you have to insert in the chid tables. This requires business logic on your end.As far as refactoring goes the typically approach is to create the new tables and insert the data into them and then do a name swap and then add the check constraints.