Di PostgreSQL, setseed()
fungsi menyetel benih untuk random()
berikutnya panggilan telepon (nilai antara -1.0 dan 1.0, inklusif).
random()
fungsi menghasilkan bilangan pseudo-acak menggunakan algoritme kongruensial linier sederhana.
Jika setseed()
dipanggil, hasil berikutnya random()
panggilan di sesi saat ini dapat diulang dengan mengeluarkan kembali setseed()
dengan argumen yang sama.
Contoh
Berikut ini contoh untuk mendemonstrasikan cara kerjanya.
SELECT
setseed(0.8),
random(),
random();
Hasil:
setseed | random | random ---------+--------------------+-------------------- | 0.7998745861323613 | 0.9776304992484732
Sekarang, jika saya menjalankan pernyataan yang sama lagi, saya mendapatkan hasil yang sama persis:
setseed | random | random ---------+--------------------+-------------------- | 0.7998745861323613 | 0.9776304992484732
Untuk memperjelas, inilah output lengkap di terminal saya ketika saya menjalankan keduanya SELECT
pernyataan pada saat yang sama.
SELECT
setseed(0.8),
random(),
random();
SELECT
setseed(0.8),
random(),
random();
Hasil:
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)
Contoh TANPA Setseed()
Sekarang inilah yang terjadi jika saya menjalankan kedua pernyataan lagi, tetapi tanpa setseed()
fungsi.
SELECT
random(),
random();
SELECT
random(),
random();
Hasil:
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)
Jadi dalam kasus ini, pernyataan kedua menghasilkan satu set bilangan acak yang sama sekali baru.