Skip to content

Commit 1d84daf

Browse files
author
Vladlen Popolitov
committed
Version 2.0 commited
1 parent a61742c commit 1d84daf

File tree

8 files changed

+1925
-2
lines changed

8 files changed

+1925
-2
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ OBJS = anyarray.o anyarray_util.o anyarray_guc.o \
55
anyarray_gist.o anyarray_gin.o anyarray_rum.o
66

77
EXTENSION = anyarray
8-
DATA = anyarray--1.0.sql anyarray--1.2.sql
8+
DATA = anyarray--1.0.sql anyarray--1.1.sql anyarray--1.0--1.1.sql anyarray--1.1.sql anyarray--1.1--2.0.sql anyarray--2.0.sql
99
PGFILEDESC = "anyarray - functions and operators for one-dimensional arrays"
1010

1111
REGRESS = security init anyarray \

README.md

Lines changed: 284 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,284 @@
1+
AnyArray – 1-D anyarray functionality for PostgreSQL
2+
==============================================
3+
4+
Introduction
5+
------------
6+
7+
AnyArray is a PostgreSQL extension which implements 1-D anyarray
8+
functionality.
9+
10+
11+
Authors
12+
-------
13+
14+
* Teodor Sigaev <teodor@sigaev.ru> , Postgres Professional, Moscow, Russia
15+
* Oleg Bartunov <o.bartunov@postgrespro.ru> , Postgres Professional, Moscow, Russia
16+
17+
Availability
18+
------------
19+
20+
AnyArray is released as an extension and not available in default PostgreSQL
21+
installation. It is available from
22+
[github](https://github.com/postgrespro/anyarray)
23+
under the same license as
24+
[PostgreSQL](http://www.postgresql.org/about/licence/)
25+
and supports PostgreSQL 9.1+.
26+
27+
Installation
28+
------------
29+
30+
Before build and install AnyArray you should ensure following:
31+
32+
* PostgreSQL version is 9.1 or higher.
33+
* You have development package of PostgreSQL installed or you built
34+
PostgreSQL from source.
35+
* Your PATH variable is configured so that pg\_config command available.
36+
37+
Typical installation procedure may look like this:
38+
39+
$ git clone https://github.com/postgrespro/anyarray.git
40+
$ cd anyarray
41+
$ make USE_PGXS=1
42+
$ sudo make USE_PGXS=1 install
43+
$ make USE_PGXS=1 installcheck
44+
$ psql DB -c "CREATE EXTENSION anyarray;"
45+
46+
Usage
47+
-----
48+
49+
### Anyarray functions
50+
51+
|Function|Description|Examples|
52+
|--------|-----------|--------|
53+
|`anyset(int)``int[1]`||`anyset(1234)``ARRAY[1234]`|
54+
|`icount(anyarray)``int`|Returns the length of anyarray. icount() returns 0 for empty arrays.|`icount( '{1234234, 0234234}'::int[] )``2`|
55+
|`sort(anyarray [, 'asc'\|'desc'])``anyarray`|Returns the anyarray sorted in an ascending (default) or descending order. |`sort( '{1234234, -30, 0234234}'::int[],'desc')``{1234234, 234234, -30}`|
56+
|`sort_asc(anyarray)``anyarray`|Returns the anyarray sorted in an ascending order. |`sort_asc( '{1234234,-30, 0234234}'::int[])``{-30,234234,1234234}`|
57+
|`sort_desc(anyarray)``anyarray`|Returns the anyarray sorted in a descending order. |`sort( '{1234234, -30, 0234234}'::int[],'desc' )``{1234234,234234,-30}`|
58+
|`uniq(anyarray)``anyarray`|Returns anyarray where consequent repeating elements replaced by one element. If you need to remove all repeating elements in array, you can sort array and apply uniq() function. |`uniq( '{1234234, -30, -30, 0234234, -30}'::int[])``{1234234, -30, 234234, -30}` , `uniq( sort_asc( '{1234234, -30, -30, 0234234, -30}'::int[] ) )``{-30,234234,1234234}`|
59+
|`uniq_d(anyarray)``anyarray`|Returns only consequent repeating elements. If you need to return all repeating elements, you can sort array and apply uniq_d() function |`uniq_d( '{1234234, -30, -30, 0234234, -30, 0234234}'::int[] )``{-30}`, `uniq_d( sort_asc('{1234234, -30,-30, 0234234, -30, 0234234}'::int[] ) )``{-30,234234}` |
60+
|`idx(anyarray, searchelement)``int`|Returns the position of the searchelement first occurance in the array |`idx( '{1234234,-30,-30,0234234,-30}'::int[], -30 )``2`|
61+
|`subarray(anyarray, start int, length int)``anyarray`|Returns the subarray from original array. If the start position value is negative, it is counted from the end of the original array (-1 means last element, -2 means element before last etc.)|`subarray( '{1234234, -30, -30, 0234234, -30}'::int[],2,3 )``{-30, -30, 234234}` , `subarray( '{1234234, -30, -30, 0234234, -30}'::int[], -1, 1 )``{-30}`, `subarray( '{1234234, -30, -30, 0234234, -30}'::int[], 0, -1 )``{1234234, -30, -30, 234234}`|
62+
63+
64+
### Anyarray operators
65+
66+
|Operator|Description|Examples|
67+
|--------|-----------|--------|
68+
|`#anyarray``int`|Returns the length of anyarray. |`#'{1234234,0234234}'::int[]``2`|
69+
|`anyarray + anyarray``anyarray`|Returns the union of arrays |`'{123,623,445}'::int[] + 1245``{123,623,445,1245}` , `'{123,623,445}'::int[] + '{1245,87,445}'``{123,623,445,1245,87,445}` |
70+
|`anyarray - anyarray``anyarray`|Returns the substraction of left array and right array |`'{123,623,445}'::int[] - 623``{123,445}`, `'{123,623,445}'::int[] - '{1623,623}'::int[]` `{123,445}`|
71+
|`anyarray \| anyarray``anyarray`|Returns the union of array, repeating elements are excluded from resulting array.|`'{123,623,445}'::int[]` \| `{1623,623}'::int[]``{123,445,623,1623}`|
72+
|`anyarray & anyarray``anyarray`|Returns arrays intersection.|`'{1,3,1}'::int[] & '{1,2}'``{1}`|
73+
74+
75+
### Anyarray operator class strategies
76+
77+
78+
|Operator|GIST and GIN Strategy num|RUM Strategy num|Description|
79+
|--------|-------------------------|-----------|
80+
|`anyarray` && `anyarray`|RTOverlapStrategyNumber 3|RUM_OVERLAP_STRATEGY 1|Overlapped|
81+
|`anyarray` = `anyarray`|RTSameStrategyNumber 6|RUM_EQUAL_STRATEGY 4|Same|
82+
|`anyarray` @> `anyarray`|RTContainsStrategyNumber 7|RUM_CONTAINS_STRATEGY 2|Contains|
83+
|`anyarray` <@ `anyarray`|RTContainedByStrategyNumber 8|RUM_CONTAINED_STRATEGY 3|Contained|
84+
|`anyarray` % `anyarray`|AnyAarraySimilarityStrategy 16 |RUM_SIMILAR_STRATEGY 5|Similarity|
85+
86+
87+
### Similarity search options
88+
89+
Set distance type for similarity search.
90+
```
91+
SET anyarray.similarity_type=cosine;
92+
SET anyarray.similarity_type=jaccard;
93+
SET anyarray.similarity_type=overlap;
94+
```
95+
96+
Set threshold for similarity search.
97+
```
98+
SET anyarray.similarity_threshold = 3;
99+
RESET anyarray.similarity_threshold;
100+
```
101+
102+
Examples
103+
-------
104+
105+
Examples for INTEGER[] .
106+
107+
### Create a table with sample data.
108+
```
109+
SELECT t, ARRAY(
110+
SELECT v::int4
111+
FROM generate_series(max(0, t - 10), t) as v
112+
) AS v
113+
INTO test_int4
114+
FROM generate_series(1, 200) as t;
115+
```
116+
117+
### Similarity calculation.
118+
119+
```
120+
SET anyarray.similarity_type=cosine;
121+
SELECT t, similarity(v, '{10,9,8,7,6,5,4,3,2,1}') AS s FROM test_int4
122+
WHERE v % '{10,9,8,7,6,5,4,3,2,1}' ORDER BY s DESC, t;
123+
SELECT t, similarity(v, '{50,49,8,7,6,5,4,3,2,1}') AS s FROM test_int4
124+
WHERE v % '{50,49,8,7,6,5,4,3,2,1}' ORDER BY s DESC, t;
125+
126+
SET anyarray.similarity_type=jaccard;
127+
SELECT t, similarity(v, '{10,9,8,7,6,5,4,3,2,1}') AS s FROM test_int4
128+
WHERE v % '{10,9,8,7,6,5,4,3,2,1}' ORDER BY s DESC, t;
129+
SELECT t, similarity(v, '{50,49,8,7,6,5,4,3,2,1}') AS s FROM test_int4
130+
WHERE v % '{50,49,8,7,6,5,4,3,2,1}' ORDER BY s DESC, t;
131+
132+
SELECT t, v FROM test_int4 WHERE v && '{43,50}' ORDER BY t;
133+
SELECT t, v FROM test_int4 WHERE v @> '{43,50}' ORDER BY t;
134+
SELECT t, v FROM test_int4 WHERE v <@ '{0,1,2,3,4,5,6,7,8,9,10}' ORDER BY t;
135+
SELECT t, v FROM test_int4 WHERE v = '{0,1,2,3,4,5,6,7,8,9,10}' ORDER BY t;
136+
SET anyarray.similarity_type=cosine;
137+
SELECT t, v FROM test_int4 WHERE v % '{0,1,2,3,4,5,6,7,8,9,10}' ORDER BY t;
138+
SET anyarray.similarity_type=jaccard;
139+
SELECT t, v FROM test_int4 WHERE v % '{0,1,2,3,4,5,6,7,8,9,10}' ORDER BY t;
140+
SET anyarray.similarity_type=overlap;
141+
SET anyarray.similarity_threshold = 3;
142+
SELECT t, v FROM test_int4 WHERE v % '{0,1,2,3,4,5,6,7,8,9,10}' ORDER BY t;
143+
RESET anyarray.similarity_threshold;
144+
```
145+
146+
### Create GIST index.
147+
148+
```
149+
CREATE INDEX idx_test_int4 ON test_int4 USING gist (v _int4_aa_ops);
150+
151+
SET enable_seqscan=off;
152+
153+
EXPLAIN (COSTS OFF) SELECT t, v FROM test_int4 WHERE v && '{43,50}' ORDER BY t;
154+
EXPLAIN (COSTS OFF) SELECT t, v FROM test_int4 WHERE v @> '{43,50}' ORDER BY t;
155+
EXPLAIN (COSTS OFF) SELECT t, v FROM test_int4 WHERE v <@ '{0,1,2,3,4,5,6,7,8,9,10}' ORDER BY t;
156+
EXPLAIN (COSTS OFF) SELECT t, v FROM test_int4 WHERE v = '{0,1,2,3,4,5,6,7,8,9,10}' ORDER BY t;
157+
EXPLAIN (COSTS OFF) SELECT t, v FROM test_int4 WHERE v % '{0,1,2,3,4,5,6,7,8,9,10}' ORDER BY t;
158+
159+
SELECT t, v FROM test_int4 WHERE v && '{43,50}' ORDER BY t;
160+
SELECT t, v FROM test_int4 WHERE v @> '{43,50}' ORDER BY t;
161+
SELECT t, v FROM test_int4 WHERE v <@ '{0,1,2,3,4,5,6,7,8,9,10}' ORDER BY t;
162+
SELECT t, v FROM test_int4 WHERE v = '{0,1,2,3,4,5,6,7,8,9,10}' ORDER BY t;
163+
SET anyarray.similarity_type=cosine;
164+
SELECT t, v FROM test_int4 WHERE v % '{0,1,2,3,4,5,6,7,8,9,10}' ORDER BY t;
165+
SET anyarray.similarity_type=jaccard;
166+
SELECT t, v FROM test_int4 WHERE v % '{0,1,2,3,4,5,6,7,8,9,10}' ORDER BY t;
167+
SET anyarray.similarity_type=overlap;
168+
SET anyarray.similarity_threshold = 3;
169+
SELECT t, v FROM test_int4 WHERE v % '{0,1,2,3,4,5,6,7,8,9,10}' ORDER BY t;
170+
RESET anyarray.similarity_threshold;
171+
172+
DROP INDEX idx_test_int4;
173+
```
174+
175+
### Create GIN index.
176+
177+
```
178+
CREATE INDEX idx_test_int4 ON test_int4 USING gin (v _int4_aa_ops);
179+
180+
SET enable_seqscan=off;
181+
182+
EXPLAIN (COSTS OFF) SELECT t, v FROM test_int4 WHERE v && '{43,50}' ORDER BY t;
183+
EXPLAIN (COSTS OFF) SELECT t, v FROM test_int4 WHERE v @> '{43,50}' ORDER BY t;
184+
EXPLAIN (COSTS OFF) SELECT t, v FROM test_int4 WHERE v <@ '{0,1,2,3,4,5,6,7,8,9,10}' ORDER BY t;
185+
EXPLAIN (COSTS OFF) SELECT t, v FROM test_int4 WHERE v = '{0,1,2,3,4,5,6,7,8,9,10}' ORDER BY t;
186+
EXPLAIN (COSTS OFF) SELECT t, v FROM test_int4 WHERE v % '{0,1,2,3,4,5,6,7,8,9,10}' ORDER BY t;
187+
188+
SELECT t, v FROM test_int4 WHERE v && '{43,50}' ORDER BY t;
189+
SELECT t, v FROM test_int4 WHERE v @> '{43,50}' ORDER BY t;
190+
SELECT t, v FROM test_int4 WHERE v <@ '{0,1,2,3,4,5,6,7,8,9,10}' ORDER BY t;
191+
SELECT t, v FROM test_int4 WHERE v = '{0,1,2,3,4,5,6,7,8,9,10}' ORDER BY t;
192+
SET anyarray.similarity_type=cosine;
193+
SELECT t, v FROM test_int4 WHERE v % '{0,1,2,3,4,5,6,7,8,9,10}' ORDER BY t;
194+
SET anyarray.similarity_type=jaccard;
195+
SELECT t, v FROM test_int4 WHERE v % '{0,1,2,3,4,5,6,7,8,9,10}' ORDER BY t;
196+
SET anyarray.similarity_type=overlap;
197+
SET anyarray.similarity_threshold = 3;
198+
SELECT t, v FROM test_int4 WHERE v % '{0,1,2,3,4,5,6,7,8,9,10}' ORDER BY t;
199+
RESET anyarray.similarity_threshold;
200+
```
201+
202+
### Create RUM index.
203+
204+
```
205+
CREATE INDEX idx_test_int4 ON test_int4 USING rum (v _int4_aa_ops);
206+
207+
SET enable_seqscan=off;
208+
209+
EXPLAIN (COSTS OFF) SELECT t, v FROM test_int4 WHERE v && '{43,50}' ORDER BY t;
210+
EXPLAIN (COSTS OFF) SELECT t, v FROM test_int4 WHERE v @> '{43,50}' ORDER BY t;
211+
EXPLAIN (COSTS OFF) SELECT t, v FROM test_int4 WHERE v <@ '{0,1,2,3,4,5,6,7,8,9,10}' ORDER BY t;
212+
EXPLAIN (COSTS OFF) SELECT t, v FROM test_int4 WHERE v = '{0,1,2,3,4,5,6,7,8,9,10}' ORDER BY t;
213+
EXPLAIN (COSTS OFF) SELECT t, v FROM test_int4 WHERE v % '{0,1,2,3,4,5,6,7,8,9,10}' ORDER BY t;
214+
215+
SELECT t, v FROM test_int4 WHERE v && '{43,50}' ORDER BY t;
216+
SELECT t, v FROM test_int4 WHERE v @> '{43,50}' ORDER BY t;
217+
SELECT t, v FROM test_int4 WHERE v <@ '{0,1,2,3,4,5,6,7,8,9,10}' ORDER BY t;
218+
SELECT t, v FROM test_int4 WHERE v = '{0,1,2,3,4,5,6,7,8,9,10}' ORDER BY t;
219+
SET anyarray.similarity_type=cosine;
220+
SELECT t, v FROM test_int4 WHERE v % '{0,1,2,3,4,5,6,7,8,9,10}' ORDER BY t;
221+
SET anyarray.similarity_type=jaccard;
222+
SELECT t, v FROM test_int4 WHERE v % '{0,1,2,3,4,5,6,7,8,9,10}' ORDER BY t;
223+
SET anyarray.similarity_type=overlap;
224+
SET anyarray.similarity_threshold = 3;
225+
SELECT t, v FROM test_int4 WHERE v % '{0,1,2,3,4,5,6,7,8,9,10}' ORDER BY t;
226+
RESET anyarray.similarity_threshold;
227+
```
228+
229+
Operator class names for all types implemented in anyarray.
230+
-----------------------------------------------------------
231+
232+
|Anyarray type|GIST|GIN|RUM|
233+
|----|----|---|---|
234+
|bit|_bit_aa_ops|_bit_aa_ops|_bit_aa_ops|
235+
|bytea|_bytea_aa_ops|_bytea_aa_ops|_bytea_aa_ops|
236+
|char|_char_aa_ops|_char_aa_ops|_char_aa_ops|
237+
|cidr|_cidr_aa_ops|_cidr_aa_ops|_cidr_aa_ops|
238+
|date|_date_aa_ops|_date_aa_ops|_date_aa_ops|
239+
|float4|_float4_aa_ops|_float4_aa_ops|_float4_aa_ops|
240+
|float8|_float8_aa_ops|_float8_aa_ops|_float8_aa_ops|
241+
|inet|_inet_aa_ops|_inet_aa_ops|_inet_aa_ops|
242+
|int2|_int2_aa_ops|_int2_aa_ops|_int2_aa_ops|
243+
|int4|_int4_aa_ops|_int4_aa_ops|_int4_aa_ops|
244+
|int8|_int8_aa_ops|_int8_aa_ops|_int8_aa_ops|
245+
|interval|_interval_aa_ops|_interval_aa_ops|_interval_aa_ops|
246+
|macaddr|_macaddr_aa_ops|_macaddr_aa_ops|_macaddr_aa_ops|
247+
|money| - |_money_aa_ops|_money_aa_ops|
248+
|numeric|_numeric_aa_ops|_numeric_aa_ops|_numeric_aa_ops|
249+
|oid|_oid_aa_ops|_oid_aa_ops|_oid_aa_ops|
250+
|text|_text_aa_ops|_text_aa_ops|_text_aa_ops|
251+
|time|_time_aa_ops|_time_aa_ops|_time_aa_ops|
252+
|timestamp|_timestamp_aa_ops|_timestamp_aa_ops|_timestamp_aa_ops|
253+
|timestamptz|_timestamptz_aa_ops|_timestamptz_aa_ops|_timestamptz_aa_ops|
254+
|timetz|_timetz_aa_ops|_timetz_aa_ops|_timetz_aa_ops|
255+
|uuid|_uuid_aa_ops|_uuid_aa_ops|_uuid_aa_ops|
256+
|varbit|_varbit_aa_ops|_varbit_aa_ops|_varbit_aa_ops|
257+
|varchar|_varchar_aa_ops|_varchar_aa_ops|_varchar_aa_ops|
258+
259+
## Upgrading
260+
261+
Install the latest version and run in every database you want to upgrade:
262+
263+
```
264+
ALTER EXTENSION anyarray UPDATE;
265+
```
266+
You need to close this database server connection to apply changes.
267+
268+
You can check the version in the current database with psql command:
269+
270+
```
271+
\dx
272+
```
273+
274+
## Version Notes
275+
276+
### 2.0
277+
278+
The support of RUM index is added. RUM extension 1.4 of upper is required.
279+
Anyarray supports GIST, GIN, RUM indexes for uuid type.
280+
Anyarray supports GIN, RUM indexes for money type.
281+
282+
### 1.1
283+
284+
Query time of anyarray using GIN indexes decreased.

anyarray--1.0--1.1.sql

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
/*
2+
* anyarray version 1.1
3+
*/
4+
5+
CREATE OR REPLACE FUNCTION ginanyarray_triconsistent(internal, internal, anyarray,internal,internal,internal,internal,internal)
6+
RETURNS internal
7+
AS 'MODULE_PATHNAME'
8+
LANGUAGE C IMMUTABLE;
9+
10+
ALTER OPERATOR FAMILY _bit_aa_ops USING gin ADD
11+
FUNCTION 6 (bit[],bit[]) ginanyarray_triconsistent(internal, internal, anyarray,internal,internal,internal,internal,internal);
12+
13+
ALTER OPERATOR FAMILY _bytea_aa_ops USING gin ADD
14+
FUNCTION 6 (bytea[],bytea[]) ginanyarray_triconsistent(internal, internal, anyarray,internal,internal,internal,internal,internal);
15+
16+
ALTER OPERATOR FAMILY _char_aa_ops USING gin ADD
17+
FUNCTION 6 (char[],char[]) ginanyarray_triconsistent(internal, internal, anyarray,internal,internal,internal,internal,internal);
18+
19+
ALTER OPERATOR FAMILY _cidr_aa_ops USING gin ADD
20+
FUNCTION 6 (cidr[],cidr[]) ginanyarray_triconsistent(internal, internal, anyarray,internal,internal,internal,internal,internal);
21+
22+
ALTER OPERATOR FAMILY _date_aa_ops USING gin ADD
23+
FUNCTION 6 (date[],date[]) ginanyarray_triconsistent(internal, internal, anyarray,internal,internal,internal,internal,internal);
24+
25+
ALTER OPERATOR FAMILY _float4_aa_ops USING gin ADD
26+
FUNCTION 6 (float4[],float4[]) ginanyarray_triconsistent(internal, internal, anyarray,internal,internal,internal,internal,internal);
27+
28+
ALTER OPERATOR FAMILY _float8_aa_ops USING gin ADD
29+
FUNCTION 6 (float8[],float8[]) ginanyarray_triconsistent(internal, internal, anyarray,internal,internal,internal,internal,internal);
30+
31+
ALTER OPERATOR FAMILY _inet_aa_ops USING gin ADD
32+
FUNCTION 6 (inet[],inet[]) ginanyarray_triconsistent(internal, internal, anyarray,internal,internal,internal,internal,internal);
33+
34+
ALTER OPERATOR FAMILY _int2_aa_ops USING gin ADD
35+
FUNCTION 6 (int2[],int2[]) ginanyarray_triconsistent(internal, internal, anyarray,internal,internal,internal,internal,internal);
36+
37+
ALTER OPERATOR FAMILY _int4_aa_ops USING gin ADD
38+
FUNCTION 6 (int4[],int4[]) ginanyarray_triconsistent(internal, internal, anyarray,internal,internal,internal,internal,internal);
39+
40+
ALTER OPERATOR FAMILY _int8_aa_ops USING gin ADD
41+
FUNCTION 6 (int8[],int8[]) ginanyarray_triconsistent(internal, internal, anyarray,internal,internal,internal,internal,internal);
42+
43+
ALTER OPERATOR FAMILY _interval_aa_ops USING gin ADD
44+
FUNCTION 6 (interval[],interval[]) ginanyarray_triconsistent(internal, internal, anyarray,internal,internal,internal,internal,internal);
45+
46+
ALTER OPERATOR FAMILY _macaddr_aa_ops USING gin ADD
47+
FUNCTION 6 (macaddr[],macaddr[]) ginanyarray_triconsistent(internal, internal, anyarray,internal,internal,internal,internal,internal);
48+
49+
ALTER OPERATOR FAMILY _money_aa_ops USING gin ADD
50+
FUNCTION 6 (money[],money[]) ginanyarray_triconsistent(internal, internal, anyarray,internal,internal,internal,internal,internal);
51+
52+
ALTER OPERATOR FAMILY _numeric_aa_ops USING gin ADD
53+
FUNCTION 6 (numeric[],numeric[]) ginanyarray_triconsistent(internal, internal, anyarray,internal,internal,internal,internal,internal);
54+
55+
ALTER OPERATOR FAMILY _oid_aa_ops USING gin ADD
56+
FUNCTION 6 (oid[],oid[]) ginanyarray_triconsistent(internal, internal, anyarray,internal,internal,internal,internal,internal);
57+
58+
ALTER OPERATOR FAMILY _text_aa_ops USING gin ADD
59+
FUNCTION 6 (text[],text[]) ginanyarray_triconsistent(internal, internal, anyarray,internal,internal,internal,internal,internal);
60+
61+
ALTER OPERATOR FAMILY _time_aa_ops USING gin ADD
62+
FUNCTION 6 (time[],time[]) ginanyarray_triconsistent(internal, internal, anyarray,internal,internal,internal,internal,internal);
63+
64+
ALTER OPERATOR FAMILY _timestamp_aa_ops USING gin ADD
65+
FUNCTION 6 (timestamp[],timestamp[]) ginanyarray_triconsistent(internal, internal, anyarray,internal,internal,internal,internal,internal);
66+
67+
ALTER OPERATOR FAMILY _timestamptz_aa_ops USING gin ADD
68+
FUNCTION 6 (timestamptz[],timestamptz[]) ginanyarray_triconsistent(internal, internal, anyarray,internal,internal,internal,internal,internal);
69+
70+
ALTER OPERATOR FAMILY _timetz_aa_ops USING gin ADD
71+
FUNCTION 6 (timetz[],timetz[]) ginanyarray_triconsistent(internal, internal, anyarray,internal,internal,internal,internal,internal);
72+
73+
ALTER OPERATOR FAMILY _varbit_aa_ops USING gin ADD
74+
FUNCTION 6 (varbit[],varbit[]) ginanyarray_triconsistent(internal, internal, anyarray,internal,internal,internal,internal,internal);
75+
76+
ALTER OPERATOR FAMILY _varchar_aa_ops USING gin ADD
77+
FUNCTION 6 (varchar[],varchar[]) ginanyarray_triconsistent(internal, internal, anyarray,internal,internal,internal,internal,internal);

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy