Ah, it's a connection-level thing, that explains why sprinkling `connection.close()` everywhere when I was playing around was making it work!

I added a new feature, `connection_persists_old_columns`, and then modified the three field-related functions to call `connection.close()` after each modification, which solves the problem in a much less fragile way, and means that anything that comes after them will work, not just the introspection commands.