O PostgreSQL não inclui um tipo de índice para colunas do array uuid.
Aqui está uma tabela com uma coluna de matriz uuid:
CREATE TABLE items (
things uuid[]
);
mas quando tentamos criar um índice nele:
CREATE INDEX items_things_idx ON items USING GIN(things);
ERROR: data type uuid[] has no default operator class for access method "gin"
portanto, devemos criar um tipo de índice que entenda como comparar elementos em uma matriz de UUIDs:
CREATE OPERATOR CLASS _uuid_ops DEFAULT FOR TYPE _uuid USING gin AS
OPERATOR 1 &&(anyarray, anyarray),
OPERATOR 2 @>(anyarray, anyarray),
OPERATOR 3 <@(anyarray, anyarray),
OPERATOR 4 =(anyarray, anyarray),
FUNCTION 1 uuid_cmp(uuid, uuid),
FUNCTION 2 ginarrayextract(anyarray, internal, internal),
FUNCTION 3 ginqueryarrayextract(anyarray, internal, smallint, internal, internal, internal, internal),
FUNCTION 4 ginarrayconsistent(internal, smallint, anyarray, integer, internal, internal, internal, internal),
STORAGE uuid;
Agora nosso índice criará e os SELECTs para itens no array UUID serão rápidos. Por exemplo, encontre todas as linhas que contêm um UUID específico em qualquer lugar da matriz:
SELECT * FROM items WHERE things @> ARRAY['a6e34e5d-b1fb-4240-8ad9-21ddf23134bb']::uuid[];