mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-08-23 03:00:41 +02:00
Avoid low-probability regression test failures in timestamp[tz] tests.
If the first transaction block in these tests were entered exactly
at midnight (California time), they'd report a bogus failure due
to 'now' and 'midnight' having the same values. Commit 8c2ac75c5
had dismissed this as being of negligible probability, but we've
now seen it happen in the buildfarm, so let's prevent it. We can
get pretty much the same test coverage without an it's-not-midnight
assumption by moving the does-'now'-work cases into their own test step.
While here, apply commit 47169c255's s/DELETE/TRUNCATE/ change to
timestamptz as well as timestamp (not sure why that didn't
occur to me at the time; the risk of failure is the same).
Back-patch to all supported branches, since the main point is
to get rid of potential buildfarm failures.
Discussion: https://postgr.es/m/14821.1577031117@sss.pgh.pa.us
This commit is contained in:
parent
b3c4e24188
commit
fd06985cb9
@ -5,20 +5,9 @@ CREATE TABLE TIMESTAMP_TBL (d1 timestamp(2) without time zone);
|
|||||||
-- Test shorthand input values
|
-- Test shorthand input values
|
||||||
-- We can't just "select" the results since they aren't constants; test for
|
-- We can't just "select" the results since they aren't constants; test for
|
||||||
-- equality instead. We can do that by running the test inside a transaction
|
-- equality instead. We can do that by running the test inside a transaction
|
||||||
-- block, within which the value of 'now' shouldn't change. We also check
|
-- block, within which the value of 'now' shouldn't change, and so these
|
||||||
-- that 'now' *does* change over a reasonable interval such as 100 msec.
|
-- related values shouldn't either.
|
||||||
-- NOTE: it is possible for this part of the test to fail if the transaction
|
|
||||||
-- block is entered exactly at local midnight; then 'now' and 'today' have
|
|
||||||
-- the same values and the counts will come out different.
|
|
||||||
INSERT INTO TIMESTAMP_TBL VALUES ('now');
|
|
||||||
SELECT pg_sleep(0.1);
|
|
||||||
pg_sleep
|
|
||||||
----------
|
|
||||||
|
|
||||||
(1 row)
|
|
||||||
|
|
||||||
BEGIN;
|
BEGIN;
|
||||||
INSERT INTO TIMESTAMP_TBL VALUES ('now');
|
|
||||||
INSERT INTO TIMESTAMP_TBL VALUES ('today');
|
INSERT INTO TIMESTAMP_TBL VALUES ('today');
|
||||||
INSERT INTO TIMESTAMP_TBL VALUES ('yesterday');
|
INSERT INTO TIMESTAMP_TBL VALUES ('yesterday');
|
||||||
INSERT INTO TIMESTAMP_TBL VALUES ('tomorrow');
|
INSERT INTO TIMESTAMP_TBL VALUES ('tomorrow');
|
||||||
@ -43,15 +32,17 @@ SELECT count(*) AS One FROM TIMESTAMP_TBL WHERE d1 = timestamp without time zone
|
|||||||
1
|
1
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
SELECT count(*) AS One FROM TIMESTAMP_TBL WHERE d1 = timestamp(2) without time zone 'now';
|
|
||||||
one
|
|
||||||
-----
|
|
||||||
1
|
|
||||||
(1 row)
|
|
||||||
|
|
||||||
COMMIT;
|
COMMIT;
|
||||||
DELETE FROM TIMESTAMP_TBL;
|
DELETE FROM TIMESTAMP_TBL;
|
||||||
-- verify uniform transaction time within transaction block
|
-- Verify that 'now' *does* change over a reasonable interval such as 100 msec,
|
||||||
|
-- and that it doesn't change over the same interval within a transaction block
|
||||||
|
INSERT INTO TIMESTAMP_TBL VALUES ('now');
|
||||||
|
SELECT pg_sleep(0.1);
|
||||||
|
pg_sleep
|
||||||
|
----------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
BEGIN;
|
BEGIN;
|
||||||
INSERT INTO TIMESTAMP_TBL VALUES ('now');
|
INSERT INTO TIMESTAMP_TBL VALUES ('now');
|
||||||
SELECT pg_sleep(0.1);
|
SELECT pg_sleep(0.1);
|
||||||
@ -73,8 +64,14 @@ SELECT count(*) AS two FROM TIMESTAMP_TBL WHERE d1 = timestamp(2) without time z
|
|||||||
2
|
2
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
|
SELECT count(d1) AS three, count(DISTINCT d1) AS two FROM TIMESTAMP_TBL;
|
||||||
|
three | two
|
||||||
|
-------+-----
|
||||||
|
3 | 2
|
||||||
|
(1 row)
|
||||||
|
|
||||||
COMMIT;
|
COMMIT;
|
||||||
DELETE FROM TIMESTAMP_TBL;
|
TRUNCATE TIMESTAMP_TBL;
|
||||||
-- Special values
|
-- Special values
|
||||||
INSERT INTO TIMESTAMP_TBL VALUES ('-infinity');
|
INSERT INTO TIMESTAMP_TBL VALUES ('-infinity');
|
||||||
INSERT INTO TIMESTAMP_TBL VALUES ('infinity');
|
INSERT INTO TIMESTAMP_TBL VALUES ('infinity');
|
||||||
|
@ -5,20 +5,9 @@ CREATE TABLE TIMESTAMPTZ_TBL (d1 timestamp(2) with time zone);
|
|||||||
-- Test shorthand input values
|
-- Test shorthand input values
|
||||||
-- We can't just "select" the results since they aren't constants; test for
|
-- We can't just "select" the results since they aren't constants; test for
|
||||||
-- equality instead. We can do that by running the test inside a transaction
|
-- equality instead. We can do that by running the test inside a transaction
|
||||||
-- block, within which the value of 'now' shouldn't change. We also check
|
-- block, within which the value of 'now' shouldn't change, and so these
|
||||||
-- that 'now' *does* change over a reasonable interval such as 100 msec.
|
-- related values shouldn't either.
|
||||||
-- NOTE: it is possible for this part of the test to fail if the transaction
|
|
||||||
-- block is entered exactly at local midnight; then 'now' and 'today' have
|
|
||||||
-- the same values and the counts will come out different.
|
|
||||||
INSERT INTO TIMESTAMPTZ_TBL VALUES ('now');
|
|
||||||
SELECT pg_sleep(0.1);
|
|
||||||
pg_sleep
|
|
||||||
----------
|
|
||||||
|
|
||||||
(1 row)
|
|
||||||
|
|
||||||
BEGIN;
|
BEGIN;
|
||||||
INSERT INTO TIMESTAMPTZ_TBL VALUES ('now');
|
|
||||||
INSERT INTO TIMESTAMPTZ_TBL VALUES ('today');
|
INSERT INTO TIMESTAMPTZ_TBL VALUES ('today');
|
||||||
INSERT INTO TIMESTAMPTZ_TBL VALUES ('yesterday');
|
INSERT INTO TIMESTAMPTZ_TBL VALUES ('yesterday');
|
||||||
INSERT INTO TIMESTAMPTZ_TBL VALUES ('tomorrow');
|
INSERT INTO TIMESTAMPTZ_TBL VALUES ('tomorrow');
|
||||||
@ -42,7 +31,13 @@ SELECT count(*) AS One FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp with time zone
|
|||||||
1
|
1
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
SELECT count(*) AS One FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp(2) with time zone 'now';
|
SELECT count(*) AS One FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp with time zone 'tomorrow EST';
|
||||||
|
one
|
||||||
|
-----
|
||||||
|
1
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SELECT count(*) AS One FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp with time zone 'tomorrow zulu';
|
||||||
one
|
one
|
||||||
-----
|
-----
|
||||||
1
|
1
|
||||||
@ -50,7 +45,15 @@ SELECT count(*) AS One FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp(2) with time zo
|
|||||||
|
|
||||||
COMMIT;
|
COMMIT;
|
||||||
DELETE FROM TIMESTAMPTZ_TBL;
|
DELETE FROM TIMESTAMPTZ_TBL;
|
||||||
-- verify uniform transaction time within transaction block
|
-- Verify that 'now' *does* change over a reasonable interval such as 100 msec,
|
||||||
|
-- and that it doesn't change over the same interval within a transaction block
|
||||||
|
INSERT INTO TIMESTAMPTZ_TBL VALUES ('now');
|
||||||
|
SELECT pg_sleep(0.1);
|
||||||
|
pg_sleep
|
||||||
|
----------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
BEGIN;
|
BEGIN;
|
||||||
INSERT INTO TIMESTAMPTZ_TBL VALUES ('now');
|
INSERT INTO TIMESTAMPTZ_TBL VALUES ('now');
|
||||||
SELECT pg_sleep(0.1);
|
SELECT pg_sleep(0.1);
|
||||||
@ -72,8 +75,14 @@ SELECT count(*) AS two FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp(2) with time zo
|
|||||||
2
|
2
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
|
SELECT count(d1) AS three, count(DISTINCT d1) AS two FROM TIMESTAMPTZ_TBL;
|
||||||
|
three | two
|
||||||
|
-------+-----
|
||||||
|
3 | 2
|
||||||
|
(1 row)
|
||||||
|
|
||||||
COMMIT;
|
COMMIT;
|
||||||
DELETE FROM TIMESTAMPTZ_TBL;
|
TRUNCATE TIMESTAMPTZ_TBL;
|
||||||
-- Special values
|
-- Special values
|
||||||
INSERT INTO TIMESTAMPTZ_TBL VALUES ('-infinity');
|
INSERT INTO TIMESTAMPTZ_TBL VALUES ('-infinity');
|
||||||
INSERT INTO TIMESTAMPTZ_TBL VALUES ('infinity');
|
INSERT INTO TIMESTAMPTZ_TBL VALUES ('infinity');
|
||||||
|
@ -7,18 +7,11 @@ CREATE TABLE TIMESTAMP_TBL (d1 timestamp(2) without time zone);
|
|||||||
-- Test shorthand input values
|
-- Test shorthand input values
|
||||||
-- We can't just "select" the results since they aren't constants; test for
|
-- We can't just "select" the results since they aren't constants; test for
|
||||||
-- equality instead. We can do that by running the test inside a transaction
|
-- equality instead. We can do that by running the test inside a transaction
|
||||||
-- block, within which the value of 'now' shouldn't change. We also check
|
-- block, within which the value of 'now' shouldn't change, and so these
|
||||||
-- that 'now' *does* change over a reasonable interval such as 100 msec.
|
-- related values shouldn't either.
|
||||||
-- NOTE: it is possible for this part of the test to fail if the transaction
|
|
||||||
-- block is entered exactly at local midnight; then 'now' and 'today' have
|
|
||||||
-- the same values and the counts will come out different.
|
|
||||||
|
|
||||||
INSERT INTO TIMESTAMP_TBL VALUES ('now');
|
|
||||||
SELECT pg_sleep(0.1);
|
|
||||||
|
|
||||||
BEGIN;
|
BEGIN;
|
||||||
|
|
||||||
INSERT INTO TIMESTAMP_TBL VALUES ('now');
|
|
||||||
INSERT INTO TIMESTAMP_TBL VALUES ('today');
|
INSERT INTO TIMESTAMP_TBL VALUES ('today');
|
||||||
INSERT INTO TIMESTAMP_TBL VALUES ('yesterday');
|
INSERT INTO TIMESTAMP_TBL VALUES ('yesterday');
|
||||||
INSERT INTO TIMESTAMP_TBL VALUES ('tomorrow');
|
INSERT INTO TIMESTAMP_TBL VALUES ('tomorrow');
|
||||||
@ -29,22 +22,27 @@ INSERT INTO TIMESTAMP_TBL VALUES ('tomorrow zulu');
|
|||||||
SELECT count(*) AS One FROM TIMESTAMP_TBL WHERE d1 = timestamp without time zone 'today';
|
SELECT count(*) AS One FROM TIMESTAMP_TBL WHERE d1 = timestamp without time zone 'today';
|
||||||
SELECT count(*) AS Three FROM TIMESTAMP_TBL WHERE d1 = timestamp without time zone 'tomorrow';
|
SELECT count(*) AS Three FROM TIMESTAMP_TBL WHERE d1 = timestamp without time zone 'tomorrow';
|
||||||
SELECT count(*) AS One FROM TIMESTAMP_TBL WHERE d1 = timestamp without time zone 'yesterday';
|
SELECT count(*) AS One FROM TIMESTAMP_TBL WHERE d1 = timestamp without time zone 'yesterday';
|
||||||
SELECT count(*) AS One FROM TIMESTAMP_TBL WHERE d1 = timestamp(2) without time zone 'now';
|
|
||||||
|
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
|
||||||
DELETE FROM TIMESTAMP_TBL;
|
DELETE FROM TIMESTAMP_TBL;
|
||||||
|
|
||||||
-- verify uniform transaction time within transaction block
|
-- Verify that 'now' *does* change over a reasonable interval such as 100 msec,
|
||||||
|
-- and that it doesn't change over the same interval within a transaction block
|
||||||
|
|
||||||
|
INSERT INTO TIMESTAMP_TBL VALUES ('now');
|
||||||
|
SELECT pg_sleep(0.1);
|
||||||
|
|
||||||
BEGIN;
|
BEGIN;
|
||||||
INSERT INTO TIMESTAMP_TBL VALUES ('now');
|
INSERT INTO TIMESTAMP_TBL VALUES ('now');
|
||||||
SELECT pg_sleep(0.1);
|
SELECT pg_sleep(0.1);
|
||||||
INSERT INTO TIMESTAMP_TBL VALUES ('now');
|
INSERT INTO TIMESTAMP_TBL VALUES ('now');
|
||||||
SELECT pg_sleep(0.1);
|
SELECT pg_sleep(0.1);
|
||||||
SELECT count(*) AS two FROM TIMESTAMP_TBL WHERE d1 = timestamp(2) without time zone 'now';
|
SELECT count(*) AS two FROM TIMESTAMP_TBL WHERE d1 = timestamp(2) without time zone 'now';
|
||||||
|
SELECT count(d1) AS three, count(DISTINCT d1) AS two FROM TIMESTAMP_TBL;
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
|
||||||
DELETE FROM TIMESTAMP_TBL;
|
TRUNCATE TIMESTAMP_TBL;
|
||||||
|
|
||||||
-- Special values
|
-- Special values
|
||||||
INSERT INTO TIMESTAMP_TBL VALUES ('-infinity');
|
INSERT INTO TIMESTAMP_TBL VALUES ('-infinity');
|
||||||
|
@ -7,18 +7,11 @@ CREATE TABLE TIMESTAMPTZ_TBL (d1 timestamp(2) with time zone);
|
|||||||
-- Test shorthand input values
|
-- Test shorthand input values
|
||||||
-- We can't just "select" the results since they aren't constants; test for
|
-- We can't just "select" the results since they aren't constants; test for
|
||||||
-- equality instead. We can do that by running the test inside a transaction
|
-- equality instead. We can do that by running the test inside a transaction
|
||||||
-- block, within which the value of 'now' shouldn't change. We also check
|
-- block, within which the value of 'now' shouldn't change, and so these
|
||||||
-- that 'now' *does* change over a reasonable interval such as 100 msec.
|
-- related values shouldn't either.
|
||||||
-- NOTE: it is possible for this part of the test to fail if the transaction
|
|
||||||
-- block is entered exactly at local midnight; then 'now' and 'today' have
|
|
||||||
-- the same values and the counts will come out different.
|
|
||||||
|
|
||||||
INSERT INTO TIMESTAMPTZ_TBL VALUES ('now');
|
|
||||||
SELECT pg_sleep(0.1);
|
|
||||||
|
|
||||||
BEGIN;
|
BEGIN;
|
||||||
|
|
||||||
INSERT INTO TIMESTAMPTZ_TBL VALUES ('now');
|
|
||||||
INSERT INTO TIMESTAMPTZ_TBL VALUES ('today');
|
INSERT INTO TIMESTAMPTZ_TBL VALUES ('today');
|
||||||
INSERT INTO TIMESTAMPTZ_TBL VALUES ('yesterday');
|
INSERT INTO TIMESTAMPTZ_TBL VALUES ('yesterday');
|
||||||
INSERT INTO TIMESTAMPTZ_TBL VALUES ('tomorrow');
|
INSERT INTO TIMESTAMPTZ_TBL VALUES ('tomorrow');
|
||||||
@ -28,22 +21,29 @@ INSERT INTO TIMESTAMPTZ_TBL VALUES ('tomorrow zulu');
|
|||||||
SELECT count(*) AS One FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp with time zone 'today';
|
SELECT count(*) AS One FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp with time zone 'today';
|
||||||
SELECT count(*) AS One FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp with time zone 'tomorrow';
|
SELECT count(*) AS One FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp with time zone 'tomorrow';
|
||||||
SELECT count(*) AS One FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp with time zone 'yesterday';
|
SELECT count(*) AS One FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp with time zone 'yesterday';
|
||||||
SELECT count(*) AS One FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp(2) with time zone 'now';
|
SELECT count(*) AS One FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp with time zone 'tomorrow EST';
|
||||||
|
SELECT count(*) AS One FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp with time zone 'tomorrow zulu';
|
||||||
|
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
|
||||||
DELETE FROM TIMESTAMPTZ_TBL;
|
DELETE FROM TIMESTAMPTZ_TBL;
|
||||||
|
|
||||||
-- verify uniform transaction time within transaction block
|
-- Verify that 'now' *does* change over a reasonable interval such as 100 msec,
|
||||||
|
-- and that it doesn't change over the same interval within a transaction block
|
||||||
|
|
||||||
|
INSERT INTO TIMESTAMPTZ_TBL VALUES ('now');
|
||||||
|
SELECT pg_sleep(0.1);
|
||||||
|
|
||||||
BEGIN;
|
BEGIN;
|
||||||
INSERT INTO TIMESTAMPTZ_TBL VALUES ('now');
|
INSERT INTO TIMESTAMPTZ_TBL VALUES ('now');
|
||||||
SELECT pg_sleep(0.1);
|
SELECT pg_sleep(0.1);
|
||||||
INSERT INTO TIMESTAMPTZ_TBL VALUES ('now');
|
INSERT INTO TIMESTAMPTZ_TBL VALUES ('now');
|
||||||
SELECT pg_sleep(0.1);
|
SELECT pg_sleep(0.1);
|
||||||
SELECT count(*) AS two FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp(2) with time zone 'now';
|
SELECT count(*) AS two FROM TIMESTAMPTZ_TBL WHERE d1 = timestamp(2) with time zone 'now';
|
||||||
|
SELECT count(d1) AS three, count(DISTINCT d1) AS two FROM TIMESTAMPTZ_TBL;
|
||||||
COMMIT;
|
COMMIT;
|
||||||
|
|
||||||
DELETE FROM TIMESTAMPTZ_TBL;
|
TRUNCATE TIMESTAMPTZ_TBL;
|
||||||
|
|
||||||
-- Special values
|
-- Special values
|
||||||
INSERT INTO TIMESTAMPTZ_TBL VALUES ('-infinity');
|
INSERT INTO TIMESTAMPTZ_TBL VALUES ('-infinity');
|
||||||
|
Loading…
Reference in New Issue
Block a user