首先,我对postgresql不太有经验,所以我很抱歉。最近,我将服务器从PostgreSQLVersion8.3升级到了version 9,在恢复数据之后,在我的一个查询中遇到了运算符的问题,我无法解决这个问题。我想问:
database=#从dems顺序中选择bbox,bbox使用>>限制1;
bbox是我的表dems类型框中的一个列。
我得到了结果:
错误:运算符>>不是有效的排序运算符 第1行:使用>>限制1从dems命令中选择bbox; 提示:排序操作符必须是btree操作符族的"<“或">”。
我认为">>“操作符是内置在postgresql box中的,我想知道我在这里做错了什么。这个查询在8.3版中运行得很好。我的老同事编写了原始代码,并设置了服务器,因此我可能遗漏了几个恢复步骤。任何帮助都会很好,同时我会继续阅读文档。
谢谢!
发布于 2013-02-14 02:03:32
这里您的基本问题是,您似乎试图通过简单地对包含的框进行排序来生成包含它们的树。订购不是这样做的方法。相反,使用with递归查询和window函数(两者都需要8.4或更高版本的iirc)。在这种情况下,类似于:
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, ',');
实际上,你必须在这里创建一棵树。
https://stackoverflow.com/questions/11580387
复制相似问题