Postgres table size doubles are transaction completes
I see nothing unexpected there except that the VACUUM FULL ANALYZE took that long if you version is 9.0 or higher.


If you want to avoid the extreme bloat when updating every row in a table, update in smaller chunks and run VACUUM (not FULL) between the updates.
If you want to understand why this behaves this way, read up on the MVCC implementation in PostgreSQL.
If you want to eliminate bloat faster in pre-9.0 databases, use CLUSTER.