How to Avoid update deadlock
<p>While working on JDBC with Postgres...</p>

<p><strong>Isolationlevel="Read committed"</strong></p>

<p>I got the same deadlock in a multithreaded environment when I tried updating the table after some operations.
So I tried using multiple queries as shown below </p>

<pre><code>  ps = con.prepareStatement("UPDATE TableA SET column1=column1-? WHERE column2=? and column3=?;"  
                          + "UPDATE TableA SET column1=column1+? WHERE column2=? and column3=?;");
</code></pre>

<p>Here are the postgresql logs for the error</p>

<pre><code>2016-12-19 12:25:44 IST STATEMENT:  UPDATE TableA SET column1=column1+$1 WHERE column2=$2 and column3=$3
2016-12-19 12:25:44 IST FATAL:  connection to client lost
2016-12-19 12:25:45 IST ERROR:  deadlock detected
2016-12-19 12:25:45 IST DETAIL:  Process 8524 waits for ShareLock on transaction 84942; blocked by process 12520.
    Process 12520 waits for ShareLock on transaction 84940; blocked by process 20892.
    Process 20892 waits for ExclusiveLock on tuple (1,5) of relation 25911 of database 24736; blocked by process 8524.
    Process 8524: UPDATE TableA SET column1=column1-$1 WHERE column2=$2 and column3=$3
    Process 12520: UPDATE TableA SET column1=column1-$1 WHERE column2=$2 and column3=$3
    Process 20892: UPDATE TableA SET column1=column1-$1 WHERE column2=$2 and column3=$3
2016-12-19 12:25:45 IST HINT:  See server log for query details.
2016-12-19 12:25:45 IST CONTEXT:  while locking tuple (1,12) in relation "TableA"
2016-12-19 12:25:45 IST STATEMENT:  UPDATE TableA SET column1=column1-$1 WHERE column2=$2 and column3=$3
2016-12-19 12:25:45 IST LOG:  could not send data to client: No connection could be made because the target machine actively refused it.
</code></pre>

<p>In this multithreaded environment, I was expecting TableA's rows to get locked for the 2 statements and avoid deadlock.</p>

<p>I see similar scenario explained in 
<a href="https://www.postgresql.org/docs/9.1/static/explicit-locking.html" rel="noreferrer">Postgres Docs</a></p>

<p>I could not find any method to avoid this kind of deadlock. Any help is appreciated. Thanks</p>

<p>P.S: Autocommit is set FALSE already and tried using preparedStatements with single UPDATE query.</p>

<p><strong>Regarding multiple queries</strong> ->  <a href="https://stackoverflow.com/questions/10797794/multiple-queries-executed-in-java-in-single-statement">Multiple queries in one Preparedstatement</a> and <a href="https://sourceforge.net/p/art/wiki/Multiple%20Statements/" rel="noreferrer">this</a> shows that postgres doesnt need any additional configurations.</p>