apache / apache/seatunnel

[Bug][CDC][Postgres] Postgres-CDC fails with UnsupportedOperationException: Unsupported type TIMESTAMP_TZ for TIMESTAMP WITH TIME ZONE columns

Open
#11,005 5 comments 0 reactions 1 assignee Claimed by @lazyfetch View on GitHub
bug
Dominant language
Java
Stars
9.7k
Forks
2.4k
Avg merge
3d 17h
Merged PRs (30d)
210

Description

### Search before asking

- [x] I had searched in the [issues](https://github.com/apache/seatunnel/issues?q=is%3Aissue+label%3A%22bug%22) and found no similar issues.

### What happened

When using Postgres-CDC on a table containing a PostgreSQL TIMESTAMP WITH TIME ZONE (TIMESTAMPTZ) column, SeaTunnel fails during source initialization.

The job never starts processing records and fails while building the CDC deserialization schema.

Actual behavior:

Source initialization fails with:

java.lang.UnsupportedOperationException:
Unsupported type: TIMESTAMP_TZ
Stack Trace
Caused by: java.lang.UnsupportedOperationException: Unsupported type: TIMESTAMP_TZ
at org.apache.seatunnel.connectors.cdc.debezium.row.SeaTunnelRowDebeziumDeserializationConverters.createNotNullConverter(SeaTunnelRowDebeziumDeserializationConverters.java:185)
at org.apache.seatunnel.connectors.cdc.debezium.row.SeaTunnelRowDebeziumDeserializationConverters.createConverter(SeaTunnelRowDebeziumDeserializationConverters.java:119)
at org.apache.seatunnel.connectors.cdc.debezium.row.SeaTunnelRowDebeziumDeserializeSchema.createTableRowConverters(SeaTunnelRowDebeziumDeserializeSchema.java:349)
at org.apache.seatunnel.connectors.cdc.debezium.row.SeaTunnelRowDebeziumDeserializeSchema.(SeaTunnelRowDebeziumDeserializeSchema.java:94)
at org.apache.seatunnel.connectors.seatunnel.cdc.postgres.source.PostgresIncrementalSource.createDebeziumDeserializationSchema(PostgresIncrementalSource.java:113)

### SeaTunnel Version

2.3.13

### SeaTunnel Config

```conf
env {
parallelism = 1
job.mode = "STREAMING"
}

source {
Postgres-CDC {
plugin_output = "source_data"
base-url = "jdbc:postgresql://:5432/"
username = ""
password = ""

database-names = ["postgres"]
schema-names = ["public"]
table-names = ["public.cdc_timestamp_test"]

slot.name = "seatunnel_timestamp_test"
}
}

sink {
Console {}
}
```

### Running Command

```shell
cd {seatunnel_path}/
./bin/seatunnel.sh --config ./config/new_config/postgres_cdc_test -n test1
```

### Error Exception

```log
Caused by: java.lang.UnsupportedOperationException: Unsupported type: TIMESTAMP_TZ
at org.apache.seatunnel.connectors.cdc.debezium.row.SeaTunnelRowDebeziumDeserializationConverters.createNotNullConverter(SeaTunnelRowDebeziumDeserializationConverters.java:185)
at org.apache.seatunnel.connectors.cdc.debezium.row.SeaTunnelRowDebeziumDeserializationConverters.createConverter(SeaTunnelRowDebeziumDeserializationConverters.java:119)
at org.apache.seatunnel.connectors.cdc.debezium.row.SeaTunnelRowDebeziumDeserializationConverters.lambda$new$0(SeaTunnelRowDebeziumDeserializationConverters.java:77)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:1024)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575)
at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260)
at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616)
at org.apache.seatunnel.connectors.cdc.debezium.row.SeaTunnelRowDebeziumDeserializationConverters.(SeaTunnelRowDebeziumDeserializationConverters.java:79)
at org.apache.seatunnel.connectors.cdc.debezium.row.SeaTunnelRowDebeziumDeserializeSchema.createTableRowConverters(SeaTunnelRowDebeziumDeserializeSchema.java:349)
at org.apache.seatunnel.connectors.cdc.debezium.row.SeaTunnelRowDebeziumDeserializeSchema.(SeaTunnelRowDebeziumDeserializeSchema.java:94)
at org.apache.seatunnel.connectors.cdc.debezium.row.SeaTunnelRowDebeziumDeserializeSchema$Builder.build(SeaTunnelRowDebeziumDeserializeSchema.java:374)
at org.apache.seatunnel.connectors.seatunnel.cdc.postgres.source.PostgresIncrementalSource.createDebeziumDeserializationSchema(PostgresIncrementalSource.java:113)
at org.apache.seatunnel.connectors.cdc.base.source.IncrementalSource.(IncrementalSource.java:127)
at org.apache.seatunnel.connectors.seatunnel.cdc.postgres.source.PostgresIncrementalSource.(PostgresIncrementalSource.java:63)
at org.apache.seatunnel.connectors.seatunnel.cdc.postgres.source.PostgresIncrementalSourceFactory.lambda$createSource$1(PostgresIncrementalSourceFactory.java:110)
at org.apache.seatunnel.api.table.factory.FactoryUtil.createAndPrepareSource(FactoryUtil.java:180)
at org.apache.seatunnel.api.table.factory.FactoryUtil.restoreAndPrepareSource(FactoryUtil.java:136)
... 8 more
```

### Zeta or Flink or Spark Version

_No response_

### Java or Scala Version

_No response_

### Screenshots

_No response_

### Are you willing to submit PR?

- [ ] Yes I am willing to submit a PR!

### Code of Conduct

- [x] I agree to follow this project's [Code of Conduct](https://www.apache.org/foundation/policies/conduct)

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.