Fix timestamp range handling in regression tests of modules/commit_ts/
authorMichael Paquier <michael@paquier.xyz>
Mon, 13 Jul 2020 01:54:26 +0000 (10:54 +0900)
committerMichael Paquier <michael@paquier.xyz>
Mon, 13 Jul 2020 01:54:26 +0000 (10:54 +0900)
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

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

index d484d489111da90c16a757354f7cab13dc60166e..bb2fda27681289e48fe185eff3029f0e359eb310 100644 (file)
@@ -40,12 +40,13 @@ SELECT pg_xact_commit_timestamp('2'::xid);
 (1 row)
 
 SELECT x.xid::text::bigint > 0 as xid_valid,
-    x.timestamp <@ tstzrange('-infinity'::timestamptz, now()) AS ts_in_range,
-    roident != 0 AS valid_roident
+       x.timestamp > '-infinity'::timestamptz AS ts_low,
+       x.timestamp <= now() AS ts_high,
+       roident != 0 AS valid_roident
   FROM pg_last_committed_xact() x;
- xid_valid | ts_in_range | valid_roident 
------------+-------------+---------------
- t         | t           | f
+ xid_valid | ts_low | ts_high | valid_roident 
+-----------+--------+---------+---------------
+ t         | t      | t       | f
 (1 row)
 
 -- Test non-normal transaction ids.
@@ -71,20 +72,22 @@ SELECT * FROM pg_xact_commit_timestamp_origin('2'::xid); -- ok, NULL
 
 -- Test transaction without replication origin
 SELECT txid_current() as txid_no_origin \gset
-SELECT x.timestamp <@ tstzrange('-infinity'::timestamptz, now()) AS ts_in_range,
+SELECT x.timestamp > '-infinity'::timestamptz AS ts_low,
+       x.timestamp <= now() AS ts_high,
        roident != 0 AS valid_roident
   FROM pg_last_committed_xact() x;
- ts_in_range | valid_roident 
--------------+---------------
- t           | f
+ ts_low | ts_high | valid_roident 
+--------+---------+---------------
+ t      | t       | f
 (1 row)
 
-SELECT x.timestamp <@ tstzrange('-infinity'::timestamptz, now()) AS ts_in_range,
+SELECT x.timestamp > '-infinity'::timestamptz AS ts_low,
+       x.timestamp <= now() AS ts_high,
        roident != 0 AS valid_roident
   FROM pg_xact_commit_timestamp_origin(:'txid_no_origin') x;
- ts_in_range | valid_roident 
--------------+---------------
- t           | f
+ ts_low | ts_high | valid_roident 
+--------+---------+---------------
+ t      | t       | f
 (1 row)
 
 -- Test transaction with replication origin
@@ -102,20 +105,24 @@ SELECT pg_replication_origin_session_setup('regress_commit_ts: get_origin');
 (1 row)
 
 SELECT txid_current() as txid_with_origin \gset
-SELECT x.timestamp <@ tstzrange('-infinity'::timestamptz, now()) AS ts_in_range, r.roname
+SELECT x.timestamp > '-infinity'::timestamptz AS ts_low,
+       x.timestamp <= now() AS ts_high,
+       r.roname
   FROM pg_last_committed_xact() x, pg_replication_origin r
   WHERE r.roident = x.roident;
- ts_in_range |            roname             
--------------+-------------------------------
- t           | regress_commit_ts: get_origin
+ ts_low | ts_high |            roname             
+--------+---------+-------------------------------
+ t      | t       | regress_commit_ts: get_origin
 (1 row)
 
-SELECT x.timestamp <@ tstzrange('-infinity'::timestamptz, now()) AS ts_in_range, r.roname
+SELECT x.timestamp > '-infinity'::timestamptz AS ts_low,
+       x.timestamp <= now() AS ts_high,
+       r.roname
   FROM pg_xact_commit_timestamp_origin(:'txid_with_origin') x, pg_replication_origin r
   WHERE r.roident = x.roident;
- ts_in_range |            roname             
--------------+-------------------------------
- t           | regress_commit_ts: get_origin
+ ts_low | ts_high |            roname             
+--------+---------+-------------------------------
+ t      | t       | regress_commit_ts: get_origin
 (1 row)
 
 SELECT pg_replication_origin_session_reset();
index 9a7487408131c1813cb532c1f44df84c54f89cd4..f37e701f37ae479c7025b07f8f2f4e9c29d15231 100644 (file)
@@ -35,8 +35,9 @@ SELECT pg_xact_commit_timestamp('2'::xid);
 (1 row)
 
 SELECT x.xid::text::bigint > 0 as xid_valid,
-    x.timestamp <@ tstzrange('-infinity'::timestamptz, now()) AS ts_in_range,
-    roident != 0 AS valid_roident
+       x.timestamp > '-infinity'::timestamptz AS ts_low,
+       x.timestamp <= now() AS ts_high,
+       roident != 0 AS valid_roident
   FROM pg_last_committed_xact() x;
 ERROR:  could not get commit timestamp data
 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
 
 -- Test transaction without replication origin
 SELECT txid_current() as txid_no_origin \gset
