|
1 | 1 |
|
2 | 2 | # Copyright (c) 2021-2022, PostgreSQL Global Development Group
|
3 | 3 |
|
4 |
| -# Test streaming of large transaction containing multiple subtransactions and rollbacks |
| 4 | +# Test streaming of transaction containing multiple subtransactions and rollbacks |
5 | 5 | use strict;
|
6 | 6 | use warnings;
|
7 | 7 | use PostgreSQL::Test::Cluster;
|
|
12 | 12 | my $node_publisher = PostgreSQL::Test::Cluster->new('publisher');
|
13 | 13 | $node_publisher->init(allows_streaming => 'logical');
|
14 | 14 | $node_publisher->append_conf('postgresql.conf',
|
15 |
| - 'logical_decoding_work_mem = 64kB'); |
| 15 | + 'logical_decoding_mode = immediate'); |
16 | 16 | $node_publisher->start;
|
17 | 17 |
|
18 | 18 | # Create subscriber node
|
|
48 | 48 | "SELECT count(*), count(c) FROM test_tab");
|
49 | 49 | is($result, qq(2|0), 'check initial data was copied to subscriber');
|
50 | 50 |
|
51 |
| -# large (streamed) transaction with DDL, DML and ROLLBACKs |
| 51 | +# streamed transaction with DDL, DML and ROLLBACKs |
52 | 52 | $node_publisher->safe_psql(
|
53 | 53 | 'postgres', q{
|
54 | 54 | BEGIN;
|
55 |
| -INSERT INTO test_tab SELECT i, md5(i::text) FROM generate_series(3,500) s(i); |
| 55 | +INSERT INTO test_tab VALUES (3, md5(3::text)); |
56 | 56 | SAVEPOINT s1;
|
57 |
| -INSERT INTO test_tab SELECT i, md5(i::text) FROM generate_series(501,1000) s(i); |
| 57 | +INSERT INTO test_tab VALUES (4, md5(4::text)); |
58 | 58 | SAVEPOINT s2;
|
59 |
| -INSERT INTO test_tab SELECT i, md5(i::text) FROM generate_series(1001,1500) s(i); |
| 59 | +INSERT INTO test_tab VALUES (5, md5(5::text)); |
60 | 60 | SAVEPOINT s3;
|
61 |
| -INSERT INTO test_tab SELECT i, md5(i::text) FROM generate_series(1501,2000) s(i); |
| 61 | +INSERT INTO test_tab VALUES (6, md5(6::text)); |
62 | 62 | ROLLBACK TO s2;
|
63 |
| -INSERT INTO test_tab SELECT i, md5(i::text) FROM generate_series(2001,2500) s(i); |
| 63 | +INSERT INTO test_tab VALUES (7, md5(7::text)); |
64 | 64 | ROLLBACK TO s1;
|
65 |
| -INSERT INTO test_tab SELECT i, md5(i::text) FROM generate_series(2501,3000) s(i); |
| 65 | +INSERT INTO test_tab VALUES (8, md5(8::text)); |
66 | 66 | SAVEPOINT s4;
|
67 |
| -INSERT INTO test_tab SELECT i, md5(i::text) FROM generate_series(3001,3500) s(i); |
| 67 | +INSERT INTO test_tab VALUES (9, md5(9::text)); |
68 | 68 | SAVEPOINT s5;
|
69 |
| -INSERT INTO test_tab SELECT i, md5(i::text) FROM generate_series(3501,4000) s(i); |
| 69 | +INSERT INTO test_tab VALUES (10, md5(10::text)); |
70 | 70 | COMMIT;
|
71 | 71 | });
|
72 | 72 |
|
|
75 | 75 | $result =
|
76 | 76 | $node_subscriber->safe_psql('postgres',
|
77 | 77 | "SELECT count(*), count(c) FROM test_tab");
|
78 |
| -is($result, qq(2000|0), |
| 78 | +is($result, qq(6|0), |
79 | 79 | 'check rollback to savepoint was reflected on subscriber and extra columns contain local defaults'
|
80 | 80 | );
|
81 | 81 |
|
82 |
| -# large (streamed) transaction with subscriber receiving out of order |
83 |
| -# subtransaction ROLLBACKs |
| 82 | +# streamed transaction with subscriber receiving out of order subtransaction |
| 83 | +# ROLLBACKs |
84 | 84 | $node_publisher->safe_psql(
|
85 | 85 | 'postgres', q{
|
86 | 86 | BEGIN;
|
87 |
| -INSERT INTO test_tab SELECT i, md5(i::text) FROM generate_series(4001,4500) s(i); |
| 87 | +INSERT INTO test_tab VALUES (11, md5(11::text)); |
88 | 88 | SAVEPOINT s1;
|
89 |
| -INSERT INTO test_tab SELECT i, md5(i::text) FROM generate_series(5001,5500) s(i); |
| 89 | +INSERT INTO test_tab VALUES (12, md5(12::text)); |
90 | 90 | SAVEPOINT s2;
|
91 |
| -INSERT INTO test_tab SELECT i, md5(i::text) FROM generate_series(6001,6500) s(i); |
| 91 | +INSERT INTO test_tab VALUES (13, md5(13::text)); |
92 | 92 | SAVEPOINT s3;
|
93 |
| -INSERT INTO test_tab SELECT i, md5(i::text) FROM generate_series(7001,7500) s(i); |
| 93 | +INSERT INTO test_tab VALUES (14, md5(14::text)); |
94 | 94 | RELEASE s2;
|
95 |
| -INSERT INTO test_tab SELECT i, md5(i::text) FROM generate_series(8001,8500) s(i); |
| 95 | +INSERT INTO test_tab VALUES (15, md5(15::text)); |
96 | 96 | ROLLBACK TO s1;
|
97 | 97 | COMMIT;
|
98 | 98 | });
|
|
102 | 102 | $result =
|
103 | 103 | $node_subscriber->safe_psql('postgres',
|
104 | 104 | "SELECT count(*), count(c) FROM test_tab");
|
105 |
| -is($result, qq(2500|0), |
| 105 | +is($result, qq(7|0), |
106 | 106 | 'check rollback to savepoint was reflected on subscriber');
|
107 | 107 |
|
108 |
| -# large (streamed) transaction with subscriber receiving rollback |
| 108 | +# streamed transaction with subscriber receiving rollback |
109 | 109 | $node_publisher->safe_psql(
|
110 | 110 | 'postgres', q{
|
111 | 111 | BEGIN;
|
112 |
| -INSERT INTO test_tab SELECT i, md5(i::text) FROM generate_series(8501,9000) s(i); |
| 112 | +INSERT INTO test_tab VALUES (16, md5(16::text)); |
113 | 113 | SAVEPOINT s1;
|
114 |
| -INSERT INTO test_tab SELECT i, md5(i::text) FROM generate_series(9001,9500) s(i); |
| 114 | +INSERT INTO test_tab VALUES (17, md5(17::text)); |
115 | 115 | SAVEPOINT s2;
|
116 |
| -INSERT INTO test_tab SELECT i, md5(i::text) FROM generate_series(9501,10000) s(i); |
| 116 | +INSERT INTO test_tab VALUES (18, md5(18::text)); |
117 | 117 | ROLLBACK;
|
118 | 118 | });
|
119 | 119 |
|
|
122 | 122 | $result =
|
123 | 123 | $node_subscriber->safe_psql('postgres',
|
124 | 124 | "SELECT count(*), count(c) FROM test_tab");
|
125 |
| -is($result, qq(2500|0), 'check rollback was reflected on subscriber'); |
| 125 | +is($result, qq(7|0), 'check rollback was reflected on subscriber'); |
126 | 126 |
|
127 | 127 | $node_subscriber->stop;
|
128 | 128 | $node_publisher->stop;
|
|
0 commit comments