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.