LINUX.ORG.RU

История изменений

Исправление 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';