Random

November 19, 2018 ยท View on GitHub

Experiment in duplicating Python's random module in SQL/plpgSQL functions. The functions can be useful in hosted Postgres environments, where you can manually run the file to have access to these functions.

If you have the ability to install extensions, you likely can just create language plpython3u, which will give you direct access to the Python random module, which is a better approach.

Usage

select random.shuffle('{1,2,3,4,5,6}'::integer[]);
select random.choice('{1,2,3,4,5}'::integer[]);
select random.choice('{"a", "b", "c"}'::text[]);
select random.choices('{"a", "b", "c"}'::text[], 2);
select random.choices('{"a", "b", "c"}'::text[], 2);
select random.choices('{"a", "b", "c"}'::text[], '{1,2,3}'::integer[], 2);
select random.randrange(1, 10, 2);
select random.randrange(6);
select random.randrange('2018-10-01'::date, '2018-11-01'::date, 7);
select random.randrange('2018-10-01'::timestamp, '2018-11-01'::timestamp, '7 day'::interval);
select random.uniform(3, 6);
select random.uniform(1.6, 3.9);
select random.uniform('2018-10-01'::timestamp, '2018-10-02'::timestamp);
select random.triangular(0, 1, 1);

Install

Clone repo and make install

Within database, create extension random;

Notes

random.choices does not accept a cumulative weight option.

More complex functions like random.betavariate, random.expovariate, random.gammavariate were not implemented.