PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как работи Setseed() в PostgreSQL

В PostgreSQL, setseed() функцията задава семето за последващо random() повиквания (стойност между -1.0 и 1.0, включително).

random() функцията генерира псевдослучайно число, използвайки прост линеен конгруентен алгоритъм.

Ако setseed() се извиква резултатите от последващи random() повикванията в текущата сесия се повтарят чрез повторно издаване на setseed() със същия аргумент.

Пример

Ето пример, за да демонстрирате как работи.

SELECT 
  setseed(0.8),
  random(), 
  random();

Резултат:

 setseed | random             | random
---------+--------------------+--------------------
         | 0.7998745861323613 | 0.9776304992484732

Сега, ако изпълня същото изявление отново, получавам абсолютно същия резултат:

 setseed | random             | random
---------+--------------------+--------------------
         | 0.7998745861323613 | 0.9776304992484732

Само за да е ясно, ето пълния изход в моя терминал, когато стартирам и двата SELECT изявления едновременно.

SELECT 
  setseed(0.8),
  random(), 
  random();

SELECT 
  setseed(0.8),
  random(), 
  random();

Резултат:

postgres=# SELECT 
postgres-#   setseed(0.8),
postgres-#   random(), 
postgres-#   random();
 setseed |       random       |       random       
---------+--------------------+--------------------
         | 0.7998745861323613 | 0.9776304992484732
(1 row)


postgres=# 
postgres=# SELECT 
postgres-#   setseed(0.8),
postgres-#   random(), 
postgres-#   random();
 setseed |       random       |       random       
---------+--------------------+--------------------
         | 0.7998745861323613 | 0.9776304992484732
(1 row)

Пример БЕЗ Setseed()

Сега ето какво ще се случи, ако изпълня и двата израза отново, но без setseed() функция.

SELECT 
  random(), 
  random();

SELECT 
  random(), 
  random();

Резултат:

postgres=# SELECT 
postgres-#   random(), 
postgres-#   random();
       random       |       random       
--------------------+--------------------
 0.8789931563830109 | 0.8981750563441189
(1 row)


postgres=# 
postgres=# SELECT 
postgres-#   random(), 
postgres-#   random();
       random       |      random       
--------------------+-------------------
 0.3630186384623926 | 0.909389353037664
(1 row)

Така че в този случай вторият израз генерира изцяло нов набор от произволни числа.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Грешка в Postgres:не можа да се отвори файл за четене:Разрешението е отказано

  2. Намерете размера на байтовете на ред в PostgreSQL

  3. Работа с дати в PostgreSQL

  4. свържете се със сървъра на postgres на google compute engine

  5. Получавате стойностите по подразбиране на колоните на таблицата в Postgres?