This chapter describes the behavior of the PostgreSQL database
   system when two or more sessions try to access the same data at the
   same time.  The goals in that situation are to allow efficient
   access for all sessions while maintaining strict data integrity.
   Every developer of database applications should be familiar with
   the topics covered in this chapter.
  
    Unlike traditional database systems which use locks for concurrency control,
    PostgreSQL
    maintains data consistency by using a multiversion model
    (Multiversion Concurrency Control, MVCC). 
    This means that while querying a database each transaction sees
    a snapshot of data (a database version)
    as it was some
    time ago, regardless of the current state of the underlying data.
    This protects the transaction from viewing inconsistent data that
    could be caused by (other) concurrent transaction updates on the same
    data rows, providing transaction isolation
    for each database session.
   
    The main difference between multiversion and lock models is that
    in MVCC locks acquired for querying (reading) data don't conflict
    with locks acquired for writing data, and so reading never blocks
    writing and writing never blocks reading.
   
    Table- and row-level locking facilities are also available in
    PostgreSQL for applications that cannot
    adapt easily to MVCC behavior.  However, proper use of MVCC will
    generally provide better performance than locks.