我刚刚将我的应用程序从 MySQL 转换为 Postgres。以前,对 .all 的请求会按 id 顺序返回所有行。在 Postgres 上,行被乱序返回。同样地,
Person.first
以前返回 id 为 1 的记录,现在有时返回另一条记录。
如果我添加这样的 order 子句:
Person.order("id").first
查询成功并返回第一行。这是预期的行为吗?
我刚刚将我的应用程序从 MySQL 转换为 Postgres。以前,对 .all 的请求会按 id 顺序返回所有行。在 Postgres 上,行被乱序返回。同样地,
Person.first
以前返回 id 为 1 的记录,现在有时返回另一条记录。
如果我添加这样的 order 子句:
Person.order("id").first
查询成功并返回第一行。这是预期的行为吗?
这篇文章回答了你的问题:
我认为默认情况下不能保证按 ID 排序,因为我相信如何返回无序查询取决于数据库。您可以通过在模型顶部定义默认范围来对其进行排序,如下所示:
default_scope order('id ASC')
然后调用 Model.all 将等效于调用 Model.order('id ASC')。