История изменений
Исправление kardapoltsev, (текущая версия) :
SELECT * FROM table
OFFSET (floor(random() * (SELECT COUNT(*) FROM table)))
LIMIT 1
Вот тут count(*) заменить на примерное количество записей, которое можно выбрать из служебных таблиц. Иначе да, оно перечитывает всю таблицу. Что нибудь типа
SELECT reltuples
FROM pg_class
WHERE relname = 'items';
Опять же, offset-limit без указания order by… Ну такое
Исправление kardapoltsev, :
SELECT * FROM table
OFFSET (floor(random() * (SELECT COUNT(*) FROM table)))
LIMIT 1
Вот тут count(*) заменить на примерное количество записей, которое можно выбрать из служебных таблиц. Иначе да, оно перечитывает всю таблицу. Что нибудь типа
SELECT reltuples
FROM pg_class
WHERE relname = 'items';
Опять же, limit, offset без указания order by… Ну такое
Исходная версия kardapoltsev, :
SELECT * FROM table
OFFSET (floor(random() * (SELECT COUNT(*) FROM table)))
LIMIT 1
Вот тут count(*) заменить на примерное количество записей, которое можно выбрать из служебных таблиц. Иначе да, оно перечитывает всю таблицу. Что нибудь типа
SELECT reltuples
FROM pg_class
WHERE relname = 'items';