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.createdenew_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.