diff --git a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java index b935d02e89..700f2dd92c 100644 --- a/src/main/java/com/alibaba/druid/pool/DruidDataSource.java +++ b/src/main/java/com/alibaba/druid/pool/DruidDataSource.java @@ -69,6 +69,7 @@ import com.alibaba.druid.pool.vendor.MySqlExceptionSorter; import com.alibaba.druid.pool.vendor.MySqlValidConnectionChecker; import com.alibaba.druid.pool.vendor.OracleExceptionSorter; import com.alibaba.druid.pool.vendor.OracleValidConnectionChecker; +import com.alibaba.druid.pool.vendor.PGExceptionSorter; import com.alibaba.druid.pool.vendor.SybaseExceptionSorter; import com.alibaba.druid.proxy.DruidDriver; import com.alibaba.druid.proxy.jdbc.DataSourceProxyConfig; @@ -911,6 +912,9 @@ public class DruidDataSource extends DruidAbstractDataSource } else if (realDriverClassName.equals("com.sybase.jdbc2.jdbc.SybDriver")) { this.exceptionSorter = new SybaseExceptionSorter(); + } else if (realDriverClassName.equals("org.postgresql.Driver")) { + this.exceptionSorter = new PGExceptionSorter(); + } else if (realDriverClassName.equals("com.alibaba.druid.mock.MockDriver")) { this.exceptionSorter = new MockExceptionSorter(); } else if (realDriverClassName.contains("DB2")) { diff --git a/src/main/java/com/alibaba/druid/pool/vendor/PGExceptionSorter.java b/src/main/java/com/alibaba/druid/pool/vendor/PGExceptionSorter.java new file mode 100644 index 0000000000..883596fce5 --- /dev/null +++ b/src/main/java/com/alibaba/druid/pool/vendor/PGExceptionSorter.java @@ -0,0 +1,30 @@ +package com.alibaba.druid.pool.vendor; + +import java.sql.SQLException; +import java.util.Properties; + +import com.alibaba.druid.pool.ExceptionSorter; + +public class PGExceptionSorter implements ExceptionSorter { + + @Override + public boolean isExceptionFatal(SQLException e) { + String sqlState = e.getSQLState(); + if (sqlState == null) { + return false; + } + + // org.postgresql.util.PSQLState + if (sqlState.startsWith("08")) { + return true; + } + + return false; + } + + @Override + public void configFromProperties(Properties properties) { + + } + +}