Stack Exchange network consists of 183 Q&A communities including Stack Overflow, the largest, most trusted online community for developers to learn, share their knowledge, and build their careers.
Have you looked into partitioning (is that what you mean by "child tables")? This would physically cluster the rows by category, and the vacuum would probably be more efficient because it would target only the tables that have changed. Multiple updates of different categories would be deconflicted also. I can't really comment further as I have no hands on experience of pg partitioning, but if it were Oracle then this would be almost a text book case.
Is there a pattern to the batches? For example, that each one is entirely for a particular "category" (which you mention in the question). If so, how many categories are there in total, and how many rows per category?
Maybe not a direct answer, but instead of storing AVG, consider storing both SUM(score) and COUNT(*), giving you total_score and score_count. Those are then aggregatable and an average can then be calculated from them with sum(total_score) / sum(score_count), so you have a more flexible solution that can provide averages at different granularities.
Be very sure that the objects that you are planning on deleting were actually created by the script. If you tried to created a table called SEQ$ then it would have failed, because one already exists under the SYS schema. You would definitely not want to drop it. Check using the DBA_OBJECTS view, and look at the CREATED column to check. On a cheery note, I've worked at some places where a mistake like this would have got you fired.