Permítanme reescribir las cosas de los comentarios a mi respuesta. Quiere usar timestamp
escriba en lugar de integer
simplemente porque eso es exactamente para lo que fue diseñado. Hacer conversiones manuales entre enteros de marca de tiempo y timestamp
objetos es sólo un dolor y no ganas nada. Y eventualmente lo necesitará para consultas más complejas basadas en fecha y hora.
Para responder a una pregunta sobre paginación. Simplemente haces una consulta
SELECT *
FROM table_name
WHERE created < lastTimestamp
ORDER BY created DESC
LIMIT 30
Si es la primera consulta, establece decir lastTimestamp = '3000-01-01'
. De lo contrario, establezca lastTimestamp = last_query.last_row.created
.
Optimización
Tenga en cuenta que si la tabla es grande, entonces ORDER BY created DESC
podría no ser eficiente (especialmente si se llama en paralelo con diferentes rangos). En este caso, puede usar "ventanas de tiempo" móviles, por ejemplo:
SELECT *
FROM table_name
WHERE
created < lastTimestamp
AND created >= lastTimestamp - interval '1 day'
El 1 day
el intervalo se elige arbitrariamente (sintonícelo según sus necesidades). También puede ordenar los resultados en la aplicación.
Si los resultados no están vacíos, actualice (en su aplicación)
lastTimestamp = last_query.last_row.created
(suponiendo que haya ordenado, de lo contrario, toma min(last_query.row.created)
)
Si los resultados están vacíos, repite la consulta con lastTimestamp = lastTimestamp - interval '1 day'
hasta que traigas algo. También debe detenerse si lastTimestamp
pasa a ser demasiado bajo, es decir, cuando es más bajo que cualquier otra marca de tiempo en la tabla (que debe precargarse).
Todo eso está bajo algunos supuestos para las inserciones:
new_row.created >= any_row.created
ynew_row.created ~ current_time
- La distribución de
new_row.created
es más o menos uniforme
La suposición 1 garantiza que la paginación dé como resultado datos coherentes, mientras que la suposición 2 solo es necesaria para el 3000-01-01
predeterminado. fecha. El supuesto 3 es asegurarse de que no tenga grandes espacios vacíos cuando tenga que emitir muchas consultas vacías.