diff --git a/dbswitch-product/dbswitch-product-greenplum/src/main/java/com/gitee/dbswitch/product/greenplum/GreenplumMetadataQueryProvider.java b/dbswitch-product/dbswitch-product-greenplum/src/main/java/com/gitee/dbswitch/product/greenplum/GreenplumMetadataQueryProvider.java index 9e86ab9f..af4f80bc 100644 --- a/dbswitch-product/dbswitch-product-greenplum/src/main/java/com/gitee/dbswitch/product/greenplum/GreenplumMetadataQueryProvider.java +++ b/dbswitch-product/dbswitch-product-greenplum/src/main/java/com/gitee/dbswitch/product/greenplum/GreenplumMetadataQueryProvider.java @@ -20,6 +20,7 @@ import lombok.extern.slf4j.Slf4j; public class GreenplumMetadataQueryProvider extends PostgresMetadataQueryProvider { static { + systemSchemas.add("pg_aoseg"); systemSchemas.add("gp_toolkit"); } diff --git a/dbswitch-product/dbswitch-product-postgresql/src/main/java/com/gitee/dbswitch/product/postgresql/PostgresMetadataQueryProvider.java b/dbswitch-product/dbswitch-product-postgresql/src/main/java/com/gitee/dbswitch/product/postgresql/PostgresMetadataQueryProvider.java index 59317e52..9c5d55c2 100644 --- a/dbswitch-product/dbswitch-product-postgresql/src/main/java/com/gitee/dbswitch/product/postgresql/PostgresMetadataQueryProvider.java +++ b/dbswitch-product/dbswitch-product-postgresql/src/main/java/com/gitee/dbswitch/product/postgresql/PostgresMetadataQueryProvider.java @@ -40,13 +40,18 @@ public class PostgresMetadataQueryProvider extends AbstractMetadataProvider { + "where pg_namespace.nspname='%s' and pg_class.relname ='%s'),true) "; private static final String SHOW_CREATE_VIEW_SQL_2 = "select pg_get_viewdef('\"%s\".\"%s\"', true)"; + private static final String SHOW_SUB_PARTITIONED_TABLE = "SELECT c.relname AS table_name \n" + + "FROM pg_class c JOIN pg_namespace n ON n.oid = c.relnamespace JOIN pg_inherits i ON c.oid = i.inhrelid \n" + + "WHERE n.nspname = '%s'"; static { systemSchemas.add("pg_temp"); - systemSchemas.add("pg_aoseg"); systemSchemas.add("information_schema"); systemSchemas.add("pg_catalog"); systemSchemas.add("pg_bitmapindex"); + systemSchemas.add("pg_toast"); + systemSchemas.add("partman"); + systemSchemas.add("repack"); } public PostgresMetadataQueryProvider(ProductFactoryProvider factoryProvider) { @@ -61,6 +66,15 @@ public class PostgresMetadataQueryProvider extends AbstractMetadataProvider { .collect(Collectors.toList()); } + @Override + public List queryTableList(Connection connection, String schemaName) { + List tableList = super.queryTableList(connection, schemaName); + Set partitionedTable = getPartitionedTable(connection, schemaName, + SHOW_SUB_PARTITIONED_TABLE); + return tableList.stream().filter(t -> !partitionedTable.contains(t.getTableName())) + .collect(Collectors.toList()); + } + @Override public String getTableDDL(Connection connection, String schemaName, String tableName) { String sql = PostgresqlConst.CREATE_TABLE_SQL_TPL @@ -263,4 +277,18 @@ public class PostgresMetadataQueryProvider extends AbstractMetadataProvider { return results; } + protected Set getPartitionedTable(Connection connection, String schemaName, String sql) { + String query = String.format(sql, schemaName); + Set partitionedTable = new HashSet<>(); + try (Statement st = connection.createStatement()) { + ResultSet resultSet = st.executeQuery(query); + while (resultSet.next()) { + partitionedTable.add(resultSet.getString(1)); + } + } catch (SQLException e) { + throw new RuntimeException(e); + } + return partitionedTable; + } + } diff --git a/dbswitch-product/dbswitch-product-postgresql/src/main/java/com/gitee/dbswitch/product/postgresql/PostgresUtils.java b/dbswitch-product/dbswitch-product-postgresql/src/main/java/com/gitee/dbswitch/product/postgresql/PostgresUtils.java index 6bfaaf0d..c538d822 100644 --- a/dbswitch-product/dbswitch-product-postgresql/src/main/java/com/gitee/dbswitch/product/postgresql/PostgresUtils.java +++ b/dbswitch-product/dbswitch-product-postgresql/src/main/java/com/gitee/dbswitch/product/postgresql/PostgresUtils.java @@ -25,6 +25,7 @@ public final class PostgresUtils { provider, columnDescriptions, pks, schema, table, false); } + private PostgresUtils() { throw new IllegalStateException(); } diff --git a/dbswitch-product/dbswitch-product-sqlserver/src/main/java/com/gitee/dbswitch/product/sqlserver/SqlserverMetadataQueryProvider.java b/dbswitch-product/dbswitch-product-sqlserver/src/main/java/com/gitee/dbswitch/product/sqlserver/SqlserverMetadataQueryProvider.java index df86da70..c8b4be8c 100644 --- a/dbswitch-product/dbswitch-product-sqlserver/src/main/java/com/gitee/dbswitch/product/sqlserver/SqlserverMetadataQueryProvider.java +++ b/dbswitch-product/dbswitch-product-sqlserver/src/main/java/com/gitee/dbswitch/product/sqlserver/SqlserverMetadataQueryProvider.java @@ -47,6 +47,8 @@ public class SqlserverMetadataQueryProvider extends AbstractMetadataProvider { excludesSchemaNames.add("db_backupoperator"); excludesSchemaNames.add("db_datareader"); excludesSchemaNames.add("db_owner"); + excludesSchemaNames.add("sys"); + excludesSchemaNames.add("INFORMATION_SCHEMA"); } public SqlserverMetadataQueryProvider(ProductFactoryProvider factoryProvider) {