Deixe-me reescrever as coisas dos comentários para a minha resposta. Você deseja usar
timestamp
digite em vez de integer
simplesmente porque é exatamente para isso que ele foi projetado. Fazendo conversões manuais entre inteiros timestamp e timestamp
objetos é apenas uma dor e você não ganha nada. E você precisará dele eventualmente para consultas baseadas em data e hora mais complexas. Para responder a uma pergunta sobre paginação. Você simplesmente faz uma consulta
SELECT *
FROM table_name
WHERE created < lastTimestamp
ORDER BY created DESC
LIMIT 30
Se for a primeira consulta, você define
lastTimestamp = '3000-01-01'
. Caso contrário, você define lastTimestamp = last_query.last_row.created
. Otimização
Observe que, se a tabela for grande,
ORDER BY created DESC
pode não ser eficiente (especialmente se chamado paralelamente com diferentes intervalos). Nesse caso, você pode usar "janelas de tempo" móveis, por exemplo:SELECT *
FROM table_name
WHERE
created < lastTimestamp
AND created >= lastTimestamp - interval '1 day'
O
1 day
intervalo é escolhido arbitrariamente (ajuste-o às suas necessidades). Você também pode classificar os resultados no aplicativo. Se os resultados não estiverem vazios, você atualiza (no seu aplicativo)
lastTimestamp = last_query.last_row.created
(supondo que você tenha feito a classificação, caso contrário você leva
min(last_query.row.created)
) Se os resultados estiverem vazios, repita a consulta com
lastTimestamp = lastTimestamp - interval '1 day'
até pegar alguma coisa. Além disso, você deve parar se lastTimestamp
torna-se baixo, ou seja, quando é menor que qualquer outro carimbo de data/hora na tabela (que deve ser pré-buscado). Tudo isso está sob algumas suposições para inserções:
new_row.created >= any_row.created
enew_row.created ~ current_time
- A distribuição de
new_row.created
é mais ou menos uniforme
A suposição 1 garante que a paginação resulte em dados consistentes, enquanto a suposição 2 é necessária apenas para o padrão
3000-01-01
encontro. A suposição 3 é garantir que você não tenha grandes lacunas vazias quando tiver que emitir muitas consultas vazias.