ALTER OPERATOR FAMILY <refpurpose>change the definition of an operator family</refpurpose> — 演算子族の定義を変更する
ALTER OPERATOR FAMILYname
USINGindex_method
ADD { OPERATORstrategy_number
operator_name
(op_type
,op_type
) [ FOR SEARCH | FOR ORDER BYsort_family_name
] | FUNCTIONsupport_number
[ (op_type
[ ,op_type
] ) ]function_name
[ (argument_type
[, ...] ) ] } [, ... ] ALTER OPERATOR FAMILYname
USINGindex_method
DROP { OPERATORstrategy_number
(op_type
[ ,op_type
] ) | FUNCTIONsupport_number
(op_type
[ ,op_type
] ) } [, ... ] ALTER OPERATOR FAMILYname
USINGindex_method
RENAME TOnew_name
ALTER OPERATOR FAMILYname
USINGindex_method
OWNER TO {new_owner
| CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER OPERATOR FAMILYname
USINGindex_method
SET SCHEMAnew_schema
<command>ALTER OPERATOR FAMILY</command> changes the definition of
an operator family. You can add operators and support functions
to the family, remove them from the family,
or change the family's name or owner.
ALTER OPERATOR FAMILY
は演算子族の定義を変更します。
演算子やサポート関数を演算子族に追加することやそれらを演算子族から削除すること、演算子族の名前や所有者を変更することが可能です。
When operators and support functions are added to a family with
<command>ALTER OPERATOR FAMILY</command>, they are not part of any
specific operator class within the family, but are just <quote>loose</quote>
within the family. This indicates that these operators and functions
are compatible with the family's semantics, but are not required for
correct functioning of any specific index. (Operators and functions
that are so required should be declared as part of an operator class,
instead; see <xref linkend="sql-createopclass"/>.)
<productname>PostgreSQL</productname> will allow loose members of a
family to be dropped from the family at any time, but members of an
operator class cannot be dropped without dropping the whole class and
any indexes that depend on it.
Typically, single-data-type operators
and functions are part of operator classes because they are needed to
support an index on that specific data type, while cross-data-type
operators and functions are made loose members of the family.
ALTER OPERATOR FAMILY
を使用して演算子とサポート関数が演算子族に追加される時、これらは演算子族内の特定の演算子クラスの一部とはならず、単に演算子族内で「自由」なものになります。
これは、これらの演算子と関数が演算子族と意味的な互換性を持つが、特定のインデックスの正しい動作には必要とされないことを意味します。
(必要な演算子と関数は演算子クラスの一部として宣言しなければなりません。
CREATE OPERATOR CLASSを参照してください。)
PostgreSQLでは演算子族の自由なメンバをいつでも演算子族から削除することができます。
しかし演算子クラス内のメンバは、クラス全体と依存するインデックスすべてを削除しなければ削除することはできません。
通常、単一データ型の演算子と関数は、特定のデータ型に対するインデックスをサポートするために必要ですので、演算子クラスの一部となります。
一方、データ型を跨る演算子と関数は、演算子族内の自由なメンバとなります。
You must be a superuser to use <command>ALTER OPERATOR FAMILY</command>.
(This restriction is made because an erroneous operator family definition
could confuse or even crash the server.)
ALTER OPERATOR FAMILY
を使用するには、スーパーユーザでなければなりません
(誤った演算子族定義はサーバを混乱させクラッシュさせることさえありますので、この制限がなされています)。
<command>ALTER OPERATOR FAMILY</command> does not presently check
whether the operator family definition includes all the operators and
functions required by the index method, nor whether the operators and
functions form a self-consistent set. It is the user's
responsibility to define a valid operator family.
現時点ではALTER OPERATOR FAMILY
は、インデックスメソッドで必要とされる演算子族がすべての演算子と関数を含んでいるかどうかを検査しません。
また、演算子と関数が自身で整合性のある集合を形成しているかどうかも検査しません。
有効な演算子族を定義することはユーザの責任です。
Refer to <xref linkend="xindex"/> for further information. 詳細は36.16を参照してください。
name
The name (optionally schema-qualified) of an existing operator family. 既存の演算子族の名前です(スキーマ修飾可)。
index_method
The name of the index method this operator family is for. 演算子族が対象とするインデックスメソッドの名前です。
strategy_number
The index method's strategy number for an operator associated with the operator family. 演算子族と関連した演算子に対するインデックスメソッドの戦略番号です。
operator_name
The name (optionally schema-qualified) of an operator associated with the operator family. 演算子族と関連した演算子の名前です(スキーマ修飾可)。
op_type
In an <literal>OPERATOR</literal> clause,
the operand data type(s) of the operator, or <literal>NONE</literal> to
signify a prefix operator. Unlike the comparable
syntax in <command>CREATE OPERATOR CLASS</command>, the operand data types
must always be specified.
OPERATOR
句では演算子の入力データ型、または前置演算子を表すNONE
です。
CREATE OPERATOR CLASS
と類似の構文と異なり、入力データ型を常に指定しなければなりません。
In an <literal>ADD FUNCTION</literal> clause, the operand data type(s) the
function is intended to support, if different from
the input data type(s) of the function. For B-tree comparison functions
and hash functions it is not necessary to specify <replaceable
class="parameter">op_type</replaceable> since the function's input
data type(s) are always the correct ones to use. For B-tree sort
support functions, B-Tree equal image functions, and all
functions in GiST, SP-GiST and GIN operator classes, it is
necessary to specify the operand data type(s) the function is to
be used with.
ADD FUNCTION
句では、関数がサポートする予定の入力データ型です(関数の入力データ型と異なる場合)。
B-tree比較関数およびHash関数では、関数の入力データ型は常に正しく使用するデータ型であるため、op_type
を指定する必要がありません。
B-treeソートサポート関数、B-tree等価イメージ関数とGiST、SP-GiST、GIN演算子クラスのすべての関数では、関数が使用する入力データ型を指定する必要があります。
In a <literal>DROP FUNCTION</literal> clause, the operand data type(s) the
function is intended to support must be specified.
DROP FUNCTION
句では、関数がサポートする予定の入力データ型を指定しなければなりません。
sort_family_name
The name (optionally schema-qualified) of an existing <literal>btree</literal> operator
family that describes the sort ordering associated with an ordering
operator.
順序付け演算子に関連するソート順序を記述する、既存のbtree
演算子族の名前(スキーマ修飾も可)です。
If neither <literal>FOR SEARCH</literal> nor <literal>FOR ORDER BY</literal> is
specified, <literal>FOR SEARCH</literal> is the default.
FOR SEARCH
もFOR ORDER BY
も指定されない場合、FOR SEARCH
がデフォルトです。
support_number
The index method's support function number for a function associated with the operator family. 演算子族に関連する関数用のインデックスメソッドのサポート関数の番号です。
function_name
The name (optionally schema-qualified) of a function that is an index method support function for the operator family. If no argument list is specified, the name must be unique in its schema. 演算子族用のインデックスメソッドのサポート関数となる関数の名前です(スキーマ修飾名でも可)。 引数リストを指定しない場合、名前はスキーマ内で一意でなければなりません。
argument_type
The parameter data type(s) of the function. 関数のパラメータのデータ型です。
new_name
The new name of the operator family. 演算子族の新しい名前です。
new_owner
The new owner of the operator family. 演算子族の新しい所有者です。
new_schema
The new schema for the operator family. 演算子族の新しいスキーマです。
The <literal>OPERATOR</literal> and <literal>FUNCTION</literal>
clauses can appear in any order.
OPERATOR
とFUNCTION
句は任意の順番で記述できます。
Notice that the <literal>DROP</literal> syntax only specifies the <quote>slot</quote>
in the operator family, by strategy or support number and input data
type(s). The name of the operator or function occupying the slot is not
mentioned. Also, for <literal>DROP FUNCTION</literal> the type(s) to specify
are the input data type(s) the function is intended to support; for
GiST, SP-GiST and GIN indexes this might have nothing to do with the actual
input argument types of the function.
DROP
構文が、戦略番号またはサポート番号と入力データ型という、演算子族の「スロット」のみを指定していることに注意してください。
そのスロットに存在する演算子または関数の名前については言及されません。
また、DROP FUNCTION
では、指定する型は関数がサポートする予定の入力データ型です。
GiST、SP-GiSTおよびGINインデックスでは、関数の実際の入力引数の型と関連しない可能性があります。
Because the index machinery does not check access permissions on functions before using them, including a function or operator in an operator family is tantamount to granting public execute permission on it. This is usually not an issue for the sorts of functions that are useful in an operator family. インデックス機構は使用する前に関数のアクセス権限を検査しません。 演算子族内の関数や演算子を含めることは、公的な実行権限を与えることと同じです。 これは通常、演算子族内で使用される関数では問題になりません。
The operators should not be defined by SQL functions. An SQL function is likely to be inlined into the calling query, which will prevent the optimizer from recognizing that the query matches an index. 演算子をSQL関数で定義してはいけません。 SQL関数はよく、呼び出し元の問い合わせ内でインライン展開されます。 すると、オプティマイザが問い合わせがインデックスに一致するかどうか認識できなくなります。
Before <productname>PostgreSQL</productname> 8.4, the <literal>OPERATOR</literal>
clause could include a <literal>RECHECK</literal> option. This is no longer
supported because whether an index operator is <quote>lossy</quote> is now
determined on-the-fly at run time. This allows efficient handling of
cases where an operator might or might not be lossy.
PostgreSQL 8.4より前までは、OPERATOR
句にRECHECK
オプションを含めることができました。
インデックス演算子に「損失がある」かどうかは実行時にその場で決定されるようになりましたので、これはサポートされなくなりました。
これにより、演算子に損失があるかもしれないしないかもしれないような場合を効率的に扱うことができるようになりました。
The following example command adds cross-data-type operators and
support functions to an operator family that already contains B-tree
operator classes for data types <type>int4</type> and <type>int2</type>.
以下のコマンド例は、データ型を跨る演算子とサポート関数をint4
とint2
データ型用のB-Tree演算子クラスをすでに含む演算子族に追加します。
ALTER OPERATOR FAMILY integer_ops USING btree ADD -- int4 vs int2 OPERATOR 1 < (int4, int2) , OPERATOR 2 <= (int4, int2) , OPERATOR 3 = (int4, int2) , OPERATOR 4 >= (int4, int2) , OPERATOR 5 > (int4, int2) , FUNCTION 1 btint42cmp(int4, int2) , -- int2 vs int4 OPERATOR 1 < (int2, int4) , OPERATOR 2 <= (int2, int4) , OPERATOR 3 = (int2, int4) , OPERATOR 4 >= (int2, int4) , OPERATOR 5 > (int2, int4) , FUNCTION 1 btint24cmp(int2, int4) ;
To remove these entries again: これらの項目を再度削除します。
ALTER OPERATOR FAMILY integer_ops USING btree DROP -- int4 vs int2 OPERATOR 1 (int4, int2) , OPERATOR 2 (int4, int2) , OPERATOR 3 (int4, int2) , OPERATOR 4 (int4, int2) , OPERATOR 5 (int4, int2) , FUNCTION 1 (int4, int2) , -- int2 vs int4 OPERATOR 1 (int2, int4) , OPERATOR 2 (int2, int4) , OPERATOR 3 (int2, int4) , OPERATOR 4 (int2, int4) , OPERATOR 5 (int2, int4) , FUNCTION 1 (int2, int4) ;
There is no <command>ALTER OPERATOR FAMILY</command> statement in
the SQL standard.
標準SQLにはALTER OPERATOR FAMILY
文はありません。