¾�ΥС�������ʸ�� �� 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

F.15. intarray

intarray�⥸�塼��������ΰ켡����������������ʴؿ��ȱ黻�Ҥ�¿���󶡤��ޤ��� �ޤ��������α黻�Ҥ���Ѥ�������ǥå��������򥵥ݡ��Ȥ��ޤ���

F.15.1. intarray�δؿ�����ӱ黻��

表 F-8. intarray�ؿ�

�ؿ�����ͤη����������
icount(int[])int����������ǿ�icount('{1,2,3}'::int[])3
sort(int[], text dir)int[]����Υ����ȡ�dir��asc�ޤ���desc�Τ����줫�Ǥʤ���Фʤ�ޤ���sort('{1,2,3}'::int[], 'desc'){3,2,1}
sort(int[])int[]���祽����sort(array[11,77,44]){11,44,77}
sort_asc(int[])int[]���祽����
sort_desc(int[])int[]�߽祽����
uniq(int[])int[]���ܤ����ʣ����uniq(sort('{1,2,3,2,1}'::int[])){1,2,3}
idx(int[], int item)intitem�˰��פ��������ֹ��¸�ߤ��ʤ����0��idx(array[11,22,33,22,11], 22)2
subarray(int[], int start, int len)int[]start����Ϥޤ�len�Ĥ����Ǥ���ʬ����subarray('{1,2,3,2,1}'::int[], 2, 3){2,3,2}
subarray(int[], int start)int[]start����Ϥޤ���ʬ����subarray('{1,2,3,2,1}'::int[], 2){2,3,2,1}
intset(int)int[]ñ�����Ǥ���������intset(42){42}

表 F-9. intarray�黻��

�黻�����������
int[] && int[]boolean�Ťʤꡣ����֤Ǿ��ʤ��Ȥ�1�Ĥζ������Ǥ�������true���֤��ޤ���
int[] @> int[]boolean��ͭ�����դ����󤬱��դ������ޤ���true���֤��ޤ���
int[] <@ int[]boolean��ͭ����롣���դ����󤬱��դ�����˴ޤޤ����true���֤��ޤ���
# int[]int����������ǿ�
int[] # intint����ǥå�����idx�ؿ���Ʊ���Ǥ���
int[] + intint[]��������Ǥ�ץå����������������ɲáˤ��ޤ�
int[] + int[] int[]�����Ϣ��ʱ����������������������ɲáˤ��ޤ�
int[] - intint[]���󤫤鱦�դΰ����˰��פ�����ܤ������ޤ�
int[] - int[]int[]���դ����󤫤鱦�դ��������Ǥ������ޤ�
int[] | intint[]������ޤȤ�ޤ�
int[] | int[]int[]�����ޤȤ�ޤ�
int[] & int[]int[]����ζ�����ʬ
int[] @@ query_intboolean�����䤤��碌�����������true�ʸ�ҡ�
query_int ~~ int[]boolean�����䤤��碌�����������true��@@�θ���黻�ҡ�

��PostgreSQL 8.2�����Ǥϡ���ͭ�黻��@>��<@�Ϥ��줾��@��~�ȸƤФ�Ƥ��ޤ����� ������̾���Ϥޤ����ѤǤ��ޤ������ѻ�ͽ��Ǥ��ꡢ�ǽ�Ū�ˤϤʤ��ʤ�ޤ��� �Ť�̾���ϥ����δ����ǡ��������������äƤ�������Ȥ�ȿ�ФǤ��뤳�Ȥ����դ��Ƥ�����������

��ͭ�黻��@>��<@�ϡ���������������Τߤ�ư����Ȥ߹��߱黻�ҤϤɤ����󷿤��Ф��Ƥ�ư������������Ʊ��̾����PostgreSQL���Ȥ߹��߱黻�ҤȤ��줾��ۤ������Ǥ��� ���פʰ㤤�ϡ�intarray�α黻�Ҥ϶�������ϲ���ޤ�Ǥ��ʤ��ȹͤ������Ǥ��� �����GIN����ǥå����䤤��碌�ο����񤤤Ȱ��פ��Ƥ��ޤ������̾�δ�ͭ�ο���Ū������Ȥϰ��פ��Ƥ��ޤ���

