diff --git a/presto-postgresql/src/main/java/io/prestosql/plugin/postgresql/PostgreSqlClient.java b/presto-postgresql/src/main/java/io/prestosql/plugin/postgresql/PostgreSqlClient.java index 1249a882d466..decbdd68d5e8 100644 --- a/presto-postgresql/src/main/java/io/prestosql/plugin/postgresql/PostgreSqlClient.java +++ b/presto-postgresql/src/main/java/io/prestosql/plugin/postgresql/PostgreSqlClient.java @@ -219,13 +219,14 @@ private Map getArrayColumnDimensions(Connection connection, Jdb return ImmutableMap.of(); } String sql = "" + - "SELECT att.attname, att.attndims " + + "SELECT att.attname, greatest(att.attndims, 1) AS attndims " + "FROM pg_attribute att " + + " JOIN pg_type attyp ON att.atttypid = attyp.oid" + " JOIN pg_class tbl ON tbl.oid = att.attrelid " + " JOIN pg_namespace ns ON tbl.relnamespace = ns.oid " + "WHERE ns.nspname = ? " + "AND tbl.relname = ? " + - "AND att.attndims > 0 "; + "AND attyp.typcategory = 'A' "; try (PreparedStatement statement = connection.prepareStatement(sql)) { statement.setString(1, tableHandle.getSchemaName()); statement.setString(2, tableHandle.getTableName()); diff --git a/presto-postgresql/src/test/java/io/prestosql/plugin/postgresql/TestPostgreSqlTypeMapping.java b/presto-postgresql/src/test/java/io/prestosql/plugin/postgresql/TestPostgreSqlTypeMapping.java index ba6b1f2cbd9e..2d2dda1e5eb4 100644 --- a/presto-postgresql/src/test/java/io/prestosql/plugin/postgresql/TestPostgreSqlTypeMapping.java +++ b/presto-postgresql/src/test/java/io/prestosql/plugin/postgresql/TestPostgreSqlTypeMapping.java @@ -336,9 +336,10 @@ public void testArray() @Test public void testInternalArray() { - // One can declare column using internal type name for an array. Such a column is not recognized - // as array in Presto, because it does not have correct value in pg_attribute.attndims. - testUnsupportedDataType("_int4"); + DataTypeTest.create() + .addRoundTrip(arrayDataType(integerDataType(), "_int4"), asList(1, 2, 3)) + .addRoundTrip(arrayDataType(varcharDataType(), "_text"), asList("a", "b")) + .execute(getQueryRunner(), postgresCreateAndInsert("tpch.test_array_with_native_name")); } @Test