{"record":{"id":"1eda057577708d83","repo":"apache/seatunnel","slug":"no-columns-found-for-catalog-schema-ta","errorCode":null,"errorMessage":"No columns found for catalog '{}', schema '{}', table '{}'. Filtered {} rows returned by JDBC driver. The table may not exist or the database requires exact identifier case.","messagePattern":"No columns found for catalog '(.+?)', schema '(.+?)', table '(.+?)'\\. Filtered (.+?) rows returned by JDBC driver\\. The table may not exist or the database requires exact identifier case\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/catalog/utils/JdbcColumnConverter.java","lineNumber":130,"sourceCode":"                int columnSize = columnsResultSet.getInt(\"COLUMN_SIZE\");\n                int decimalDigits = columnsResultSet.getInt(\"DECIMAL_DIGITS\");\n                int nullable = columnsResultSet.getInt(\"NULLABLE\");\n                String comment = columnsResultSet.getString(\"REMARKS\");\n\n                Column column =\n                        convert(\n                                columnName,\n                                jdbcType,\n                                nativeType,\n                                nullable,\n                                columnSize,\n                                decimalDigits,\n                                comment);\n                columns.add(column);\n            }\n        }\n        if (columns.isEmpty() && filteredRows > 0) {\n            LOG.warn(\n                    \"No columns found for catalog '{}', schema '{}', table '{}'. Filtered {} rows returned by JDBC driver. \"\n                            + \"The table may not exist or the database requires exact identifier case.\",\n                    tablePath.getDatabaseName(),\n                    tablePath.getSchemaName(),\n                    tablePath.getTableName(),\n                    filteredRows);\n        }\n        return columns;\n    }\n\n    public static Column convert(ResultSetMetaData metadata, int index) throws SQLException {\n        String columnName = metadata.getColumnLabel(index);\n        int jdbcType = metadata.getColumnType(index);\n        String nativeType = metadata.getColumnTypeName(index);\n        int isNullable = metadata.isNullable(index);\n        int precision = metadata.getPrecision(index);\n        int scale = metadata.getScale(index);\n        return convert(columnName, jdbcType, nativeType, isNullable, precision, scale, null);","sourceCodeStart":112,"sourceCodeEnd":148,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/catalog/utils/JdbcColumnConverter.java#L112-L148","documentation":"JdbcColumnConverter.convert() builds SeaTunnel columns from a JDBC ResultSetMetaData-bearing result. Rows may be filtered (e.g., by catalog/schema/type filters); if ALL rows were filtered out and no columns remain, it logs this warning because the driver matched nothing usable — usually meaning the table does not exist as named or the identifiers differ in case.","triggerScenarios":"Calling convert/column on metadata where the driver returned rows but filtering (catalog/schemaNamePattern/tableNamePattern matching, row-type filtering) removed all of them, leaving zero columns.","commonSituations":"Wrong identifier case with case-sensitive databases (PostgreSQL/Xugu/Dameng quoted identifiers); wrong databaseName/schemaName in TablePath; driver returning row descriptors in unexpected order that the filter drops.","solutions":["Pass exact-case, correctly quoted identifiers in TablePath (database/schema/table).","Verify the table exists: run the equivalent DESC/SHOW or information_schema query manually.","Confirm the catalog/schema fields on the connection and TablePath match the target, not the defaults.","Check the connector version for filter bugs if the driver legitimately returns the columns."],"exampleFix":"// before\nTablePath path = TablePath.of(\"mydb\", \"MyTable\");\n// after (exact case for case-sensitive catalog)\nTablePath path = TablePath.of(\"mydb\", \"public\", \"mytable\");","handlingStrategy":"validation","validationCode":"// Verify the table exists with exact identifiers before conversion\ntry (ResultSet rs = md.getTables(catalog, schemaPattern, tableName, null)) {\n    if (!rs.next()) throw new IllegalStateException(\"Table not found: \" + tableName);\n}","typeGuard":null,"tryCatchPattern":"List<SeaTunnelRowType> cols = converter.convert(...);\nif (cols.isEmpty()) {\n    throw new IllegalStateException(\"No columns resolved — check identifier case and TablePath\");\n}\n","preventionTips":["Use exact-case identifiers for case-sensitive databases (Postgres, Xugu, etc.)","Validate TablePath database/schema/table against SHOW/DESC output before running","Ensure the connection's current catalog/database matches the TablePath"],"tags":["jdbc","metadata","columns","case-sensitivity","identifier"],"backgroundTag":"empty-result-set","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}