@ -536,3 +536,90 @@ SELECT n, random(0, trim_scale(abs(1 - 10.0^(-n)))) FROM generate_series(-20, 20
20 | 0.60795101234744211935
(41 rows)
-- random dates
SELECT random('1979-02-08'::date,'2025-07-03'::date) AS random_date_multiple_years;
random_date_multiple_years
----------------------------
04-09-1986
(1 row)
SELECT random('4714-11-24 BC'::date,'5874897-12-31 AD'::date) AS random_date_maximum_range;
random_date_maximum_range
---------------------------
10-02-2898131
(1 row)
SELECT random('1979-02-08'::date,'1979-02-08'::date) AS random_date_empty_range;
random_date_empty_range
-------------------------
02-08-1979
(1 row)
SELECT random('2024-12-31'::date, '2024-01-01'::date); -- fail
ERROR: lower bound must be less than or equal to upper bound
SELECT random('-infinity'::date, '2024-01-01'::date); -- fail
ERROR: lower and upper bounds must be finite
SELECT random('2024-12-31'::date, 'infinity'::date); -- fail
ERROR: lower and upper bounds must be finite
-- random timestamps
SELECT random('1979-02-08'::timestamp,'2025-07-03'::timestamp) AS random_timestamp_multiple_years;
random_timestamp_multiple_years
---------------------------------
Fri Jan 27 18:52:05.366009 2017
(1 row)
SELECT random('4714-11-24 BC'::timestamp,'294276-12-31 23:59:59.999999'::timestamp) AS random_timestamp_maximum_range;
random_timestamp_maximum_range
-----------------------------------
Wed Mar 28 00:45:36.180395 226694
(1 row)
SELECT random('2024-07-01 12:00:00.000001'::timestamp, '2024-07-01 12:00:00.999999'::timestamp) AS random_narrow_range;
random_narrow_range
---------------------------------
Mon Jul 01 12:00:00.999286 2024
(1 row)
SELECT random('1979-02-08'::timestamp,'1979-02-08'::timestamp) AS random_timestamp_empty_range;
random_timestamp_empty_range
------------------------------
Thu Feb 08 00:00:00 1979
(1 row)
SELECT random('2024-12-31'::timestamp, '2024-01-01'::timestamp); -- fail
ERROR: lower bound must be less than or equal to upper bound
SELECT random('-infinity'::timestamp, '2024-01-01'::timestamp); -- fail
ERROR: lower and upper bounds must be finite
SELECT random('2024-12-31'::timestamp, 'infinity'::timestamp); -- fail
ERROR: lower and upper bounds must be finite
-- random timestamps with timezone
SELECT random('1979-02-08 +01'::timestamptz,'2025-07-03 +02'::timestamptz) AS random_timestamptz_multiple_years;
random_timestamptz_multiple_years
-------------------------------------
Tue Jun 14 04:41:16.652896 2016 PDT
(1 row)
SELECT random('4714-11-24 BC +00'::timestamptz,'294276-12-31 23:59:59.999999 +00'::timestamptz) AS random_timestamptz_maximum_range;
random_timestamptz_maximum_range
--------------------------------------
Wed Mar 26 14:07:16.980265 31603 PDT
(1 row)
SELECT random('2024-07-01 12:00:00.000001 +04'::timestamptz, '2024-07-01 12:00:00.999999 +04'::timestamptz) AS random_timestamptz_narrow_range;
random_timestamptz_narrow_range
-------------------------------------
Mon Jul 01 01:00:00.835808 2024 PDT
(1 row)
SELECT random('1979-02-08 +05'::timestamptz,'1979-02-08 +05'::timestamptz) AS random_timestamptz_empty_range;
random_timestamptz_empty_range
--------------------------------
Wed Feb 07 11:00:00 1979 PST
(1 row)
SELECT random('2024-01-01 +06'::timestamptz, '2024-01-01 +07'::timestamptz); -- fail
ERROR: lower bound must be less than or equal to upper bound
SELECT random('-infinity'::timestamptz, '2024-01-01 +07'::timestamptz); -- fail
ERROR: lower and upper bounds must be finite
SELECT random('2024-01-01 +06'::timestamptz, 'infinity'::timestamptz); -- fail
ERROR: lower and upper bounds must be finite