when you say delete everything do you also mean tags too?
btw your table for the join could be rewritten as this:
create table post_tag (post_id int references post on delete cascade, tag_id int references tag on delete cascade, primary key (post_id, tag_id));
@dharrigan yes, but its just curiousity - I think the real answer is the trigger