sql >> Databáze >  >> RDS >> PostgreSQL

Jak Setseed() funguje v PostgreSQL

V PostgreSQL, setseed() funkce nastaví semeno pro následující random() volání (hodnota mezi -1,0 a 1,0 včetně).

random() funkce generuje pseudonáhodné číslo pomocí jednoduchého lineárního kongruenciálního algoritmu.

Pokud setseed() je voláno, výsledky následného random() volání v aktuální relaci lze opakovat opětovným zadáním setseed() se stejným argumentem.

Příklad

Zde je příklad demonstrující, jak to funguje.

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

Výsledek:

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

Nyní, když znovu spustím stejný příkaz, dostanu přesně stejný výsledek:

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

Aby bylo jasno, zde je úplný výstup v mém terminálu, když spustím oba SELECT prohlášení ve stejnou dobu.

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

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

Výsledek:

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)

Příklad BEZ Setseed()

Nyní se podívejme, co se stane, když znovu spustím oba příkazy, ale bez setseed() funkce.

SELECT 
  random(), 
  random();

SELECT 
  random(), 
  random();

Výsledek:

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že v tomto případě druhý příkaz vygeneroval zcela novou sadu náhodných čísel.


  1. Jak změnit časové pásmo serveru MySQL

  2. Coddova pravidla v SQL

  3. Neo4j - Odstranit vztah pomocí Cypher

  4. Lze SQL Server Express LocalDB připojit vzdáleně?