pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
下一个我们关心的表是 pg_opclass。这个表为给定索引访问方法所支持的每个操作符类定义操作符类名和输入数据类型。同一个类名可以用于多个不同的访问方法(例如,B-树和哈希访问方法都有名为 oid_ops 的操作符类),但每个访问方法必须在 pg_opclass 中有单独的一行。pg_opclass 行的 OID 被用作其他表中的外键,以把具体的操作符和支持例程与该操作符类关联起来。
你需要把带有你的操作符类名(例如 complex_abs_ops)的一行添加到 pg_opclass:
INSERT INTO pg_opclass (opcamid, opcname, opcintype, opcdefault, opckeytype)
VALUES (
(SELECT oid FROM pg_am WHERE amname = 'btree'),
'complex_abs_ops',
(SELECT oid FROM pg_type WHERE typname = 'complex'),
true,
0);
SELECT oid, *
FROM pg_opclass
WHERE opcname = 'complex_abs_ops';
oid | opcamid | opcname | opcintype | opcdefault | opckeytype
--------+---------+-----------------+-----------+------------+------------
277975 | 403 | complex_abs_ops | 277946 | t | 0
(1 row)
注意,你的 pg_opclass 行的 OID 会不同!不过不必担心。稍后我们会像这里获取类型的 OID 一样从系统中取得这个数。
上述示例假定你希望把这个新操作符类设为 complex 数据类型的默认 B-树操作符类。如果不是这样,只需把 opcdefault 设为 false 即可。opckeytype 在此不作描述;对 B-树操作符类它应当总是为零。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。