pg_amop

PostgreSQL 9.4.4 中文手册
上一页 | 上一级 | 章 48. 系统表 | 下一页

# 48.4. `pg_amop`

`pg_amop`表存储有关和访问方法操作符族关联的信息。 如果一个操作符是一个操作符族中的成员，那么在这个表中会占据一行。 一个族成员是一个search操作符或一个ordering操作符。 一个操作符可以在多个族中出现，但是不能在一个族中的多个搜索位置或多个排序位置中出现。 （尽管不太可能，但这是允许的，一个操作符可以被搜索和排序目的使用。）

表 48-4. `pg_amop` 字段

名字 | 类型 | 引用 | 描述
--- | --- | --- | ---
`oid` | `oid` |  | 行标识符(隐藏属性；必须明确选择)
`amopfamily` | `oid` | ``pg_opfamily`.oid` | 这个项的操作符族
`amoplefttype` | `oid` | ``pg_type`.oid` | 操作符的左输入类型
`amoprighttype` | `oid` | ``pg_type`.oid` | 操作符的右输入类型
`amopstrategy` | `int2` |  | 操作符策略数
`amoppurpose` | `char` |  | 操作符目的, `s`为搜索或`o`为排序
`amopopr` | `oid` | ``pg_operator`.oid` | 该操作符的OID
`amopmethod` | `oid` | ``pg_am`.oid` | 索引访问方式操作符族
`amopsortfamily` | `oid` | ``pg_opfamily`.oid` | 如果是一个排序操作符，则为这个项排序所依据的B-tree操作符族； 如果是一个搜索操作符，则为0

"搜索"操作符表明这个操作符族的一个索引可以被搜索，找到所有满足 `WHERE` `indexed_column` `operator` `constant`的行。 显然，这样的操作符必须返回`boolean`，并且它的左输入类型必须匹配索引的字段数据类型。

"排序"操作符表明这个操作符族的一个索引可以被扫描，返回以 `ORDER BY` `indexed_column` `operator` `constant` 顺序表示的行。这样的操作符可以返回任意可排序的数据类型，它的左输入类型也必须匹配索引的字段数据类型。 `ORDER BY`的确切的语义是由`amopsortfamily`字段指定的， 该字段必须为操作符的返回类型引用一个B-tree操作符族。

> 注意: 目前，假设排序操作符的排序顺序是被操作符族缺省引用的，也就是`ASC NULLS LAST`。 这可以通过添加附加的行来明确声明排序选项来释放。

一个项的`amopmethod`必须匹配它包含的操作符族的`opfmethod` （包括`amopmethod`是故意违反性能原因的表结构的规范化）。同样， `amoplefttype`和`amoprighttype`必须匹配引用的 `pg_operator`的`oprleft`和`oprright`。

上一页 | 起始页 | 下一页
`pg_am` | 上一级 | `pg_amproc`