PostgreSQL错误:操作符“>>”不是有效的排序操作符。

3
首先,我对postgresql并不是很有经验,所以我提前道歉。最近,我将服务器从postgresql版本8.3升级到版本9后,在恢复数据后,我的一个查询出现了运算符问题,我无法解决。我正试图查询: “database =#select bbox from dems order by bbox using >> limit 1;”
bbox是我表dems中的一列,类型为box。
我得到结果: “错误:运算符>>不是有效的排序运算符 第1行:选择bbox from dems按bbox使用 >>限制1; 提示:排序运算符必须是btree运算符系列的“<”或“>”成员。”
我认为“>>”运算符已经内置于postgresql的box类型中,想知道我在这里做错了什么。该查询在版本8.3中完美工作。我的老同事编写了原始代码并设置了服务器,所以我可能会错过一些恢复步骤。任何帮助都将是极好的,与此同时我会继续阅读文档。
谢谢!

我认为 >> 不是一个排序运算符,因为 a << ba >> ba = b 都有可能都不成立。 - Andrew Lazarus
我在这里写了关于 ORDER BY .. USING ... 的内容。或许它可以帮助你理解在旧系统中寻找缺失部分的位置。 - A.H.
1个回答

0
你在这里遇到的基本问题是,你似乎试图通过简单地对它们进行排序来生成一个包含盒子树。排序不是做这件事的方法。相反,使用递归查询和窗口函数(都需要8.4或更高版本)来解决。在这种情况下,可以尝试以下代码:
WITH RECURSIVE bbox_tree (id, bbox, level, position, path) AS
( select id, bbox, 1, rownumber() over (order by id), id::text
   from dems
  UNION ALL
 SELECT d.id, d.bbox, t.level + 1, rownumber over (partition by t.id order by d.id),
        p.path || ',' d.id
   FROM dems d
   JOIN bbox_tree t ON t.bbox >> d.bbox )
SELECT bbox FROM  bbox_tree order by string_to_array(t.path, ',');

你实际上需要在这里创建一棵树。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接