15670430创建于 2020年12月28日历史提交
CREATE TABLE onek_random (
        unique1         int4,
        unique2         int4,
        two                     int4,
        four            int4,
        ten                     int4,
        twenty          int4,
        hundred         int4,
        thousand        int4,
        twothousand     int4,
        fivethous       int4,
        tenthous        int4,
        odd                     int4,
        even            int4,
        stringu1        name,
        stringu2        name,
        string4         name
) with(autovacuum_enabled = off);
DELETE FROM onek_random;
COPY onek_random FROM '@abs_builddir@/data/onek.data';
--
-- RANDOM
-- Test the random function
--
-- count the number of tuples originally, should be 1000
SELECT count(*) FROM onek_random;
 count 
-------
  1000
(1 row)

-- pick three random rows, they shouldn't match
(SELECT unique1 AS random
  FROM onek_random ORDER BY random() LIMIT 1)
INTERSECT
(SELECT unique1 AS random
  FROM onek_random ORDER BY random() LIMIT 1)
INTERSECT
(SELECT unique1 AS random
  FROM onek_random ORDER BY random() LIMIT 1);
 random 
--------
(0 rows)

-- count roughly 1/10 of the tuples
SELECT count(*) AS random INTO RANDOM_TBL
  FROM onek_random WHERE random() < 1.0/10;
-- select again, the count should be different
INSERT INTO RANDOM_TBL (random)
  SELECT count(*)
  FROM onek_random WHERE random() < 1.0/10;
-- select again, the count should be different
INSERT INTO RANDOM_TBL (random)
  SELECT count(*)
  FROM onek_random WHERE random() < 1.0/10;
-- select again, the count should be different
INSERT INTO RANDOM_TBL (random)
  SELECT count(*)
  FROM onek_random WHERE random() < 1.0/10;
-- now test that they are different counts
SELECT random, count(random) FROM RANDOM_TBL
  GROUP BY random HAVING count(random) > 3;
 random | count 
--------+-------
(0 rows)

SELECT AVG(random) FROM RANDOM_TBL
  HAVING AVG(random) NOT BETWEEN 80 AND 120;
 avg 
-----
(0 rows)

DROP TABLE onek_random;