sql >> Database >  >> RDS >> PostgreSQL

Hoe Setseed() werkt in PostgreSQL

In PostgreSQL is de setseed() functie stelt de seed in voor volgende random() oproepen (waarde tussen -1,0 en 1,0, inclusief).

De random() functie genereert een pseudo-willekeurig getal met behulp van een eenvoudig lineair congruentieel algoritme.

Als setseed() wordt aangeroepen, de resultaten van de daaropvolgende random() oproepen in de huidige sessie kunnen worden herhaald door setseed() opnieuw uit te geven met hetzelfde argument.

Voorbeeld

Hier is een voorbeeld om te laten zien hoe het werkt.

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

Resultaat:

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

Als ik nu dezelfde instructie opnieuw uitvoer, krijg ik precies hetzelfde resultaat:

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

Voor de duidelijkheid, hier is de volledige uitvoer in mijn terminal wanneer ik beide SELECT . uitvoer verklaringen tegelijkertijd.

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

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

Resultaat:

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)

Voorbeeld ZONDER Setseed()

Dit is wat er gebeurt als ik beide instructies opnieuw uitvoer, maar zonder de setseed() functie.

SELECT 
  random(), 
  random();

SELECT 
  random(), 
  random();

Resultaat:

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)

Dus in dit geval genereerde de tweede instructie een hele nieuwe reeks willekeurige getallen.


  1. Retourneer willekeurige rijen van een tabel in MariaDB

  2. Weg met dubbele waarden in één kolom in twee kolommen selecteren

  3. Wat is de indeling voor de PostgreSQL-verbindingsreeks / URL?

  4. Beste opties voor databasecontrole die beschikbaar zijn voor uw bedrijf