sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo funciona Setseed() en PostgreSQL

En PostgreSQL, el setseed() la función establece la semilla para el subsiguiente random() llamadas (valor entre -1.0 y 1.0, inclusive).

El random() La función genera un número pseudoaleatorio usando un algoritmo lineal congruente simple.

Si setseed() se llama, los resultados de los subsiguientes random() las llamadas en la sesión actual se pueden repetir volviendo a emitir setseed() con el mismo argumento.

Ejemplo

Aquí hay un ejemplo para demostrar cómo funciona.

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

Resultado:

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

Ahora, si vuelvo a ejecutar la misma declaración, obtengo exactamente el mismo resultado:

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

Para que quede claro, aquí está el resultado completo en mi terminal cuando ejecuto ambos SELECT declaraciones al mismo tiempo.

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

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

Resultado:

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)

Ejemplo SIN Setseed()

Ahora, esto es lo que sucede si ejecuto ambas declaraciones nuevamente, pero sin setseed() función.

SELECT 
  random(), 
  random();

SELECT 
  random(), 
  random();

Resultado:

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)

Entonces, en este caso, la segunda declaración generó un conjunto completamente nuevo de números aleatorios.