PostgreSQL concurrent increment of counter
The second update would wait for the previous update on the same rows to be comitted, but will then see the committed value. 

Assume two concurrent transactions updating the same row with an initial value of 0


Time Transation 1  T1 value    Transaction 2  T2 value
--------------------------------------------------------------
1    update ...    1                          0
2                  1            update ..     "undefined"
                                (waits) 
3    commit        1                          2
4                  1            commit        2
5                  2                          2 


"T1 Value" and "T2 Value" means the value that that transaction sees.

If you want to make sure you catch situations where there are "incompatible" changes (e.g. one transaction setting the usage column to a specific value, rather than just incrementing it) you can put all transactions into the "serializable" isolation level. But you will need to prepare for error handling then.

Updates to different names can run concurrently without any waits (because different rows are affected). 

SELECTs will never be blocked but will only see comitted values.