Как использовать операторы массива для типа bytea []? - PullRequest
1 голос
/ 15 апреля 2020

Можно ли использовать операторы массива для типа bytea[]?

Например:

CREATE TABLE test (
    metadata bytea[]
);

SELECT * FROM test WHERE test.metadata && ANY($1);

// could not find array type for data type bytea[]

Если это невозможно, есть ли альтернативный подход без изменения типа bytea []?

postgresql 12.x

1 Ответ

0 голосов
/ 16 апреля 2020

Не используйте ANY, просто сравните массивы напрямую, используя конструктор массива и функции массива

CREATE TABLE test (
    metadata bytea[]
);

INSERT INTO public.test (metadata) VALUES('{"x","y"}');

SELECT * FROM test t WHERE metadata && array[E'\x78'::bytea];

При использовании ANY вычисляется и сравнивается левое выражение для каждого элемента правого массива, используя данный оператор, который должен привести к логическому результату. Итак, оригинальный sql пытался сделать что-то вроде bytea[] && bytea.

Это относится не только к bytea[], но и к любому типу массива, например text[] или integer[].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...