DBZ-7193 Unchanged toasted array columns are substituted with unavailable.value.placeholder, even when REPLICA IDENTITY FULL is configured.

This PR fixes the above issue.
This commit is contained in:
Prabhu19 2023-11-28 22:41:44 +01:00 committed by Jiri Pechanec
parent 5aed12951a
commit c60cbbd4aa
2 changed files with 17 additions and 1 deletions

View File

@ -181,7 +181,7 @@ private Object[] columnValues(List<ReplicationMessage.Column> columns, TableId t
cachedOldToastedValues.put(columnName, value);
}
else {
if (value == UnchangedToastedReplicationMessageColumn.UNCHANGED_TOAST_VALUE) {
if (UnchangedToastedReplicationMessageColumn.isUnchangedToastedValue(value)) {
final Object candidate = cachedOldToastedValues.get(columnName);
if (candidate != null) {
value = candidate;

View File

@ -5,6 +5,9 @@
*/
package io.debezium.connector.postgresql;
import java.util.HashSet;
import java.util.Arrays;
import java.util.Set;
import io.debezium.connector.postgresql.connection.AbstractReplicationMessageColumn;
/**
@ -31,6 +34,15 @@ public class UnchangedToastedReplicationMessageColumn extends AbstractReplicatio
public static final Object UNCHANGED_HSTORE_TOAST_VALUE = new Object();
public static final Object UNCHANGED_UUID_TOAST_VALUE = new Object();
private static final Set<Object> UNCHANGED_TOAST_VALUES = new HashSet<>(Arrays.asList(
UnchangedToastedReplicationMessageColumn.UNCHANGED_TOAST_VALUE,
UnchangedToastedReplicationMessageColumn.UNCHANGED_TEXT_ARRAY_TOAST_VALUE,
UnchangedToastedReplicationMessageColumn.UNCHANGED_BINARY_ARRAY_TOAST_VALUE,
UnchangedToastedReplicationMessageColumn.UNCHANGED_INT_ARRAY_TOAST_VALUE,
UnchangedToastedReplicationMessageColumn.UNCHANGED_BIGINT_ARRAY_TOAST_VALUE,
UnchangedToastedReplicationMessageColumn.UNCHANGED_HSTORE_TOAST_VALUE,
UnchangedToastedReplicationMessageColumn.UNCHANGED_UUID_TOAST_VALUE
));
private Object unchangedToastValue;
public UnchangedToastedReplicationMessageColumn(String columnName, PostgresType type, String typeWithModifiers, boolean optional) {
@ -43,6 +55,10 @@ public boolean isToastedColumn() {
return true;
}
public static boolean isUnchangedToastedValue(Object value) {
return UNCHANGED_TOAST_VALUES.contains(value);
}
@Override
public Object getValue(PostgresStreamingChangeEventSource.PgConnectionSupplier connection, boolean includeUnknownDatatypes) {
return unchangedToastValue;