[pgsql-jp: 28038] Re: Polygon型カラムにインデックスが作成できない

abe-h @ shinetsu-tecsys.co.jp abe-h @ shinetsu-tecsys.co.jp
2002年 11月 21日 (木) 10:36:50 JST


安部です。

座光寺@ファルコン様ありがとうございます。

> indexタプルのサイズは、0x1FFF(8191bytes)に制限されています。
>  src/include/access/itup.h:71

結局、8191bytes以上については、作成できないということですね。
少し、本件とはズレますがPath型についても、8191bytesを超えるような
巨大Pathがあったとしたら、インデックス作成はできないということでよろしいでしょうか?

> それに「poly_ops」って結局は、そのポリゴンの外接矩形でのunionやintersect
> しかチェックしてないです。
>  src/backend/access/rtree/rtproc.c:100〜
> なので、ポリゴン同士の正確な重なりはチェックされていないと思います。

そうなのですか。
勉強になりました。

> 自分は、box_opsを使ってポリゴンデータとは別に外接矩形のboxデータを付加す
> る形でrtreeを利用していますし、以前インデックス上でポリゴンの正確な重なり
> や包含をチェックするデータ型を作ってみたこともありますが、インデックスに
> ポリゴンの全構成点を格納する必要があり、上記indexタプルサイズの制約から
> 小さなポリゴンしか管理できず、挫折したことがあります。

大変参考になりました。

もしよろしければ、もう少しご教示をお願いしたいのですが。
結局、「poly_ops」で空間検索するのと「box_ops」で空間検索するのとでは同等ということでしょうか?
また、上記の「ポリゴンデータとは別に」とは、
create table spatial(id varchar(20), category varchar(10),
area varchar(10), men polygon, men_box box);
のようなテーブルで、
create index boxidx on spatial using rtree(men_box box_ops);
のようなインデックスを作成するということですか?
(men_boxには、box(men)のデータが入るという前提です)

質問ばかりになってしまいましたが、どうぞよろしくお願い致します。




pgsql-jp メーリングリストの案内