Skip to content

Commit 5bfe6a3

Browse files
committed
Fix timestamp range handling in regression tests of modules/commit_ts/
Switching the regression tests to use tstzrange() has proved to not be a good idea for environments where the timestamp precision is low, as internal range checks exclude the upper bound. So, if the commit timestamp of a transaction matched with now() from the next query, the test would fail. This changes to use two bound checks instead of the range function, where the upper bound is inclusive. Per buildfarm member jacana. Discussion: https://postgr.es/m/20200712122507.GD21680@paquier.xyz
1 parent ea3e15d commit 5bfe6a3

File tree

3 files changed

+54
-33
lines changed

3 files changed

+54
-33
lines changed

src/test/modules/commit_ts/expected/commit_timestamp.out

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,13 @@ SELECT pg_xact_commit_timestamp('2'::xid);
4040
(1 row)
4141

4242
SELECT x.xid::text::bigint > 0 as xid_valid,
43-
x.timestamp <@ tstzrange('-infinity'::timestamptz, now()) AS ts_in_range,
44-
roident != 0 AS valid_roident
43+
x.timestamp > '-infinity'::timestamptz AS ts_low,
44+
x.timestamp <= now() AS ts_high,
45+
roident != 0 AS valid_roident
4546
FROM pg_last_committed_xact() x;
46-
xid_valid | ts_in_range | valid_roident
47-
-----------+-------------+---------------
48-
t | t | f
47+
xid_valid | ts_low | ts_high | valid_roident
48+
-----------+--------+---------+---------------
49+
t | t | t | f
4950
(1 row)
5051

5152
-- Test non-normal transaction ids.
@@ -71,20 +72,22 @@ SELECT * FROM pg_xact_commit_timestamp_origin('2'::xid); -- ok, NULL
7172

7273
-- Test transaction without replication origin
7374
SELECT txid_current() as txid_no_origin \gset
74-
SELECT x.timestamp <@ tstzrange('-infinity'::timestamptz, now()) AS ts_in_range,
75+
SELECT x.timestamp > '-infinity'::timestamptz AS ts_low,
76+
x.timestamp <= now() AS ts_high,
7577
roident != 0 AS valid_roident
7678
FROM pg_last_committed_xact() x;
77-
ts_in_range | valid_roident
78-
-------------+---------------
79-
t | f
79+
ts_low | ts_high | valid_roident
80+
--------+---------+---------------
81+
t | t | f
8082
(1 row)
8183

82-
SELECT x.timestamp <@ tstzrange('-infinity'::timestamptz, now()) AS ts_in_range,
84+
SELECT x.timestamp > '-infinity'::timestamptz AS ts_low,
85+
x.timestamp <= now() AS ts_high,
8386
roident != 0 AS valid_roident
8487
FROM pg_xact_commit_timestamp_origin(:'txid_no_origin') x;
85-
ts_in_range | valid_roident
86-
-------------+---------------
87-
t | f
88+
ts_low | ts_high | valid_roident
89+
--------+---------+---------------
90+
t | t | f
8891
(1 row)
8992

9093
-- Test transaction with replication origin
@@ -102,20 +105,24 @@ SELECT pg_replication_origin_session_setup('regress_commit_ts: get_origin');
102105
(1 row)
103106

104107
SELECT txid_current() as txid_with_origin \gset
105-
SELECT x.timestamp <@ tstzrange('-infinity'::timestamptz, now()) AS ts_in_range, r.roname
108+
SELECT x.timestamp > '-infinity'::timestamptz AS ts_low,
109+
x.timestamp <= now() AS ts_high,
110+
r.roname
106111
FROM pg_last_committed_xact() x, pg_replication_origin r
107112
WHERE r.roident = x.roident;
108-
ts_in_range | roname
109-
-------------+-------------------------------
110-
t | regress_commit_ts: get_origin
113+
ts_low | ts_high | roname
114+
--------+---------+-------------------------------
115+
t | t | regress_commit_ts: get_origin
111116
(1 row)
112117

113-
SELECT x.timestamp <@ tstzrange('-infinity'::timestamptz, now()) AS ts_in_range, r.roname
118+
SELECT x.timestamp > '-infinity'::timestamptz AS ts_low,
119+
x.timestamp <= now() AS ts_high,
120+
r.roname
114121
FROM pg_xact_commit_timestamp_origin(:'txid_with_origin') x, pg_replication_origin r
115122
WHERE r.roident = x.roident;
116-
ts_in_range | roname
117-
-------------+-------------------------------
118-
t | regress_commit_ts: get_origin
123+
ts_low | ts_high | roname
124+
--------+---------+-------------------------------
125+
t | t | regress_commit_ts: get_origin
119126
(1 row)
120127

121128
SELECT pg_replication_origin_session_reset();

src/test/modules/commit_ts/expected/commit_timestamp_1.out

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,9 @@ SELECT pg_xact_commit_timestamp('2'::xid);
3535
(1 row)
3636

3737
SELECT x.xid::text::bigint > 0 as xid_valid,
38-
x.timestamp <@ tstzrange('-infinity'::timestamptz, now()) AS ts_in_range,
39-
roident != 0 AS valid_roident
38+
x.timestamp > '-infinity'::timestamptz AS ts_low,
39+
x.timestamp <= now() AS ts_high,
40+
roident != 0 AS valid_roident
4041
FROM pg_last_committed_xact() x;
4142
ERROR: could not get commit timestamp data
4243
HINT: Make sure the configuration parameter "track_commit_timestamp" is set.
@@ -63,12 +64,14 @@ SELECT * FROM pg_xact_commit_timestamp_origin('2'::xid); -- ok, NULL
6364

