有没有办法避免PostgreSQL将更新的行作为最后一行?

时间:2014-11-23 19:03:58

标签: postgresql

好吧,我的问题是每次我更新一行时,这一行都会转到表格的最后一个位置。放在哪里并不重要。

我在这篇文章Postgresql: row number changes on update中读到,关系表中的行没有排序。那么,为什么当我执行select * from table;时,我总是得到相同的订单?

无论如何,我不想开始讨论,只是为了知道是否有任何方法不让更新句子将行放在最后一个位置。

编辑以获取更多信息:

我真的不想得到所有结果。我用Java编写了2个按钮,nextprevious,并且仍然是一个初学者,我必须获得下一行或上一行的唯一方法是使用select * from table limit 1并添加offset num++offset num--取决于点击的按钮。因此,当我执行更新时,我丢失了初始订单(插入订单)。

感谢。

1 个答案:

答案 0 :(得分:0)

您可以在表格中留出一些空间以进行更新。将填充因子从默认的100%更改为页面上没有更新的空间,更少为更新创建空间。

来自manual(创建表格):

  

fillfactor(整数)

     

表的fillfactor是百分比   10到100之间.100(完全包装)是默认值。当一个   指定较小的fillfactor,INSERT操作打包表页   仅达到指定的百分比;每页上的剩余空间是   保留用于更新该页面上的行。这为UPDATE提供了机会   将行的更新副本放在与原始页面相同的页面上,   这比将它放在不同的页面上效率更高。为一个   条目永远不会更新的表格,完整的包装是最好的   选择,但在更新的表中,较小的填充因子是   适当。无法为TOAST表设置此参数。

但是如果查询中没有ORDER BY,则无法保证结果集的排序方式与预期排序方式相同。没有填充因子可以改变它。