アプリを MySQL から Postgres に移行しました。以前は、.all の要求はすべての行を ID 順に返しました。Postgres では、行が順不同で返されます。同じく、
Person.first
以前は ID 1 のレコードを返していましたが、現在は別のレコードを返すことがあります。
次のような順序句を追加すると:
Person.order("id").first
クエリは成功し、最初の行が返されます。これは予想される動作ですか?
アプリを MySQL から Postgres に移行しました。以前は、.all の要求はすべての行を ID 順に返しました。Postgres では、行が順不同で返されます。同じく、
Person.first
以前は ID 1 のレコードを返していましたが、現在は別のレコードを返すことがあります。
次のような順序句を追加すると:
Person.order("id").first
クエリは成功し、最初の行が返されます。これは予想される動作ですか?
この投稿はあなたの質問に答えます:
ID による順序付けがデフォルトで保証されているとは思いません。順序付けされていないクエリがどのように返されるかはデータベース次第だと思うからです。次のように、モデルの上部にデフォルトのスコープを定義することで、順序付けすることができます。
default_scope order('id ASC')
次に、Model.all を呼び出すことは、Model.order('id ASC') を呼び出すことと同じです。