Nếu bạn đang sử dụng PostgreSQL 9.5+, bạn có thể tận dụng TABLESAMPLE
để chọn một bản ghi ngẫu nhiên.
Hai phương thức lấy mẫu mặc định ( SYSTEM
và BERNOULLI
) yêu cầu bạn chỉ định số lượng hàng trả về dưới dạng phần trăm của tổng số hàng trong bảng.
-- Fetch 10% of the rows in the customers table.
SELECT * FROM customers TABLESAMPLE BERNOULLI(10);
Điều này đòi hỏi phải biết số lượng hồ sơ trong bảng để chọn tỷ lệ phần trăm phù hợp, có thể không dễ dàng tìm thấy nhanh chóng. May mắn thay, có tsm_system_rows
mô-đun cho phép bạn chỉ định số lượng hàng để trả lại trực tiếp.
CREATE EXTENSION tsm_system_rows;
-- Fetch a single row from the customers table.
SELECT * FROM customers TABLESAMPLE SYSTEM_ROWS(1);
Để sử dụng điều này trong ActiveRecord, trước tiên hãy bật tiện ích mở rộng trong quá trình di chuyển:
class EnableTsmSystemRowsExtension < ActiveRecord::Migration[5.0]
def change
enable_extension "tsm_system_rows"
end
end
Sau đó sửa đổi from
mệnh đề của truy vấn:
customer = Customer.from("customers TABLESAMPLE SYSTEM_ROWS(1)").first
Tôi không biết SYSTEM_ROWS
phương pháp lấy mẫu sẽ hoàn toàn ngẫu nhiên hay nếu nó chỉ trả về hàng đầu tiên từ một trang ngẫu nhiên.
Hầu hết các thông tin này được lấy từ một bài đăng trên blog của 2ndQuadrant được viết bởi Gulcin Yildirim .