PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana Setseed() Bekerja di PostgreSQL

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hubungan tidak ada

  2. Array awal berfungsi untuk menggabungkan array multi-dimensi

  3. Bagaimana cara menampilkan fungsi, prosedur, kode sumber pemicu di postgresql?

  4. Postgres - Transpose Baris ke Kolom

  5. Pemicu dengan nama bidang dinamis