-SELECT x.timestamp <@ tstzrange('-infinity'::timestamptz, now()) AS ts_in_range,
+SELECT x.timestamp > '-infinity'::timestamptz AS ts_low,
+       x.timestamp <= now() AS ts_high,
        roident != 0 AS valid_roident
   FROM pg_last_committed_xact() x;
 ERROR:  could not get commit timestamp data
 HINT:  Make sure the configuration parameter "track_commit_timestamp" is set.
-SELECT x.timestamp <@ tstzrange('-infinity'::timestamptz, now()) AS ts_in_range,
+SELECT x.timestamp > '-infinity'::timestamptz AS ts_low,
+       x.timestamp <= now() AS ts_high,
        roident != 0 AS valid_roident
   FROM pg_xact_commit_timestamp_origin(:'txid_no_origin') x;
 ERROR:  could not get commit timestamp data
@@ -88,12 +91,16 @@ SELECT pg_replication_origin_session_setup('regress_commit_ts: get_origin');
 (1 row)
 
 SELECT txid_current() as txid_with_origin \gset
-SELECT x.timestamp <@ tstzrange('-infinity'::timestamptz, now()) AS ts_in_range, r.roname
+SELECT x.timestamp > '-infinity'::timestamptz AS ts_low,
+       x.timestamp <= now() AS ts_high,
+       r.roname
   FROM pg_last_committed_xact() x, pg_replication_origin r
   WHERE r.roident = x.roident;
 ERROR:  could not get commit timestamp data
 HINT:  Make sure the configuration parameter "track_commit_timestamp" is set.
-SELECT x.timestamp <@ tstzrange('-infinity'::timestamptz, now()) AS ts_in_range, r.roname
+SELECT x.timestamp > '-infinity'::timestamptz AS ts_low,
+       x.timestamp <= now() AS ts_high,
+       r.roname
   FROM pg_xact_commit_timestamp_origin(:'txid_with_origin') x, pg_replication_origin r
   WHERE r.roident = x.roident;
 ERROR:  could not get commit timestamp data
index e77dfb2f0a05c84d698c04ad2a9089154ea1325c..3bb7bb27a74ca56ab2021d33722e7a258f1d8276 100644 (file)
@@ -22,8 +22,9 @@ SELECT pg_xact_commit_timestamp('1'::xid);
 SELECT pg_xact_commit_timestamp('2'::xid);
 
 SELECT x.xid::text::bigint > 0 as xid_valid,
-    x.timestamp <@ tstzrange('-infinity'::timestamptz, now()) AS ts_in_range,
-    roident != 0 AS valid_roident
+       x.timestamp > '-infinity'::timestamptz AS ts_low,
+       x.timestamp <= now() AS ts_high,
+       roident != 0 AS valid_roident
   FROM pg_last_committed_xact() x;
 
 -- Test non-normal transaction ids.
@@ -34,10 +35,12 @@ SELECT * FROM pg_xact_commit_timestamp_origin('2'::xid); -- ok, NULL
 
 -- Test transaction without replication origin
 SELECT txid_current() as txid_no_origin \gset
-SELECT x.timestamp <@ tstzrange('-infinity'::timestamptz, now()) AS ts_in_range,
+SELECT x.timestamp > '-infinity'::timestamptz AS ts_low,
+       x.timestamp <= now() AS ts_high,
        roident != 0 AS valid_roident
   FROM pg_last_committed_xact() x;
-SELECT x.timestamp <@ tstzrange('-infinity'::timestamptz, now()) AS ts_in_range,
+SELECT x.timestamp > '-infinity'::timestamptz AS ts_low,
+       x.timestamp <= now() AS ts_high,
        roident != 0 AS valid_roident
   FROM pg_xact_commit_timestamp_origin(:'txid_no_origin') x;
 
@@ -46,10 +49,14 @@ SELECT pg_replication_origin_create('regress_commit_ts: get_origin') != 0
   AS valid_roident;
 SELECT pg_replication_origin_session_setup('regress_commit_ts: get_origin');
 SELECT txid_current() as txid_with_origin \gset
-SELECT x.timestamp <@ tstzrange('-infinity'::timestamptz, now()) AS ts_in_range, r.roname
+SELECT x.timestamp > '-infinity'::timestamptz AS ts_low,
+       x.timestamp <= now() AS ts_high,
+       r.roname
   FROM pg_last_committed_xact() x, pg_replication_origin r
   WHERE r.roident = x.roident;
-SELECT x.timestamp <@ tstzrange('-infinity'::timestamptz, now()) AS ts_in_range, r.roname
+SELECT x.timestamp > '-infinity'::timestamptz AS ts_low,
+       x.timestamp <= now() AS ts_high,
+       r.roname
   FROM pg_xact_commit_timestamp_origin(:'txid_with_origin') x, pg_replication_origin r
   WHERE r.roident = x.roident;