Вот то, что я пробовал до сих пор, но иногда он возвращает 3-значное или 2-значное или даже 1-значное число.
SELECT num FROM GENERATE_SERIES (1, 10000) AS s(num) order by random() LIMIT 1
Будет генерироваться значение от 1 до 10000
select to_char(n, 'FM0000') FROM floor(random()*10000) as x(n);
Вы можете попробовать ниже
SELECT num FROM GENERATE_SERIES (1000, 9999) AS s(num) order by random() LIMIT 1
Вы можете использовать это выражение, чтобы избежать обработки подзапросов
select floor(1000 + random() * 8999);
Вы генерируете все числа от 1 до 10000, поэтому 1-999 и 10000 - это не 4-значные числа, а в списке:
SELECT num FROM GENERATE_SERIES (1000, 9999) AS s(num) // generates 4 digit numbers order by random() LIMIT 1