apache/seatunnel · error · DebeziumException
No table filters found for filtered publication %s
Error message
No table filters found for filtered publication %s
What it means
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.
Source
Thrown at seatunnel-connectors-v2/connector-cdc/connector-cdc-opengauss/src/main/java/io/debezium/connector/postgresql/connection/PostgresReplicationConnection.java:258
conn.commit();
conn.setAutoCommit(true);
} catch (SQLException e) {
throw new JdbcConnectionException(e);
}
}
}
private void createOrUpdatePublicationModeFilterted(
String tableFilterString, PostgresConnection conn, boolean isUpdate) {
String createOrUpdatePublicationStmt;
try {
Set<TableId> tablesToCapture = determineCapturedTables();
tableFilterString =
tablesToCapture.stream()
.map(TableId::toDoubleQuotedString)
.collect(Collectors.joining(", "));
if (tableFilterString.isEmpty()) {
throw new DebeziumException(
String.format(
"No table filters found for filtered publication %s",
publicationName));
}
createOrUpdatePublicationStmt =
isUpdate
? String.format(
"ALTER PUBLICATION %s SET TABLE %s;",
publicationName, tableFilterString)
: String.format(
"CREATE PUBLICATION %s FOR TABLE %s;",
publicationName, tableFilterString);
LOGGER.info(
isUpdate
? "Updating Publication with statement '{}'"
: "Creating Publication with statement '{}'",
createOrUpdatePublicationStmt);
conn.execute(createOrUpdatePublicationStmt);View on GitHub (pinned to cf67b549a7)
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.
Example fix
// before: filter matches nothing due to case "table.include.list" = "^Public\\.Orders$" // after: lowercase schema/table as stored in Postgres "table.include.list" = "^public\\.orders$"
Defensive patterns
Strategy: validation
Validate before calling
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
Try / catch
try {
connection.initPublication();
} catch (DebeziumException e) {
// empty filtered table set: fix table.include.list or use all_tables mode
} Prevention
- 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.
When it happens
Trigger: 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.
Common situations: 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.
Understand the failure class
Background: "must not be empty", "cannot be empty" — required-field validation errors across open-source libraries — this error's family across 41 libraries.
Related errors
- Publication autocreation is disabled, please create one and
- Invalid table name: ${tableStr} ,Postgres identifier is of t
- Table ${tableId} does not have a full replica identity, plea
- PostgreSQL-CDC startup.mode 'COMMITTED_OFFSET' requires an e
- No captured data collections found in database
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/ab1c7025137a2d22.
Report an issue: GitHub.