This is what we did:
0. BEGIN;
1. ALTER TABLE ... SET WITHOUT OIDS
2. A bunch of things are selected out of this table and inserted into
another (using INSERT ... SELECT)
3. An index is created on a timestamp field on this table
4. Then there's an update on a related table, that selects stuff from
this table.
5. Renames a column
6. Drops a constraint
7. Adds a foreign key
8. Drops 8 columns
9. Drops 2 indexes
10. Drops 3 triggers
11. Then a tsearch 'txtidx' field is updated, and then cancelled halfway
through
12. ROLLBACK;
13. VACUUM FULL forums_posts;
Then we get thousands of these:
WARNING: relation "forums_posts" TID 22763/10: OID is invalid
WARNING: relation "forums_posts" TID 22763/11: OID is invalid
WARNING: relation "forums_posts" TID 22763/12: OID is invalid
WARNING: relation "forums_posts" TID 22763/13: OID is invalid
WARNING: relation "forums_posts" TID 22763/14: OID is invalid
WARNING: relation "forums_posts" TID 22763/15: OID is invalid
WARNING: relation "forums_posts" TID 22763/16: OID is invalid
WARNING: relation "forums_posts" TID 22763/17: OID is invalid
WARNING: relation "forums_posts" TID 22764/1: OID is invalid
WARNING: relation "forums_posts" TID 22764/2: OID is invalid
WARNING: relation "forums_posts" TID 22764/3: OID is invalid
WARNING: relation "forums_posts" TID 22764/4: OID is invalid
This seems to be reproducible...
Chris