The official doc states that:
One advantage of the separate-column approach over an expression index is that ... Another advantage is that searches will be faster, since it will not be necessary to redo the to_tsvector calls to verify index matches.
Why does a gin expression index to_tsvector('english', body) has to "verify index matches"? It seems that index are automatically updated after every update/insert, All indices have same update issue and this might not be the point to be concerned.