diff --git a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/PostgreUtils.java b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/PostgreUtils.java index dc7ae6487ae2ba4169e513d7d1b91302377dc476..bfd6b30559e6b9579a6a883730d7dd0b2cb6c693 100644 --- a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/PostgreUtils.java +++ b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/PostgreUtils.java @@ -484,25 +484,29 @@ public class PostgreUtils { if (CommonUtils.isEmpty(string)) { return convertStringToSimpleValue(session, itemType, string); } - switch (itemType.getTypeID()) { - case Types.BOOLEAN: - return string.length() > 0 && Character.toLowerCase(string.charAt(0)) == 't'; - case Types.TINYINT: - return Byte.parseByte(string); - case Types.SMALLINT: - return Short.parseShort(string); - case Types.INTEGER: - return Integer.parseInt(string); - case Types.BIGINT: - return Long.parseLong(string); - case Types.FLOAT: - return Float.parseFloat(string); - case Types.REAL: - case Types.DOUBLE: - return Double.parseDouble(string); - default: { - return convertStringToSimpleValue(session, itemType, string); + try { + switch (itemType.getTypeID()) { + case Types.BOOLEAN: + return string.length() > 0 && Character.toLowerCase(string.charAt(0)) == 't'; + case Types.TINYINT: + return Byte.parseByte(string); + case Types.SMALLINT: + return Short.parseShort(string); + case Types.INTEGER: + return Integer.parseInt(string); + case Types.BIGINT: + return Long.parseLong(string); + case Types.FLOAT: + return Float.parseFloat(string); + case Types.REAL: + case Types.DOUBLE: + return Double.parseDouble(string); + default: { + return convertStringToSimpleValue(session, itemType, string); + } } + } catch (NumberFormatException e) { + return string; } } diff --git a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreDataType.java b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreDataType.java index 916b2fa0bc727e4b45551d219fc3502aaf0b5d88..37367b66ca5d207e983072437bb8e8614feb0638 100644 --- a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreDataType.java +++ b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/PostgreDataType.java @@ -873,9 +873,11 @@ public class PostgreDataType extends JDBCDataType implements Post break; case N: valueType = Types.NUMERIC; + // Kind of a hack (#7459). Don't know any better way to distinguish floats from integers + String outputF = JDBCUtils.safeGetString(dbResult, "typoutput"); if (name.equals("numeric")) { valueType = Types.NUMERIC; - } else if (name.startsWith("float")) { + } else if (outputF != null && outputF.startsWith("float")) { switch (typeLength) { case 4: valueType = Types.FLOAT; diff --git a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/data/PostgreStructValueHandler.java b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/data/PostgreStructValueHandler.java index df943be851ef00fec459d72204ba665580fa65ba..2285af3966d5b63f2d6504d2848e9fe9ecc204f3 100644 --- a/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/data/PostgreStructValueHandler.java +++ b/plugins/org.jkiss.dbeaver.ext.postgresql/src/org/jkiss/dbeaver/ext/postgresql/model/data/PostgreStructValueHandler.java @@ -77,7 +77,8 @@ public class PostgreStructValueHandler extends JDBCStructValueHandler { { PostgreDataType structType = PostgreUtils.findDataType(session, (PostgreDataSource)session.getDataSource(), type); if (structType == null) { - throw new DBCException("Can't resolve struct type '" + type.getTypeName() + "'"); + log.debug("Can't resolve struct type '" + type.getTypeName() + "'"); + return object; } try { if (object == null) {