Имеется колонка id, типа uuid, нужно получить записи до/после определенного значения (последней записи из предыдущего запроса).
Пример подзапроса с предварительной обрезкой по времени: SELECT * FROM table WHERE created_at <= $1
Конечно, вероятность при вставке в одну секунду мала, и в этом случае можно было бы использовать простой запрос SELECT * FROM table WHERE created_at < $1 (особенно, если время вставки генерируется самой базой с точностью в секундах порядка 6 знаков после запятой), но при попадании в выборку той же записи могут быть очень нежелательные последствия. Потому хочется сделать дополнительную проверку.
Например, как вариант - функция, фильтрующая ряды, которая бы пропускала ряды до совпадения, затем изменяла состояние внутренней переменной и все ряды после возвращала бы без изменений - с определенным лимитом.
В чем проблема завести автоинкрементальное поле?
Если не нравится автоинкремент на 1 то берете созданную последовательность и меняете как вам вздумается.
например, у автоинкремента есть единая точка отказа - генератор последовательности.
записи, сделанные изначально в разных базах - не склеить в одну таблицу - придется все связанные записи менять и пересчитывать весь индекс (если захочется такую же сортировку).
ну да и не только в этом дело..
мне интересен именно вариант решения с uuid - как-то ведь решают этот вопрос.. может полагаются на уникальность временной метки..
olamedia .: про разные базы или таблицы у вас в посте ни слова. Я так понимаю вы пытаетесь сортировать нечто вроде сложного union?
Если таблицы в пределах базы - используйте одну последовательность в обоих таблицах.
Если нет - проблема. Если не критична производительность инсерта, можно триггером назначать айди(в таблице 1 заканчивать на 1, в таблица 2 на 2 итд)
UUID не предназначен для таких целей, его задача - уникальность идентификатора.
Вячеслав Успенский: в посте ни слова потому что этого нет. вопрос в том как сделать постраничный вывод с сортировкой таблицы, в которой уникальность обеспечивается не инкрементом, а uuid.
и уход от uuid - это не решение вопроса.
Вячеслав Успенский: это не имеет смысла. зачем нужны два уникальных поля? uuid призван решить проблемы с автоинкрементом, а вы предлагаете его вернуть.