1

Temat: postgres problem z limit/offset (stronicowaniem) i sortowaniem

Witam mam problem (ale tylko na 1 bazie postgresowej, na 2 wszystko ok) z pobieraniem danych w zapytaniu typu : ...order by data offset x limit y

Wydaje mi sie ze offset "zaburza " kolejnosc sortowania: moze opisze to na przykladzie
zalozmy ze mam 20 wpisow w tabeli  i wyciagam je sortujac po dacie
1) na poczatku bez stronicowania
wszystko jest ok.
Zalozmy ze wystepuje 5 wpisow o takiej samej dacie (wpisy 8-12)
2) pobieram dane uzywajac stronicowania
a) ..order by data offset 0 limit 10
b) ..order by data offset 10 limit 10

i tutaj zaczyna sie moj problem:
Liczba wpisow o intersujacej mnie dacie jest poprawna 5, jednak nie sa to prawidlowe wpisy
wpisy z zapytania a) i b) o interesujacej mnie dacie czesciowo sie dubluja ( i w sumie nie jest to ten sam wynik co w pkt 1)

Na 2 bazie jak juz pisalem wszystko jest ok

Czy spotkal sie ktos z takim problemem ?? czy jest jakis parametr/opcja ustawiany w bazie rozwiazjacy problem

zupelnie nie mam pojecia o co chodzi...

2

Odp: postgres problem z limit/offset (stronicowaniem) i sortowaniem

A moze konkretny przykład (zawartośc tabeli i wyniki selectow)? Bedzie prościej.

3

Odp: postgres problem z limit/offset (stronicowaniem) i sortowaniem

ok prosze bardzo dane

1. urodziny mamy 3.03.2009
2. urodziny psa     4.03.2009
3. zrobic zakupy    6.03.2009
4. wycieczka do Torunia 7.03.2009
5 premiara plyty 8.03.2009
6 sprzatnij pokoj 9.03.2009
7 gra w pilke 9.03.2009
--tu kluczowe rekordy
8 mecz 10.03.2009
9 piwo 10.03.2009
10 fajny film 10.03.2009
11 zrobic zakupy 10.03.2009
12 kupic plytke 10.03.2009
--koniec kluczowych rekoedow
inne rekordy

pobierajac wszystkie rekordy jest ok
2) pobieram stronicujac
a) offset 0 limit 10
b) offset 10 limit 10
i otrzymuje 2 strony danych -> i patrze na wpisy z data 10.03.2009

lacznie na 2 stronach jest ich prawidlowa ilosc - jednak wpisy sie powtarzaja
np.
mecz 10.03.2009

wystepuje na 1 i 2 stronie (ale na 2 nie wystepuje kupic plytke - zamiast tego wystepuje mecz)

Podalem przykladowe dane bo w rzeczywistosci mam duzo wpisow i zapchalbym forum => ale efekty sa analogiczne

dublowanie wpisow na 2 stronach kosztem innych danych (w przypadku sortowania po polu data)

4

Odp: postgres problem z limit/offset (stronicowaniem) i sortowaniem

No cóż sortujesz po dacie, która powtarza się w kilku wierszach. Sortując coś takiego nie masz pewności które wiersze zostaną zwrócone jako pierwsze, kolejność wpisów w tabeli nie musi mieć znaczenia i nie możesz się nią sugerować podczas sortowania.