|
17.5. 操作符表下一个让人感兴趣的表是 pg_opclass . 这个表为索引访问模式支持的每个操作符表定义操作符表名称和输入数据类型. 这个表名称可以被若干个不同的访问模式使用(比如,B-tree 和散列访问 模式都有名为 oid_ops 的操作符),但是每种访问模式 的记录中必须出现一个不同的 pg_opclass 行. pg_opclass 行的 OID 被其它表用做外键,这样就把相应的操作符和支持过程和该操作符表关联起来了. 你需要向 pg_opclass 中增加一个 带你的操作符表的名字(比如, complex_abs_ops )的行∶ 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-tree 操作符表.如果你不想这样,那么只需要把 opcdefault 设为假就可以了. 我们这里没有描述 opckeytype ; 对于 B-tree 操作符表而言,它应该总是零. |