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.