3

まず、postgresqlの経験があまりないので、お詫び申し上げます。最近、サーバーをpostgresqlバージョン8.3からバージョン9にアップグレードしました。データを復元した後、クエリの1つで演算子の問題が発生し、解決できませんでした。私はクエリしようとしています:

database =#>>limit1を使用してbboxによるdemsの順序からbboxを選択します。

bboxは、ボックスタイプのテーブルdemsの列です。

結果が得られます:

エラー:演算子>>は有効な順序付け演算子ではありません

1行目:>> limit 1を使用して、bboxによるdemsの順序からbboxを選択します。

ヒント:順序付け演算子は、btree演算子ファミリの「<」または「>」メンバーである必要があります。

「>>」演算子はタイプボックスのpostgresqlに組み込まれていると思いましたが、ここで何が間違っているのか疑問に思っています。クエリはバージョン8.3で完全に機能しました。私の古い同僚が元のコードを書き、サーバーをセットアップしたので、いくつかの復元手順が欠落している可能性があります。どんな助けでも素晴らしいでしょう、私はその間ドキュメントを読み続けます。

ありがとう!

4

1 に答える 1

0

ここでの基本的な問題は、含まれているボックスのツリーを単純に並べ替えて生成しようとしているように見えることです。注文はこれを行う方法ではありません。代わりに、再帰クエリとウィンドウ関数を使用します (どちらも 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, ',');

実際にここでツリーを作成する必要があります。

于 2013-02-14T02:03:32.870 に答える