@@�����~~�黻�Ҥϡ������ò������ǡ�����query_int��ɽ��������䤤��碌�����������ɤ��������ޤ��� �䤤��碌�ϡ������餯&(������), | (������), and ! (����)�黻�Ҥ��Ȥ߹�碌�ƻ��Ѥ������������Ǥ��Ф��Ƹ�������������ͤ���ʤ�ޤ��� �㤨��1&(2|3)�Ȥ����䤤��碌��1����ӡ�2��3�Τ����줫��ޤ�����˰��פ��ޤ���

F.15.2. ����ǥå������ݡ���

intarray��&&��@>��<@��@@�黻�Ҥ˴ؤ����̾��������������Ʊ�ͤ˥���ǥå������ݡ��Ȥ��󶡤��ޤ���

2�Ĥ�GiST����ǥå����黻�ҥ��饹���󶡤���ޤ��� gist__int_ops�ʥǥե���Ȥǻ��Ѥ���ޤ��ˤϾ��浬�����ǿ��Υǡ������åȤ�Ŭ���ޤ��� ������gist__intbig_ops�Ϥ���礭�ʽ�̾����Ѥ��ޤ��Τǡ��絬�ϥǡ������åȡʤĤޤꡢ�ۤʤä������ͤ�¿��������ˤΥ���ǥå����ˤ��Ŭ���Ƥ��ޤ��� �������ȹ��ߤ���ĵհ��̤���ä�RD Tree�ǡ�����¤����Ѥ��ޤ���

�ޤ���Ʊ���黻�Ҥ򥵥ݡ��Ȥ���ǥե���ȤǤϤʤ�GIN�黻�ҥ��饹gin__int_ops��¸�ߤ��ޤ���

GiST�����GIN����ǥå����Τɤ�������򤹤뤫�ϡ��������������GiST��GIN������Ū����ǽ��ħ�˰�¸���ޤ��� �ޤȤ��ȡ�GIN����ǥå�����GiST����ǥå�������®�˸������뤳�Ȥ��Ǥ��ޤ��������ۤޤ��Ϲ�������®�Ǥ��� ���Τ��ᡢGIN����Ū�ǡ�����Ŭ����GiST�����ˤ˹��������ǡ�����Ŭ���ޤ���

F.15.3. ��

-- a message can be in one or more "sections"
CREATE TABLE message (mid INT PRIMARY KEY, sections INT[], ...);

-- create specialized index
CREATE INDEX message_rdtree_idx ON message USING GIST (sections gist__int_ops);

-- select messages in section 1 OR 2 - OVERLAP operator
SELECT message.mid FROM message WHERE message.sections && '{1,2}';

-- select messages in sections 1 AND 2 - CONTAINS operator
SELECT message.mid FROM message WHERE message.sections @> '{1,2}';

-- the same, using QUERY operator
SELECT message.mid FROM message WHERE message.sections @@ '1&2'::query_int;

F.15.4. �٥���ޡ���

�������ǥ��쥯�ȥ�ʲ���contrib/intarray/bench�ˤϥ٥���ޡ�����켰������ޤ��� �ʲ��Τ褦�˼¹Ԥ��ޤ���

cd .../bench
createdb TEST
psql TEST < ../_int.sql
./create_test.pl | psql TEST
./bench.pl

bench.pl������ץȤˤ�¿���Υ��ץ���󤬤���ޤ��� �����ϰ������դ����˼¹Ԥ����ɽ������ޤ���

F.15.5. ���

Teodor Sigaev ()��Oleg Bartunov ()�ˤ�ꤹ�٤Ƥκ�Ȥ��ʤ���ޤ����� ����ʤ����ˤĤ��Ƥ�http://www.sai.msu.su/~megera/postgres/gist/�򻲾Ȥ��Ƥ��������� Andrey Oktyabrski�Ͽ������ؿ����黻�Ҥ��ɲäˤ����������餷����Ȥ�Ԥ��ޤ�����