{"record":{"id":"ab1c7025137a2d22","repo":"apache/seatunnel","slug":"no-table-filters-found-for-filtered-publication-s","errorCode":null,"errorMessage":"No table filters found for filtered publication %s","messagePattern":"No table filters found for filtered publication (.+?)","errorType":"exception","errorClass":"DebeziumException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-cdc/connector-cdc-opengauss/src/main/java/io/debezium/connector/postgresql/connection/PostgresReplicationConnection.java","lineNumber":258,"sourceCode":"                conn.commit();\n                conn.setAutoCommit(true);\n            } catch (SQLException e) {\n                throw new JdbcConnectionException(e);\n            }\n        }\n    }\n\n    private void createOrUpdatePublicationModeFilterted(\n            String tableFilterString, PostgresConnection conn, boolean isUpdate) {\n        String createOrUpdatePublicationStmt;\n        try {\n            Set<TableId> tablesToCapture = determineCapturedTables();\n            tableFilterString =\n                    tablesToCapture.stream()\n                            .map(TableId::toDoubleQuotedString)\n                            .collect(Collectors.joining(\", \"));\n            if (tableFilterString.isEmpty()) {\n                throw new DebeziumException(\n                        String.format(\n                                \"No table filters found for filtered publication %s\",\n                                publicationName));\n            }\n            createOrUpdatePublicationStmt =\n                    isUpdate\n                            ? String.format(\n                                    \"ALTER PUBLICATION %s SET TABLE %s;\",\n                                    publicationName, tableFilterString)\n                            : String.format(\n                                    \"CREATE PUBLICATION %s FOR TABLE %s;\",\n                                    publicationName, tableFilterString);\n            LOGGER.info(\n                    isUpdate\n                            ? \"Updating Publication with statement '{}'\"\n                            : \"Creating Publication with statement '{}'\",\n                    createOrUpdatePublicationStmt);\n            conn.execute(createOrUpdatePublicationStmt);","sourceCodeStart":240,"sourceCodeEnd":276,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-cdc/connector-cdc-opengauss/src/main/java/io/debezium/connector/postgresql/connection/PostgresReplicationConnection.java#L240-L276","documentation":"createOrUpdatePublicationModeFilterted builds the table list for a FILTERED publication from determineCapturedTables(); if the resulting comma-joined, double-quoted table list is empty it throws this DebeziumException, because a filtered publication with no tables is meaningless and would silently capture nothing.","triggerScenarios":"publication.autocreate.mode=filtered is used and determineCapturedTables() returns an empty set — the connector's table/include/exclude filters match zero tables in the database, so the CREATE/ALTER PUBLICATION statement would have no tables.","commonSituations":"schema/table include-list typos or case-sensitivity mistakes (Postgres folds unquoted names to lowercase); tables exist in a different schema than configured; wrong database in the JDBC URL so the filtered tables are simply not present.","solutions":["Fix table include/exclude lists so they match actual tables: SELECT table_schema, table_name FROM information_schema.tables WHERE table_schema NOT IN ('pg_catalog','information_schema');","Remember Postgres lowercases unquoted identifiers — quote names in regex/filters or create tables without mixed case.","Point the connector at the correct database containing the tables to capture.","If you truly want all tables, switch publication.autocreate.mode to all_tables."],"exampleFix":"// before: filter matches nothing due to case\n\"table.include.list\" = \"^Public\\\\.Orders$\"\n// after: lowercase schema/table as stored in Postgres\n\"table.include.list\" = \"^public\\\\.orders$\"","handlingStrategy":"validation","validationCode":"SELECT table_schema || '.' || table_name FROM information_schema.tables WHERE table_schema || '.' || table_name ~ '^public\\\\.orders$'; -- include-list regex must match at least one row","typeGuard":null,"tryCatchPattern":"try {\n    connection.initPublication();\n} catch (DebeziumException e) {\n    // empty filtered table set: fix table.include.list or use all_tables mode\n}","preventionTips":["Test table include/exclude regexes against information_schema before deploying.","Use lowercase identifiers in filters unless tables were created quoted.","Verify the JDBC URL points at the database containing the target tables."],"tags":["cdc","postgres","publication","table-filter","config"],"backgroundTag":"empty-required-field","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"}