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:
parent
5aed12951a
commit
c60cbbd4aa
@ -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;
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user