6465
-- Test transaction without replication origin
6566
SELECT txid_current() as txid_no_origin \gset
66-
SELECT x.timestamp <@ tstzrange('-infinity'::timestamptz, now()) AS ts_in_range,
67+
SELECT x.timestamp > '-infinity'::timestamptz AS ts_low,
68+
x.timestamp <= now() AS ts_high,
6769
roident != 0 AS valid_roident
6870
FROM pg_last_committed_xact() x;
6971
ERROR: could not get commit timestamp data
7072
HINT: Make sure the configuration parameter "track_commit_timestamp" is set.
71-
SELECT x.timestamp <@ tstzrange('-infinity'::timestamptz, now()) AS ts_in_range,
73+
SELECT x.timestamp > '-infinity'::timestamptz AS ts_low,
74+
x.timestamp <= now() AS ts_high,
7275
roident != 0 AS valid_roident
7376
FROM pg_xact_commit_timestamp_origin(:'txid_no_origin') x;
7477
ERROR: could not get commit timestamp data
@@ -88,12 +91,16 @@ SELECT pg_replication_origin_session_setup('regress_commit_ts: get_origin');
8891
(1 row)
8992

9093
SELECT txid_current() as txid_with_origin \gset
91-
SELECT x.timestamp <@ tstzrange('-infinity'::timestamptz, now()) AS ts_in_range, r.roname
94+
SELECT x.timestamp > '-infinity'::timestamptz AS ts_low,
95+
x.timestamp <= now() AS ts_high,
96+
r.roname
9297
FROM pg_last_committed_xact() x, pg_replication_origin r
9398
WHERE r.roident = x.roident;
9499
ERROR: could not get commit timestamp data
95100
HINT: Make sure the configuration parameter "track_commit_timestamp" is set.
96-
SELECT x.timestamp <@ tstzrange('-infinity'::timestamptz, now()) AS ts_in_range, r.roname
101+
SELECT x.timestamp > '-infinity'::timestamptz AS ts_low,
102+
x.timestamp <= now() AS ts_high,
103+
r.roname
97104
FROM pg_xact_commit_timestamp_origin(:'txid_with_origin') x, pg_replication_origin r
98105
WHERE r.roident = x.roident;
99106
ERROR: could not get commit timestamp data

src/test/modules/commit_ts/sql/commit_timestamp.sql

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,9 @@ SELECT pg_xact_commit_timestamp('1'::xid);
2222
SELECT pg_xact_commit_timestamp('2'::xid);
2323

2424
SELECT x.xid::text::bigint > 0 as xid_valid,
25-
x.timestamp <@ tstzrange('-infinity'::timestamptz, now()) AS ts_in_range,
26-
roident != 0 AS valid_roident
25+
x.timestamp > '-infinity'::timestamptz AS ts_low,
26+
x.timestamp <= now() AS ts_high,
27+
roident != 0 AS valid_roident
2728
FROM pg_last_committed_xact() x;
2829

2930
-- Test non-normal transaction ids.
@@ -34,10 +35,12 @@ SELECT * FROM pg_xact_commit_timestamp_origin('2'::xid); -- ok, NULL
3435

3536
-- Test transaction without replication origin
3637
SELECT txid_current() as txid_no_origin \gset
37-
SELECT x.timestamp <@ tstzrange('-infinity'::timestamptz, now()) AS ts_in_range,
38+
SELECT x.timestamp > '-infinity'::timestamptz AS ts_low,
39+
x.timestamp <= now() AS ts_high,
3840
roident != 0 AS valid_roident
3941
FROM pg_last_committed_xact() x;
40-
SELECT x.timestamp <@ tstzrange('-infinity'::timestamptz, now()) AS ts_in_range,
42+
SELECT x.timestamp > '-infinity'::timestamptz AS ts_low,
43+
x.timestamp <= now() AS ts_high,
4144
roident != 0 AS valid_roident
4245
FROM pg_xact_commit_timestamp_origin(:'txid_no_origin') x;
4346

@@ -46,10 +49,14 @@ SELECT pg_replication_origin_create('regress_commit_ts: get_origin') != 0
4649
AS valid_roident;
4750
SELECT pg_replication_origin_session_setup('regress_commit_ts: get_origin');
4851
SELECT txid_current() as txid_with_origin \gset
49-
SELECT x.timestamp <@ tstzrange('-infinity'::timestamptz, now()) AS ts_in_range, r.roname
52+
SELECT x.timestamp > '-infinity'::timestamptz AS ts_low,
53+
x.timestamp <= now() AS ts_high,
54+
r.roname
5055
FROM pg_last_committed_xact() x, pg_replication_origin r
5156
WHERE r.roident = x.roident;
52-
SELECT x.timestamp <@ tstzrange('-infinity'::timestamptz, now()) AS ts_in_range, r.roname
57+
SELECT x.timestamp > '-infinity'::timestamptz AS ts_low,
58+
x.timestamp <= now() AS ts_high,
59+
r.roname
5360
FROM pg_xact_commit_timestamp_origin(:'txid_with_origin') x, pg_replication_origin r
5461
WHERE r.roident = x.roident;
5562

0 commit comments

Comments
 (0)