使用order by查询的无序结果

2024-05-23 23:28:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用PostgreSQL的pgr_astar函数来获得最佳路径,我提到结果应该按seq排序:

cur.execute("create table %s as SELECT a.seq, a.id1 AS node, a.id2 AS edge, 
b.source, b.target, b.cost, b.reverse_cost, b.km, b.%s, b.%s, b.estimated_time as time, b.ang_elev, b.geom_way
FROM pgr_astar ('SELECT id, source, target, cost as cost, x1, y1, x2, y2, reverse_cost FROM chicago_2po_4pgr', %s, %s, true, true) as a
LEFT JOIN chicago_2po_4pgr as b  ON a.id2 = b.id order by seq    
 " %(nom_table,colonne_cost,colonne_cost_reverse,depart,destination)) 

我得到这个结果(序列不是有序的)

0
.
.
124
125
135
136
137
138
139
140
129
130
131
132
133
134

有什么建议吗?如何修改此查询以获得有序结果。你知道吗


Tags: fromidsourcetargettimeastableselect
1条回答
网友
1楼 · 发布于 2024-05-23 23:28:01

您是如何从用显示的语句创建的表中查询行的?你知道吗

虽然所显示查询中的ORDER BY应该正常工作,但这只是对新创建的表中的物理行进行排序。但行的物理顺序可能会发生变化。VACUUM和其他后台进程可以自由地对行重新排序。对表的任何写访问也会这样做。你知道吗

另外,更重要的是,SELECT * FROM tbl不必按当前物理顺序返回行。虽然按物理顺序返回行通常是最快的方法,而且Postgres通常只会这样做,但这种方法并不能保证。必须附加另一个ORDER BY才能获得排序的行(这与测试当前物理排序顺序的目的不符)。你知道吗

测试行的当前物理顺序,如下所示:

SELECT ctid, * FROM tbl ORDER BY ctid;

ctid的解释:

并通过在没有CREATE TABLE AS的情况下运行来验证问题中的原始SELECT,您将看到完全排序的行。。。你知道吗

相关:

相关问题 更多 >