5

postgres でサーバー側からページネーションを実装しようとしているときに、 limit および offset キーワードを使用しているときに、おそらく主キーである一意の列に ORDER BY 句を指定する必要があることに気付きました。

私の場合、Pkey に UUID 生成を使用しているため、キーが増加する順番に依存することはできません。ORDER BY pkey DESC - 新しい行が常に最上位になるとは限りません。だから私は Created Date 列 - 一意でなければならないタイムスタンプ列を使用することに頼りました。

しかし、私の質問は、UI クライアントが他の列で並べ替えたい場合はどうすればよいでしょうか? 常に一意の列であるとは限らない場合は、postgres ページネーションの予測可能な結果を​​維持するために、ORDER BY user_column, created_dt DESC に頼ります。

これは正しいアプローチですか?私は正しい道を進んでいるかどうかわかりません。お知らせ下さい。

4

2 に答える 2

5

この正確な問題については、古いブログ投稿 (ORM を使用するコンテキストで) で話しました。

並べ替えとページングを組み合わせて使用​​する場合の最後の注意事項。ページングを実装するクエリは、ORDER BY 句にデータ内の経験的なシーケンスを表すフィールドが含まれていない場合、奇妙な結果になる可能性があります。ほとんどの (おそらくすべての) データベース エンジンでは、ORDER BY 句で明示的に指定された順序を超える並べ替え順序は保証されません。例: まったく同じ日に 100 件の注文があり、この日付で並べ替えられたこのデータの最初のページを要求し、次に同じ方法で並べ替えられたデータの 2 ページ目を要求した場合、両方のページで複製されたデータの一部が得られます。そのため、クエリと「並べ替え可能なデータの分布」に応じて、

http://psandler.wordpress.com/2009/11/20/dynamic-search-objects-part-5sorting/

于 2013-08-13T01:40:51.683 に答える