Nedeterministické pořadí výsledků SQL dotazů znemožňuje spolehlivou paginaci
API operace, které umožňují paginaci (např. pomocí parametrů limit
a offset
), jsou v některých případech založeny na SQL dotazech s nedeterministickým pořadím. Například, API operace pro bicycle counter detections používá řazení dle ID cyklosčítače (ORDER BY directions_id DESC
), takže pořadí výsledků se stejným directions_id
není definováno (resp. je dáno např. implicitním pořadím zápisů dat na disk). Pokud je v dotazu s nedeterministickým pořadím použita paginace, např. pomocí LIMIT a OFFSET, nelze spoléhat na unikátnost výsledků a plné pokrytí dat:
When using LIMIT, it is important to use an ORDER BY clause that constrains the result rows into a unique order. Otherwise you will get an unpredictable subset of the query's rows. (dokumentace PostgreSQL)
Paginace vyžaduje deterministické pořadí (viz https://use-the-index-luke.com/sql/partial-results/fetch-next-page).
Pro deterministické pořadí a spolehlivou paginaci výsledky dotazů je tedy třeba použít ORDER BY
přes úplný primární klíč. Například pro bicycle counter detections primární klíč zahrnuje kromě directions_id
také locations_id
a measured_from
, takže definice ORDER BY
může vypadat následovně:
const order: string[][] = [["directions_id", "desc"], ["locations_id", "desc"], ["measured_from", "desc"]];