Fix local/remote attribute mix-up in logical replication
This would lead to failures if local and remote tables have a different column order. The tests previously didn't catch that because they only tested the initial data copy. So add another test that exercises the apply worker. Author: Petr Jelinek <petr.jelinek@2ndquadrant.com>
This commit is contained in:
parent
0e58455dd4
commit
fca17a933b
|
@ -402,7 +402,8 @@ slot_modify_cstrings(TupleTableSlot *slot, LogicalRepRelMapEntry *rel,
|
||||||
errarg.attnum = remoteattnum;
|
errarg.attnum = remoteattnum;
|
||||||
|
|
||||||
getTypeInputInfo(att->atttypid, &typinput, &typioparam);
|
getTypeInputInfo(att->atttypid, &typinput, &typioparam);
|
||||||
slot->tts_values[i] = OidInputFunctionCall(typinput, values[i],
|
slot->tts_values[i] = OidInputFunctionCall(typinput,
|
||||||
|
values[remoteattnum],
|
||||||
typioparam,
|
typioparam,
|
||||||
att->atttypmod);
|
att->atttypmod);
|
||||||
slot->tts_isnull[i] = false;
|
slot->tts_isnull[i] = false;
|
||||||
|
|
|
@ -89,6 +89,8 @@ $node_publisher->safe_psql('postgres',
|
||||||
$node_publisher->safe_psql('postgres', "DELETE FROM tab_rep WHERE a > 20");
|
$node_publisher->safe_psql('postgres', "DELETE FROM tab_rep WHERE a > 20");
|
||||||
$node_publisher->safe_psql('postgres', "UPDATE tab_rep SET a = -a");
|
$node_publisher->safe_psql('postgres', "UPDATE tab_rep SET a = -a");
|
||||||
|
|
||||||
|
$node_publisher->safe_psql('postgres', "INSERT INTO tab_mixed VALUES (2, 'bar')");
|
||||||
|
|
||||||
$node_publisher->poll_query_until('postgres', $caughtup_query)
|
$node_publisher->poll_query_until('postgres', $caughtup_query)
|
||||||
or die "Timed out while waiting for subscriber to catch up";
|
or die "Timed out while waiting for subscriber to catch up";
|
||||||
|
|
||||||
|
@ -102,7 +104,8 @@ is($result, qq(20|-20|-1), 'check replicated changes on subscriber');
|
||||||
|
|
||||||
$result = $node_subscriber->safe_psql('postgres',
|
$result = $node_subscriber->safe_psql('postgres',
|
||||||
"SELECT c, b, a FROM tab_mixed");
|
"SELECT c, b, a FROM tab_mixed");
|
||||||
is($result, qq(|foo|1), 'check replicated changes with different column order');
|
is($result, qq(|foo|1
|
||||||
|
|bar|2), 'check replicated changes with different column order');
|
||||||
|
|
||||||
# insert some duplicate rows
|
# insert some duplicate rows
|
||||||
$node_publisher->safe_psql('postgres',
|
$node_publisher->safe_psql('postgres',
|
||||||
|
|
Loading…
Reference in New Issue