pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
关于 GIST 的信息在 http://GiST.CS.Berkeley.EDU:8000/gist/, 关于不同索引和排序方案的更多内容在 http://s2k-ftp.CS.Berkeley.EDU:8000/personal/jmh/。 另外还有一些有意思的阅读材料在 http://epoch.cs.berkeley.edu:8000/ 和 http://www.sai.msu.su/~megera/postgres/gist/。
这段摘录来自 Eugene Selkov, Jr.(<selkovjr@mcs.anl.gov>) 发送的一封电子邮件,其中包含关于 GiST 的有用信息。希望我们将来能学到更多并更新这些信息。 - thomas 1998-03-01
好吧,我不能说完全理解了其中的原理,但我(几乎)成功地把 GiST 示例移植到了 linux。GiST 访问方法已经在 postgres 树中(src/backend/access/gist)。
伯克利的示例 附带这些方法的概述,并演示了二维矩形、多边形、整数区间和文本的空间索引机制(另见 伯克利的 GiST)。 在矩形示例中,使用 GiST 索引本应看到性能提升;它对我来说确实有效,但我没有规模足够大的矩形集合来验证这一点。其他示例也都有效,只有多边形除外:执行
test=> create index pix on polytmp test-> using gist (p:box gist_poly_ops) with (islossy); ERROR: cannot open pix (PostgreSQL 6.3 Sun Feb 1 14:57:30 EST 1998)
我没搞懂这条错误消息的含义;它似乎是我们更应该去问开发者的问题(另见下面的注 4)。我这里想建议的是,你们当中的 linux 用户(linux==gcc?)去取上面提到的原始源码并应用我的补丁(见附件),然后告诉我们你们的感受。我觉得很酷,但周围有这么多能人,我不想把它扣着不放。
关于这些源码的几点说明:
1. 我没能用上原始的(HPUX)Makefile,于是把古老的 postgres95 教程里的 Makefile 改了改来干活。我试着让它通用一些,但我写 Makefile 的水平很差——只是做了些照猫画虎的活儿。抱歉,不过我想它现在比原来的 makefile 稍微可移植一点了。
2. 我直接在 pgsql/src 之下构建了示例源码(只是把 tar 文件解压在那里)。前面提到的 Makefile 假定它位于 pgsql/src 下一级(在我们的例子中即 pgsql/src/pggist)。
3. 我对 *.c 文件的改动都只是关于 #include、函数原型和类型转换。除此之外,我只是扔掉了一堆未用的变量,并加了几个括号来取悦 gcc。希望我没有搞砸太多 :)
4. polyproc.sql 中有一条注释:
-- -- there's a memory leak in rtree poly_ops!! -- -- create index pix2 on polytmp using rtree (p poly_ops);
收到!!我以为它可能与几个版本之前的 Postgres 有关,于是试着执行了该查询。我的系统疯了,大约十分钟后我不得不干掉了 postmaster。
我会继续研究一阵子 GiST,但我也希望看到更多 R 树用法的示例。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。