Jika Anda menggunakan PostgreSQL 9.5+, Anda dapat memanfaatkan TABLESAMPLE
untuk memilih catatan acak.
Dua metode pengambilan sampel default ( SYSTEM
dan BERNOULLI
) mengharuskan Anda menentukan jumlah baris untuk dikembalikan sebagai persentase dari total jumlah baris dalam tabel.
-- Fetch 10% of the rows in the customers table.
SELECT * FROM customers TABLESAMPLE BERNOULLI(10);
Ini membutuhkan mengetahui jumlah catatan dalam tabel untuk memilih persentase yang sesuai, yang mungkin tidak mudah ditemukan dengan cepat. Untungnya, ada tsm_system_rows
modul yang memungkinkan Anda menentukan jumlah baris yang akan dikembalikan secara langsung.
CREATE EXTENSION tsm_system_rows;
-- Fetch a single row from the customers table.
SELECT * FROM customers TABLESAMPLE SYSTEM_ROWS(1);
Untuk menggunakan ini dalam ActiveRecord, pertama-tama aktifkan ekstensi dalam migrasi:
class EnableTsmSystemRowsExtension < ActiveRecord::Migration[5.0]
def change
enable_extension "tsm_system_rows"
end
end
Kemudian ubah from
klausa dari kueri:
customer = Customer.from("customers TABLESAMPLE SYSTEM_ROWS(1)").first
Saya tidak tahu apakah SYSTEM_ROWS
metode pengambilan sampel akan sepenuhnya acak atau hanya mengembalikan baris pertama dari halaman acak.
Sebagian besar informasi ini diambil dari posting blog 2ndQuadrant yang ditulis oleh Gulcin Yildirim .