Что такое курсорная пагинация (keyset)? Как реализовать в Go?

Ответ

Вместо номера страницы используют курсор - значение ключа последней полученной строки. Следующая страница: WHERE (created_at, id) < (:last_created, :last_id) ORDER BY created_at DESC, id DESC LIMIT 20. В Go передают last_created и last_id с предыдущего ответа. Нельзя перейти на произвольную страницу по номеру, только вперед/назад. Подходит для бесконечной ленты и API.

q := "SELECT * FROM events WHERE (created_at, id) < ($1, $2) ORDER BY created_at DESC, id DESC LIMIT $3"
rows, _ := db.QueryContext(ctx, q, lastCreated, lastID, limit)
🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.