🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 47.4\. `pg_amop` `pg_amop`表存储有关和访问方法操作符族关联的信息。 如果一个操作符是一个操作符族中的成员,那么在这个表中会占据一行。 一个族成员是一个_search_操作符或一个_ordering_操作符。 一个操作符可以在多个族中出现,但是不能在一个族中的多个搜索位置或多个排序位置中出现。 (尽管不太可能,但这是允许的,一个操作符可以被搜索和排序目的使用。) **Table 47-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 | 如果是一个排序操作符,则为这个项排序所依据的btree操作符族; 如果是一个搜索操作符,则为0 | "搜索"操作符表明这个操作符族的一个索引可以被搜索,找到所有满足 `WHERE` `_indexed_column_` `_operator_` `_constant_`的行。 显然,这样的操作符必须返回布尔值,并且它的左输入类型必须匹配索引的字段数据类型。 "排序"操作符表明这个操作符族的一个索引可以被扫描,返回以 `ORDER BY` `_indexed_column_` `_operator_` `_constant_` 顺序表示的行。这样的操作符可以返回任意可排序的数据类型,它的左输入类型也必须匹配索引的字段数据类型。 `ORDER BY`的确切的语义是由`amopsortfamily`字段指定的, 该字段必须为操作符的返回类型引用一个btree操作符族。 > **Note:** 目前,假设排序操作符的排序顺序是被族缺省引用的,也就是`ASC NULLS LAST`。 这可以通过添加附加的行来明确声明排序选项来释放。 一个项的`amopmethod`必须匹配它包含的操作符族的`opfmethod` (包括`amopmethod`是故意违反性能原因的表结构的规范化)。同样, `amoplefttype`和`amoprighttype`必须匹配引用的 `pg_operator`的`oprleft`和`oprright`。