diff --git a/paimon-flink/paimon-flink-cdc/src/main/java/org/apache/paimon/flink/action/cdc/postgres/PostgresTypeUtils.java b/paimon-flink/paimon-flink-cdc/src/main/java/org/apache/paimon/flink/action/cdc/postgres/PostgresTypeUtils.java index 78b80c458f85..7fae4c4327be 100644 --- a/paimon-flink/paimon-flink-cdc/src/main/java/org/apache/paimon/flink/action/cdc/postgres/PostgresTypeUtils.java +++ b/paimon-flink/paimon-flink-cdc/src/main/java/org/apache/paimon/flink/action/cdc/postgres/PostgresTypeUtils.java @@ -69,6 +69,7 @@ public class PostgresTypeUtils { private static final String PG_CHARACTER_VARYING = "varchar"; private static final String PG_CHARACTER_VARYING_ARRAY = "_varchar"; private static final String PG_JSON = "json"; + private static final String PG_JSONB = "jsonb"; private static final String PG_ENUM = "enum"; private static final String PG_UUID = "uuid"; @@ -159,6 +160,7 @@ public static DataType toDataType( return DataTypes.ARRAY(DataTypes.VARCHAR(precision)); case PG_TEXT: case PG_JSON: + case PG_JSONB: case PG_ENUM: case PG_UUID: return DataTypes.STRING(); diff --git a/paimon-flink/paimon-flink-cdc/src/test/java/org/apache/paimon/flink/action/cdc/postgres/PostgresSyncTableActionITCase.java b/paimon-flink/paimon-flink-cdc/src/test/java/org/apache/paimon/flink/action/cdc/postgres/PostgresSyncTableActionITCase.java index 87291d2211e9..107f3cff19ea 100644 --- a/paimon-flink/paimon-flink-cdc/src/test/java/org/apache/paimon/flink/action/cdc/postgres/PostgresSyncTableActionITCase.java +++ b/paimon-flink/paimon-flink-cdc/src/test/java/org/apache/paimon/flink/action/cdc/postgres/PostgresSyncTableActionITCase.java @@ -365,6 +365,7 @@ private void testAllTypesImpl() throws Exception { DataTypes.STRING(), // _text DataTypes.BYTES(), // _bin DataTypes.STRING(), // _json + DataTypes.STRING(), // _jsonb DataTypes.STRING(), // _uuid DataTypes.ARRAY(DataTypes.STRING()) // _array }, @@ -399,6 +400,7 @@ private void testAllTypesImpl() throws Exception { "_text", "_bin", "_json", + "_jsonb", "_uuid", "_array", }); @@ -425,6 +427,7 @@ private void testAllTypesImpl() throws Exception { + "Paimon , Apache Paimon, Apache Paimon PostgreSQL Test Data, " + "[98, 121, 116, 101, 115], " + "{\"a\": \"b\"}, " + + "{\"c\": \"d\"}, " + "123e4567-e89b-12d3-a456-426655440000, " + "[item1, item2]" + "]", @@ -448,6 +451,7 @@ private void testAllTypesImpl() throws Exception { + "NULL, " + "NULL, " + "NULL, " + + "NULL, " + "NULL" + "]"); waitForResult(expected, table, rowType, Arrays.asList("pt", "_id")); diff --git a/paimon-flink/paimon-flink-cdc/src/test/java/org/apache/paimon/flink/action/cdc/postgres/PostgresTypeUtilsTest.java b/paimon-flink/paimon-flink-cdc/src/test/java/org/apache/paimon/flink/action/cdc/postgres/PostgresTypeUtilsTest.java index 794e26df6e09..30b5f79803b2 100644 --- a/paimon-flink/paimon-flink-cdc/src/test/java/org/apache/paimon/flink/action/cdc/postgres/PostgresTypeUtilsTest.java +++ b/paimon-flink/paimon-flink-cdc/src/test/java/org/apache/paimon/flink/action/cdc/postgres/PostgresTypeUtilsTest.java @@ -93,4 +93,10 @@ public void testUuidMapsToString() { assertThat(PostgresTypeUtils.toDataType("uuid", null, null, EMPTY)) .isEqualTo(DataTypes.STRING()); } + + @Test + public void testJsonbMapsToString() { + assertThat(PostgresTypeUtils.toDataType("jsonb", null, null, EMPTY)) + .isEqualTo(DataTypes.STRING()); + } } diff --git a/paimon-flink/paimon-flink-cdc/src/test/resources/postgres/sync_table_setup.sql b/paimon-flink/paimon-flink-cdc/src/test/resources/postgres/sync_table_setup.sql index ab2ec7c2f128..bb0e7ca30d95 100644 --- a/paimon-flink/paimon-flink-cdc/src/test/resources/postgres/sync_table_setup.sql +++ b/paimon-flink/paimon-flink-cdc/src/test/resources/postgres/sync_table_setup.sql @@ -105,6 +105,7 @@ CREATE TABLE all_types_table ( _bin BYTEA, -- json _json JSON, + _jsonb JSONB, -- UUID _uuid UUID, _array VARCHAR[], @@ -131,7 +132,7 @@ INSERT INTO all_types_table ( _time, _time0, _char, _varchar, _text, _bin, - _json, _uuid, + _json, _jsonb, _uuid, _array ) VALUES ( 1, 1.1, @@ -150,7 +151,7 @@ INSERT INTO all_types_table ( '10:13:23'::TIME, '10:13:23'::TIME, 'Paimon', 'Apache Paimon', 'Apache Paimon PostgreSQL Test Data', 'bytes', - '{"a": "b"}'::JSON, '123e4567-e89b-12d3-a456-426655440000'::UUID, + '{"a": "b"}'::JSON, '{"c": "d"}'::JSONB, '123e4567-e89b-12d3-a456-426655440000'::UUID, ARRAY['item1', 'item2']::VARCHAR[] ), ( 2, 2.2, @@ -169,7 +170,7 @@ INSERT INTO all_types_table ( NULL, NULL, NULL, NULL, NULL, NULL, - NULL, NULL, + NULL, NULL, NULL, NULL );