PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak działa funkcja Setseed() w PostgreSQL

W PostgreSQL funkcja setseed() funkcja ustawia ziarno dla kolejnych random() połączeń (wartość od -1,0 do 1,0 włącznie).

random() funkcja generuje liczbę pseudolosową za pomocą prostego liniowego algorytmu kongruencji.

Jeśli setseed() jest wywoływana, wyniki kolejnych random() wywołania w bieżącej sesji są powtarzalne przez ponowne wydanie setseed() z tym samym argumentem.

Przykład

Oto przykład pokazujący, jak to działa.

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

Wynik:

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

Teraz, jeśli ponownie uruchomię tę samą instrukcję, otrzymam dokładnie ten sam wynik:

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

Żeby było jasne, oto pełne dane wyjściowe w moim terminalu, gdy uruchamiam oba SELECT oświadczenia w tym samym czasie.

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

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

Wynik:

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)

Przykład BEZ Setseed()

Oto, co się stanie, jeśli ponownie uruchomię obie instrukcje, ale bez setseed() funkcja.

SELECT 
  random(), 
  random();

SELECT 
  random(), 
  random();

Wynik:

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)

Tak więc w tym przypadku druga instrukcja wygenerowała zupełnie nowy zestaw liczb losowych.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie mogę zainstalować pg gem w systemie Windows

  2. Postgres nie działa z „nie można otworzyć pliku mapowania relacji global/pg_filenode.map”

  3. Streaming PostgreSQL a replikacja logiczna – porównanie

  4. Jak upsertować pandy DataFrame do tabeli PostgreSQL?

  5. Błąd składni tabeli upuszczania Postgres