更新是否会更改PostgreSQL中表中记录的顺序?

kof*_*rts 2 postgresql ruby-on-rails sql-order-by

我的代码取决于表中记录的顺序。我的假设是,可以将表视为列表,以便记录保持顺序。我有一个小的更新代码,如下所示,它将更新表中特定索引处的记录。

p = pieces[index]

p.position = 0

p.save
Run Code Online (Sandbox Code Playgroud)

我检查了此更新之前和此更新之后的记录顺序,然后看到更新之后,已更新的记录已移至列表的最后。我打印Piece.all以打印列表。该命令在mysql中维护,但是当我将其部署到使用postgre的heroku时,该命令没有得到维护,因此这对我来说是一个令人惊讶的发现。

表中没有顺序的保证,并且不应该依赖顺序吗?请纠正我的误会,并感谢您的澄清。

gre*_*awk 6

以我的诚实意见,您永远不应依赖顺序。

除非您添加order by子句,否则根据sql规范,行将以未指定的顺序返回。在Postgres中,这意味着您将基本上按照活动行在磁盘上读取的顺序获得行。

MySQL倾向于按插入顺序返回行,这就是为什么您看到行为不同的原因。

如果您希望它们始终按创建顺序返回,则可以使用 Item.order("created_at")

  • OP 在最初的问题中引用 MySQL 作为基本参考:“顺序在 mysql 中维护,但当我将其部署到使用 postgre 的 Heroku 时,顺序没有维护,所以这对我来说是一个令人惊讶的发现。” (2认同)