Se stai usando PostgreSQL 9.5+, puoi trarre vantaggio dalla TABLESAMPLE
selezione di un record casuale.
I due metodi di campionamento predefiniti ( SYSTEM
e BERNOULLI
) richiedono che si specifichi il numero di righe da restituire come percentuale del numero totale di righe nella tabella.
-- Fetch 10% of the rows in the customers table.
SELECT * FROM customers TABLESAMPLE BERNOULLI(10);
Ciò richiede la conoscenza della quantità di record nella tabella per selezionare la percentuale appropriata, che potrebbe non essere facile da trovare rapidamente. Fortunatamente, c'è il tsm_system_rows
modulo che ti consente di specificare il numero di righe da restituire direttamente.
CREATE EXTENSION tsm_system_rows;
-- Fetch a single row from the customers table.
SELECT * FROM customers TABLESAMPLE SYSTEM_ROWS(1);
Per usarlo all'interno di ActiveRecord, prima abilita l'estensione all'interno di una migrazione:
class EnableTsmSystemRowsExtension < ActiveRecord::Migration[5.0]
def change
enable_extension "tsm_system_rows"
end
end
Quindi modificare la from
clausola della query:
customer = Customer.from("customers TABLESAMPLE SYSTEM_ROWS(1)").first
Non so se il SYSTEM_ROWS
metodo di campionamento sarà del tutto casuale o se restituirà solo la prima riga da una pagina casuale.
La maggior parte di queste informazioni sono state tratte da un post sul blog 2ndQuadrant scritto da Gulcin Yildirim .