The <filename>intarray</filename> module provides a number of useful functions
and operators for manipulating null-free arrays of integers.
There is also support for indexed searches using some of the operators.
intarray
モジュールはNULLのない整数の配列の操作に便利な関数と演算子を多く提供します。
また、一部の演算子を使用したインデックス検索をサポートします。
All of these operations will throw an error if a supplied array contains any NULL elements. 配列にNULL要素が一つでも含まれていれば、これらの操作はすべてエラーを発生します。
Many of these operations are only sensible for one-dimensional arrays. Although they will accept input arrays of more dimensions, the data is treated as though it were a linear array in storage order. これらの操作の多くは一次元配列に対してのみ適当なものです。 高次元の入力配列を受け付けますが、データは格納された順の一次元の配列であるかのように扱われます。
This module is considered <quote>trusted</quote>, that is, it can be
installed by non-superusers who have <literal>CREATE</literal> privilege
on the current database.
このモジュールは「trusted」と見なされます。つまり、現在のデータベースに対してCREATE
権限を持つ非スーパーユーザがインストールできます。
intarray
の関数および演算子 #
The functions provided by the <filename>intarray</filename> module
are shown in <xref linkend="intarray-func-table"/>, the operators
in <xref linkend="intarray-op-table"/>.
intarray
モジュールで提供される関数を表 F.8に、演算子を表 F.9に示します。
表F.8 intarray
関数
表F.9 intarray
演算子
Operator 演算子 Description 説明 |
---|
Do arrays overlap (have at least one element in common)? 配列が重なるか(少なくとも1つの共通要素があるか)。 |
Does left array contain right array? 左辺の配列は右辺の配列を含むか。 |
Is left array contained in right array? 左辺の配列は右辺の配列に含まれるか。 |
Returns the number of elements in the array. 配列内の要素数を返します。 |
Returns index of the first array element
matching the right argument, or 0 if no match.
(Same as <function>idx</function> function.)
右辺の引数に最初に一致する要素番号を、一致するものがなければ0を返します。
( |
Adds element to end of array. 要素を配列の末尾に追加します。 |
Concatenates the arrays. 配列を連結します。 |
Removes entries matching the right argument from the array. 配列から右辺の引数に一致する項目を削除します。 |
Removes elements of the right array from the left array. 左辺の配列から右辺の配列要素を削除します。 |
Computes the union of the arguments. 引数の結合を計算します。 |
Computes the union of the arguments. 引数の結合を計算します。 |
Computes the intersection of the arguments. 引数の共通部分を計算します。 |
Does array satisfy query? (see below) 配列が問い合わせを満たすか。(下記参照) |
Does array satisfy query? (commutator of <literal>@@</literal>)
配列が問い合わせを満たすか。( |
The operators <literal>&&</literal>, <literal>@></literal> and
<literal><@</literal> are equivalent to <productname>PostgreSQL</productname>'s built-in
operators of the same names, except that they work only on integer arrays
that do not contain nulls, while the built-in operators work for any array
type. This restriction makes them faster than the built-in operators
in many cases.
演算子&&
、@>
と<@
は、これらはNULLを含まない整数配列のみで動作し、組み込み演算子はどの配列型に対しても動作する点を除き、同じ名前のPostgreSQLの組み込み演算子とそれぞれほぼ等価です。
この制限により、多くの場合、組み込み演算子より高速です。
The <literal>@@</literal> and <literal>~~</literal> operators test whether an array
satisfies a <firstterm>query</firstterm>, which is expressed as a value of a
specialized data type <type>query_int</type>. A <firstterm>query</firstterm>
consists of integer values that are checked against the elements of
the array, possibly combined using the operators <literal>&</literal>
(AND), <literal>|</literal> (OR), and <literal>!</literal> (NOT). Parentheses
can be used as needed. For example,
the query <literal>1&(2|3)</literal> matches arrays that contain 1
and also contain either 2 or 3.
@@
および~~
演算子は、配列が特化したデータ型query_int
で表現される問い合わせを満たすかどうかを試験します。
問い合わせは、おそらく&
(論理積)、|
(論理和)、!
(否定)演算子を組み合わせて使用した、配列要素に対して検査される整数値からなります。
例えば1&(2|3)
という問い合わせは1および、2か3のいずれかを含む配列に一致します。
<filename>intarray</filename> provides index support for the
<literal>&&</literal>, <literal>@></literal>,
and <literal>@@</literal> operators, as well as regular array equality.
intarray
は&&
、@>
、@@
演算子に関して通常の配列等価性と同様にインデックスサポートを提供します。
Two parameterized GiST index operator classes are provided:
<literal>gist__int_ops</literal> (used by default) is suitable for
small- to medium-size data sets, while
<literal>gist__intbig_ops</literal> uses a larger signature and is more
suitable for indexing large data sets (i.e., columns containing
a large number of distinct array values).
The implementation uses an RD-tree data structure with
built-in lossy compression.
2つのパラメータ化されたGiSTインデックス演算子クラスが提供されます。
gist__int_ops
(デフォルトで使用されます)は小中規模要素数のデータセットに適します。
一方、gist__intbig_ops
はより大きな署名を使用しますので、大規模データセット(つまり、異なった配列値を多数持つ列)のインデックスにより適しています。
実装は組み込みの非可逆圧縮を持ったRD-treeデータ構造を使用します。
<literal>gist__int_ops</literal> approximates an integer set as an array of
integer ranges. Its optional integer parameter <literal>numranges</literal>
determines the maximum number of ranges in
one index key. The default value of <literal>numranges</literal> is 100.
Valid values are between 1 and 253. Using larger arrays as GiST index
keys leads to a more precise search (scanning a smaller fraction of the index and
fewer heap pages), at the cost of a larger index.
gist__int_ops
は整数の集合を整数の範囲の配列として近似します。
オプションの整数パラメータnumranges
は、一つのインデックスキー内の範囲の最大数を決定します。
numranges
のデフォルト値は100です。
有効な値は1から253までです。
GiSTインデックスキーとしてより大きな値を使うと、インデックスはより大きくなってしまいますが、(インデックスのより小さな部分とより少ないヒープページをスキャンすることで)検索がより正確になります。
<literal>gist__intbig_ops</literal> approximates an integer set as a bitmap
signature. Its optional integer parameter <literal>siglen</literal>
determines the signature length in bytes.
The default signature length is 16 bytes. Valid values of signature length
are between 1 and 2024 bytes. Longer signatures lead to a more precise
search (scanning a smaller fraction of the index and fewer heap pages), at
the cost of a larger index.
gist__intbig_ops
は整数の集合をビットマップ署名として近似します。
オプションの整数パラメータsiglen
は、署名の長さをバイト単位で決定します。
デフォルトの署名の長さは16バイトです。
署名の長さの有効な値は1から2024バイトまでです。
長い署名では、インデックスはより大きくなってしまいますが、(インデックスのより小さな部分とより少ないヒープページをスキャンすることで)検索がより正確になります。
There is also a non-default GIN operator class
<literal>gin__int_ops</literal>, which supports these operators as well
as <literal><@</literal>.
また、デフォルトではないGIN演算子クラスgin__int_ops
も存在し、<@
と同様にこれらの演算子をサポートします。
The choice between GiST and GIN indexing depends on the relative performance characteristics of GiST and GIN, which are discussed elsewhere. GiSTおよびGINインデックスのどちらを選択するかは、別途説明されるGiSTとGINの相対的な性能特徴に依存します。
-- a message can be in one or more <quote>sections</quote> -- メッセージ(message)は1つ以上の「節(section)」の中にある CREATE TABLE message (mid INT PRIMARY KEY, sections INT[], ...); -- create specialized index with signature length of 32 bytes -- 署名の長さが32バイトの特化したインデックスを作成 CREATE INDEX message_rdtree_idx ON message USING GIST (sections gist__intbig_ops (siglen = 32)); -- select messages in section 1 OR 2 - OVERLAP operator -- 節1 OR 2のメッセージを選択 - OVERLAP演算子 SELECT message.mid FROM message WHERE message.sections && '{1,2}'; -- select messages in sections 1 AND 2 - CONTAINS operator -- 節1 AND 2のメッセージを選択 - CONTAINS演算子 SELECT message.mid FROM message WHERE message.sections @> '{1,2}'; -- the same, using QUERY operator -- 同上、QUERY演算子を使用 SELECT message.mid FROM message WHERE message.sections @@ '1&2'::query_int;
The source directory <filename>contrib/intarray/bench</filename> contains a
benchmark test suite, which can be run against an installed
<productname>PostgreSQL</productname> server. (It also requires <filename>DBD::Pg</filename>
to be installed.) To run:
ソースディレクトリ以下のcontrib/intarray/bench
にはベンチマーク試験一式があり、インストールされたPostgreSQLサーバで実行できます。
(DBD::Pg
もインストールされていないといけません。)
以下のように実行します。
cd .../contrib/intarray/bench createdb TEST psql -c "CREATE EXTENSION intarray" TEST ./create_test.pl | psql TEST ./bench.pl
The <filename>bench.pl</filename> script has numerous options, which
are displayed when it is run without any arguments.
bench.pl
スクリプトには多くのオプションがあります。
これらは引数を付けずに実行すると表示されます。
All work was done by Teodor Sigaev (<email>teodor@sigaev.ru</email>) and
Oleg Bartunov (<email>oleg@sai.msu.su</email>). See
<ulink url="http://www.sai.msu.su/~megera/postgres/gist/"></ulink> for
additional information. Andrey Oktyabrski did a great work on adding new
functions and operations.
Teodor Sigaev (<teodor@sigaev.ru>
)とOleg Bartunov (<oleg@sai.msu.su>
)によりすべての作業がなされました。
さらなる情報についてはhttp://www.sai.msu.su/~megera/postgres/gist/を参照してください。
Andrey Oktyabrskiは新しい関数、演算子の追加において素晴らしい作業を行いました。