如何重新组织postgres表中的记录并将其永久保存

时间:2019-07-14 11:09:50

标签: sql postgresql

我具有以下表格结构

id      name
--------------
10991   Shoug 
10990   Moneera 
10989   Abc
10988   xyz

id是主键列,如您所见,id是按降序排列的(即:select * from users以此顺序返回记录),原因是插入数据的方式不同。

如何永久地以主键的升序重新排序表?最好单独使用SQL?

我找到了this answer,但它对我不起作用。我正在使用Postgres作为数据库。

2 个答案:

答案 0 :(得分:2)

  

如何永久地以主键的升序重新排序表?

您缺少有关关系数据库的基本概念。在SQL中,表表示无序集。没有“永久”排序。唯一的排序由查询中的order by子句提供。

某些数据库支持称为“集群” /“集群索引”的概念。这意味着数据页上的数据实际上是根据某些键排序的。在这些数据库中,即使在使用带有聚集索引的表时,仍然不能保证以任何特定顺序返回数据。除非您使用ORDER BY

Postgres不支持此功能,因此甚至不可用。

答案 1 :(得分:0)

显然在Postgres中是不可能的。

很好奇您的用例是什么。我正在研究在Postgres中将UUID用作PK的任何缺点,这使我进入了您的帖子。由于pg不会根据PK在物理上对数据重新排序,因此我得出结论,只有大小(与传统序列相比)会有所不同。我更习惯于SQL Server创建群集索引并默认对数据重新排序。

正如您在OP中的链接所建议的那样,您可以强制其重新排序,但它不是持久性的。 Postgres还具有CLUSTER命令来执行此操作。不过,这确实可以锁定您的桌子。

https://www.postgresql.org/docs/current/sql-cluster.html

https://dba.stackexchange.com/questions/38710/how-does-postgresql-physically-order-new-records-on-disk-after-a-cluster-on-pri