gooderp18绿色标准版
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

150 行
13KB

  1. <?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>CREATE OPERATOR CLASS</title><link rel="stylesheet" type="text/css" href="stylesheet.css" /><link rev="made" href="pgsql-docs@lists.postgresql.org" /><meta name="generator" content="DocBook XSL Stylesheets V1.79.1" /><link rel="prev" href="sql-createoperator.html" title="CREATE OPERATOR" /><link rel="next" href="sql-createopfamily.html" title="CREATE OPERATOR FAMILY" /></head><body><div xmlns="http://www.w3.org/TR/xhtml1/transitional" class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="5" align="center">CREATE OPERATOR CLASS</th></tr><tr><td width="10%" align="left"><a accesskey="p" href="sql-createoperator.html" title="CREATE OPERATOR">Prev</a> </td><td width="10%" align="left"><a accesskey="u" href="sql-commands.html" title="SQL Commands">Up</a></td><th width="60%" align="center">SQL Commands</th><td width="10%" align="right"><a accesskey="h" href="index.html" title="PostgreSQL 12.4 Documentation">Home</a></td><td width="10%" align="right"> <a accesskey="n" href="sql-createopfamily.html" title="CREATE OPERATOR FAMILY">Next</a></td></tr></table><hr></hr></div><div class="refentry" id="SQL-CREATEOPCLASS"><div class="titlepage"></div><a id="id-1.9.3.73.1" class="indexterm"></a><div class="refnamediv"><h2><span class="refentrytitle">CREATE OPERATOR CLASS</span></h2><p>CREATE OPERATOR CLASS — define a new operator class</p></div><div class="refsynopsisdiv"><h2>Synopsis</h2><pre class="synopsis">
  3. CREATE OPERATOR CLASS <em class="replaceable"><code>name</code></em> [ DEFAULT ] FOR TYPE <em class="replaceable"><code>data_type</code></em>
  4. USING <em class="replaceable"><code>index_method</code></em> [ FAMILY <em class="replaceable"><code>family_name</code></em> ] AS
  5. { OPERATOR <em class="replaceable"><code>strategy_number</code></em> <em class="replaceable"><code>operator_name</code></em> [ ( <em class="replaceable"><code>op_type</code></em>, <em class="replaceable"><code>op_type</code></em> ) ] [ FOR SEARCH | FOR ORDER BY <em class="replaceable"><code>sort_family_name</code></em> ]
  6. | FUNCTION <em class="replaceable"><code>support_number</code></em> [ ( <em class="replaceable"><code>op_type</code></em> [ , <em class="replaceable"><code>op_type</code></em> ] ) ] <em class="replaceable"><code>function_name</code></em> ( <em class="replaceable"><code>argument_type</code></em> [, ...] )
  7. | STORAGE <em class="replaceable"><code>storage_type</code></em>
  8. } [, ... ]
  9. </pre></div><div class="refsect1" id="id-1.9.3.73.5"><h2>Description</h2><p>
  10. <code class="command">CREATE OPERATOR CLASS</code> creates a new operator class.
  11. An operator class defines how a particular data type can be used with
  12. an index. The operator class specifies that certain operators will fill
  13. particular roles or <span class="quote">“<span class="quote">strategies</span>”</span> for this data type and this
  14. index method. The operator class also specifies the support functions to
  15. be used by
  16. the index method when the operator class is selected for an
  17. index column. All the operators and functions used by an operator
  18. class must be defined before the operator class can be created.
  19. </p><p>
  20. If a schema name is given then the operator class is created in the
  21. specified schema. Otherwise it is created in the current schema.
  22. Two operator classes in the same schema can have the same name only if they
  23. are for different index methods.
  24. </p><p>
  25. The user who defines an operator class becomes its owner. Presently,
  26. the creating user must be a superuser. (This restriction is made because
  27. an erroneous operator class definition could confuse or even crash the
  28. server.)
  29. </p><p>
  30. <code class="command">CREATE OPERATOR CLASS</code> does not presently check
  31. whether the operator class definition includes all the operators and
  32. functions required by the index method, nor whether the operators and
  33. functions form a self-consistent set. It is the user's
  34. responsibility to define a valid operator class.
  35. </p><p>
  36. Related operator classes can be grouped into <em class="firstterm">operator
  37. families</em>. To add a new operator class to an existing family,
  38. specify the <code class="literal">FAMILY</code> option in <code class="command">CREATE OPERATOR
  39. CLASS</code>. Without this option, the new class is placed into
  40. a family named the same as the new class (creating that family if
  41. it doesn't already exist).
  42. </p><p>
  43. Refer to <a class="xref" href="xindex.html" title="37.16. Interfacing Extensions to Indexes">Section 37.16</a> for further information.
  44. </p></div><div class="refsect1" id="id-1.9.3.73.6"><h2>Parameters</h2><div class="variablelist"><dl class="variablelist"><dt><span class="term"><em class="replaceable"><code>name</code></em></span></dt><dd><p>
  45. The name of the operator class to be created. The name can be
  46. schema-qualified.
  47. </p></dd><dt><span class="term"><code class="literal">DEFAULT</code></span></dt><dd><p>
  48. If present, the operator class will become the default
  49. operator class for its data type. At most one operator class
  50. can be the default for a specific data type and index method.
  51. </p></dd><dt><span class="term"><em class="replaceable"><code>data_type</code></em></span></dt><dd><p>
  52. The column data type that this operator class is for.
  53. </p></dd><dt><span class="term"><em class="replaceable"><code>index_method</code></em></span></dt><dd><p>
  54. The name of the index method this operator class is for.
  55. </p></dd><dt><span class="term"><em class="replaceable"><code>family_name</code></em></span></dt><dd><p>
  56. The name of the existing operator family to add this operator class to.
  57. If not specified, a family named the same as the operator class is
  58. used (creating it, if it doesn't already exist).
  59. </p></dd><dt><span class="term"><em class="replaceable"><code>strategy_number</code></em></span></dt><dd><p>
  60. The index method's strategy number for an operator
  61. associated with the operator class.
  62. </p></dd><dt><span class="term"><em class="replaceable"><code>operator_name</code></em></span></dt><dd><p>
  63. The name (optionally schema-qualified) of an operator associated
  64. with the operator class.
  65. </p></dd><dt><span class="term"><em class="replaceable"><code>op_type</code></em></span></dt><dd><p>
  66. In an <code class="literal">OPERATOR</code> clause,
  67. the operand data type(s) of the operator, or <code class="literal">NONE</code> to
  68. signify a left-unary or right-unary operator. The operand data
  69. types can be omitted in the normal case where they are the same
  70. as the operator class's data type.
  71. </p><p>
  72. In a <code class="literal">FUNCTION</code> clause, the operand data type(s) the
  73. function is intended to support, if different from
  74. the input data type(s) of the function (for B-tree comparison functions
  75. and hash functions)
  76. or the class's data type (for B-tree sort support functions and all
  77. functions in GiST, SP-GiST, GIN and BRIN operator classes). These defaults
  78. are correct, and so <em class="replaceable"><code>op_type</code></em> need not be specified in
  79. <code class="literal">FUNCTION</code> clauses, except for the case of a B-tree sort
  80. support function that is meant to support cross-data-type comparisons.
  81. </p></dd><dt><span class="term"><em class="replaceable"><code>sort_family_name</code></em></span></dt><dd><p>
  82. The name (optionally schema-qualified) of an existing <code class="literal">btree</code> operator
  83. family that describes the sort ordering associated with an ordering
  84. operator.
  85. </p><p>
  86. If neither <code class="literal">FOR SEARCH</code> nor <code class="literal">FOR ORDER BY</code> is
  87. specified, <code class="literal">FOR SEARCH</code> is the default.
  88. </p></dd><dt><span class="term"><em class="replaceable"><code>support_number</code></em></span></dt><dd><p>
  89. The index method's support function number for a
  90. function associated with the operator class.
  91. </p></dd><dt><span class="term"><em class="replaceable"><code>function_name</code></em></span></dt><dd><p>
  92. The name (optionally schema-qualified) of a function that is an
  93. index method support function for the operator class.
  94. </p></dd><dt><span class="term"><em class="replaceable"><code>argument_type</code></em></span></dt><dd><p>
  95. The parameter data type(s) of the function.
  96. </p></dd><dt><span class="term"><em class="replaceable"><code>storage_type</code></em></span></dt><dd><p>
  97. The data type actually stored in the index. Normally this is
  98. the same as the column data type, but some index methods
  99. (currently GiST, GIN and BRIN) allow it to be different. The
  100. <code class="literal">STORAGE</code> clause must be omitted unless the index
  101. method allows a different type to be used.
  102. If the column <em class="replaceable"><code>data_type</code></em> is specified
  103. as <code class="type">anyarray</code>, the <em class="replaceable"><code>storage_type</code></em>
  104. can be declared as <code class="type">anyelement</code> to indicate that the index
  105. entries are members of the element type belonging to the actual array
  106. type that each particular index is created for.
  107. </p></dd></dl></div><p>
  108. The <code class="literal">OPERATOR</code>, <code class="literal">FUNCTION</code>, and <code class="literal">STORAGE</code>
  109. clauses can appear in any order.
  110. </p></div><div class="refsect1" id="id-1.9.3.73.7"><h2>Notes</h2><p>
  111. Because the index machinery does not check access permissions on functions
  112. before using them, including a function or operator in an operator class
  113. is tantamount to granting public execute permission on it. This is usually
  114. not an issue for the sorts of functions that are useful in an operator
  115. class.
  116. </p><p>
  117. The operators should not be defined by SQL functions. A SQL function
  118. is likely to be inlined into the calling query, which will prevent
  119. the optimizer from recognizing that the query matches an index.
  120. </p><p>
  121. Before <span class="productname">PostgreSQL</span> 8.4, the <code class="literal">OPERATOR</code>
  122. clause could include a <code class="literal">RECHECK</code> option. This is no longer
  123. supported because whether an index operator is <span class="quote">“<span class="quote">lossy</span>”</span> is now
  124. determined on-the-fly at run time. This allows efficient handling of
  125. cases where an operator might or might not be lossy.
  126. </p></div><div class="refsect1" id="id-1.9.3.73.8"><h2>Examples</h2><p>
  127. The following example command defines a GiST index operator class
  128. for the data type <code class="literal">_int4</code> (array of <code class="type">int4</code>). See the
  129. <a class="xref" href="intarray.html" title="F.18. intarray">intarray</a> module for the complete example.
  130. </p><pre class="programlisting">
  131. CREATE OPERATOR CLASS gist__int_ops
  132. DEFAULT FOR TYPE _int4 USING gist AS
  133. OPERATOR 3 &amp;&amp;,
  134. OPERATOR 6 = (anyarray, anyarray),
  135. OPERATOR 7 @&gt;,
  136. OPERATOR 8 &lt;@,
  137. OPERATOR 20 @@ (_int4, query_int),
  138. FUNCTION 1 g_int_consistent (internal, _int4, smallint, oid, internal),
  139. FUNCTION 2 g_int_union (internal, internal),
  140. FUNCTION 3 g_int_compress (internal),
  141. FUNCTION 4 g_int_decompress (internal),
  142. FUNCTION 5 g_int_penalty (internal, internal, internal),
  143. FUNCTION 6 g_int_picksplit (internal, internal),
  144. FUNCTION 7 g_int_same (_int4, _int4, internal);
  145. </pre></div><div class="refsect1" id="id-1.9.3.73.9"><h2>Compatibility</h2><p>
  146. <code class="command">CREATE OPERATOR CLASS</code> is a
  147. <span class="productname">PostgreSQL</span> extension. There is no
  148. <code class="command">CREATE OPERATOR CLASS</code> statement in the SQL
  149. standard.
  150. </p></div><div class="refsect1" id="id-1.9.3.73.10"><h2>See Also</h2><span class="simplelist"><a class="xref" href="sql-alteropclass.html" title="ALTER OPERATOR CLASS"><span class="refentrytitle">ALTER OPERATOR CLASS</span></a>, <a class="xref" href="sql-dropopclass.html" title="DROP OPERATOR CLASS"><span class="refentrytitle">DROP OPERATOR CLASS</span></a>, <a class="xref" href="sql-createopfamily.html" title="CREATE OPERATOR FAMILY"><span class="refentrytitle">CREATE OPERATOR FAMILY</span></a>, <a class="xref" href="sql-alteropfamily.html" title="ALTER OPERATOR FAMILY"><span class="refentrytitle">ALTER OPERATOR FAMILY</span></a></span></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="sql-createoperator.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="sql-commands.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="sql-createopfamily.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">CREATE OPERATOR </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> CREATE OPERATOR FAMILY</td></tr></table></div></body></html>
上海开阖软件有限公司 沪ICP备12045867号-1