mirror of
https://github.com/postgres/postgres.git
synced 2025-08-22 21:53:06 +03:00
Support range data types.
Selectivity estimation functions are missing for some range type operators, which is a TODO. Jeff Davis
This commit is contained in:
@@ -27,6 +27,15 @@ CREATE TYPE <replaceable class="parameter">name</replaceable> AS
|
||||
CREATE TYPE <replaceable class="parameter">name</replaceable> AS ENUM
|
||||
( [ '<replaceable class="parameter">label</replaceable>' [, ... ] ] )
|
||||
|
||||
CREATE TYPE <replaceable class="parameter">name</replaceable> AS RANGE (
|
||||
SUBTYPE = <replaceable class="parameter">subtype</replaceable>,
|
||||
[ , SUBTYPE_OPCLASS = <replaceable class="parameter">subtype_operator_class</replaceable> ]
|
||||
[ , SUBTYPE_DIFF = <replaceable class="parameter">subtype_diff_function</replaceable> ]
|
||||
[ , CANONICAL = <replaceable class="parameter">canonical_function</replaceable> ]
|
||||
[ , ANALYZE = <replaceable class="parameter">analyze_function</replaceable> ]
|
||||
[ , COLLATION = <replaceable class="parameter">collation</replaceable> ]
|
||||
)
|
||||
|
||||
CREATE TYPE <replaceable class="parameter">name</replaceable> (
|
||||
INPUT = <replaceable class="parameter">input_function</replaceable>,
|
||||
OUTPUT = <replaceable class="parameter">output_function</replaceable>
|
||||
@@ -98,11 +107,61 @@ CREATE TYPE <replaceable class="parameter">name</replaceable>
|
||||
</para>
|
||||
</refsect2>
|
||||
|
||||
<refsect2 id="SQL-CREATETYPE-RANGE">
|
||||
<title>Range Types</title>
|
||||
|
||||
<para>
|
||||
The third form of <command>CREATE TYPE</command> creates a new
|
||||
range type, as described in <xref linkend="rangetypes">.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The <replaceable class="parameter">subtype</replaceable> parameter
|
||||
can be any type with an associated btree opclass (uses the type's
|
||||
default btree operator class unless specified with
|
||||
<replaceable class="parameter">subtype_operator_class</replaceable>).
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The <replaceable class="parameter">subtype_diff</replaceable>
|
||||
function takes two values of type
|
||||
<replaceable class="parameter">subtype</replaceable> as argument, and
|
||||
returns the distance between the two values as
|
||||
<type>double precision</type>. This function is used for GiST indexing
|
||||
(see <xref linkend="gist"> for more information), and should be provided
|
||||
for efficiency.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The <replaceable class="parameter">canonical</replaceable>
|
||||
function takes an argument and returns a value, both of the same
|
||||
type being defined. This is used to convert the range value to a
|
||||
canonical form, when applicable. See <xref linkend="rangetypes">
|
||||
for more information. To define
|
||||
a <replaceable class="parameter">canonical</replaceable> function,
|
||||
you must first create a <firstterm>shell type</>, which is a
|
||||
placeholder type that has no properties except a name and an
|
||||
owner. This is done by issuing the command <literal>CREATE TYPE
|
||||
<replaceable>name</></literal>, with no additional parameters.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The <replaceable class="parameter">analyze</replaceable>
|
||||
function is the same as for creating a base type.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The <replaceable class="parameter">collation</replaceable> option
|
||||
specifies the collation used when determining the total order for
|
||||
the range.
|
||||
</para>
|
||||
</refsect2>
|
||||
|
||||
<refsect2>
|
||||
<title>Base Types</title>
|
||||
|
||||
<para>
|
||||
The third form of <command>CREATE TYPE</command> creates a new base type
|
||||
The fourth form of <command>CREATE TYPE</command> creates a new base type
|
||||
(scalar type). To create a new base type, you must be a superuser.
|
||||
(This restriction is made because an erroneous type definition could
|
||||
confuse or even crash the server.)
|
||||
|
Reference in New Issue
Block a user