I have a couple of read-heavy >2TB Postgres instances, document-oriented too.
You're right that bulk updates can be too slow. Too many times I end up doing the updates incremental (in batches) or even use COPY.
Long transactions can also cause surprising locks, because many locks taken persist to the end of the transaction, even if the transaction is no longer doing anything. This can block DDL operations as well as things like REINDEX.