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

Sql 如何重新组织postgres表中的记录并将其永久保存,sql,postgresql,Sql,Postgresql,我有下面的表结构 id name -------------- 10991 Shoug 10990 Moneera 10989 Abc 10988 xyz id是主键列,您可以看到,由于插入数据的方式,id的顺序是递减的(即:select*from users按此顺序返回记录) 如何永久地按主键的升序访问表?最好只使用SQL 我找到了,但它对我不起作用。我使用Postgres作为数据库 如何永久地按主键的升序访问表 您缺少一个关于关系数据库的基本概念。在SQL中,

我有下面的表结构

id      name
--------------
10991   Shoug 
10990   Moneera 
10989   Abc
10988   xyz
id
是主键列,您可以看到,由于插入数据的方式,id的顺序是递减的(即:
select*from users
按此顺序返回记录)

如何永久地按主键的升序访问表?最好只使用SQL

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

如何永久地按主键的升序访问表

您缺少一个关于关系数据库的基本概念。在SQL中,表表示无序集。没有“永久性”订购。查询中的
orderby
子句提供了唯一的排序

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

Postgres不支持此功能,因此即使此功能也不可用

如何永久地按主键的升序访问表

您缺少一个关于关系数据库的基本概念。在SQL中,表表示无序集。没有“永久性”订购。查询中的
orderby
子句提供了唯一的排序

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


Postgres不支持此功能,因此即使这样也不可用。

显然在Postgres中不可能

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

正如OP中的链接所建议的,您可以强制它重新排序,但它不是持久性的。Postgres也有一个集群命令来执行此操作。不过这会锁上你的桌子


显然,在研究生中不可能

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

正如OP中的链接所建议的,您可以强制它重新排序,但它不是持久性的。Postgres也有一个集群命令来执行此操作。不过这会锁上你的桌子


按id从用户订单中选择*
-集合未排序请发布表格定义,是否使用顺序步骤作为-1<代码>从用户中选择*可以按任意顺序返回数据。表本身是无序的,句号。实际上,表序列仅为+1。但是数据是从一个旧的数据库中获取的,在这个数据库中主键的顺序不完全相同,但是因为我们需要保持主键不变,所以处理它的人按原样填充数据库,表是无序的,我明白了。但是我可以重新组织
id
列的asc顺序中的记录吗,以便进一步
select*
正确返回记录?如果没有明确的
order BY
顺序,则无法保证顺序
select*from users order BY id
-集合无序请发布表定义,是否使用顺序步骤为-1<代码>从用户中选择*可以按任意顺序返回数据。表本身是无序的,句号。实际上,表序列仅为+1。但是数据是从一个旧的数据库中获取的,在这个数据库中主键的顺序不完全相同,但是因为我们需要保持主键不变,所以处理它的人按原样填充数据库,表是无序的,我明白了。但是我可以按照
id
列的asc顺序重新组织记录吗,以便进一步
select*
正确返回记录?如果没有明确的
order BY
顺序,则无法保证顺序,谢谢:)简单场景即使使用聚集索引,并行执行计划也可以以与索引不同的顺序返回行,谢谢:)简单的场景即使使用聚集索引,并行执行计划也可以以不同于索引的顺序返回行