PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cách Setseed () hoạt động trong PostgreSQL

Trong PostgreSQL, setseed() hàm đặt hạt giống cho random() tiếp theo cuộc gọi (giá trị từ -1,0 đến 1,0, bao gồm).

random() hàm tạo một số giả ngẫu nhiên bằng cách sử dụng một thuật toán đồng dư tuyến tính đơn giản.

If setseed() được gọi, kết quả của random() tiếp theo các cuộc gọi trong phiên hiện tại có thể lặp lại bằng cách cấp lại setseed() với cùng một đối số.

Ví dụ

Dưới đây là một ví dụ để chứng minh cách hoạt động của nó.

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

Kết quả:

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

Bây giờ, nếu tôi chạy lại cùng một câu lệnh, tôi nhận được kết quả chính xác như vậy:

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

Nói rõ hơn, đây là toàn bộ kết quả đầu ra trong thiết bị đầu cuối của tôi khi tôi chạy cả hai SELECT cùng một lúc.

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

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

Kết quả:

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)

Ví dụ KHÔNG CÓ Setseed ()

Bây giờ, đây là điều sẽ xảy ra nếu tôi chạy lại cả hai câu lệnh nhưng không có setseed() chức năng.

SELECT 
  random(), 
  random();

SELECT 
  random(), 
  random();

Kết quả:

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)

Vì vậy, trong trường hợp này, câu lệnh thứ hai tạo ra một tập hợp các số ngẫu nhiên hoàn toàn mới.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL Replication để phục hồi sau thảm họa

  2. Tham gia bên trong &tham gia bên ngoài; thứ tự của các bảng trong từ có quan trọng không?

  3. Triển khai Switchover / Switchback trong PostgreSQL 9.3.

  4. Nhận kết quả giữa hai ngày trong PostgreSQL

  5. Làm cách nào tôi có thể đảm bảo rằng một chế độ xem cụ thể hóa luôn được cập nhật?