Będziesz potrzebował własnej funkcji i może operatora. To moge zaproponowac na szybkiego (ale rozwiązanie nie jest perfekcyjne, nie podales co moga zawierac tablice, tu załozyłem ze nie moga zawierac znaku '*')
drop function contains(anyarray,anyarray) cascade;
create or replace function contains (a anyarray, b anyarray) returns boolean as $$
declare
string varchar;
tab1 varchar;
tab2 varchar;
begin
select into tab1 array_to_string(m,' ') from (select array(select(a)[i]
from generate_series(1,array_upper(a,1)) i order by 1) as m) foo2;
select into tab2 array_to_string(m,'*') from (select array(select(b)[i]
from generate_series(1,array_upper(b,1)) i order by 1) as m) foo2;
select into string regexp_replace(tab1,tab2,'$');
if string like '%$%'
then return true;
end if;
return false;
end;
$$
language plpgsql;
create operator === (
leftarg = anyarray,
rightarg = anyarray,
commutator = ===,
procedure = contains);
i sposob uzycia
postgres=# select 1 as result where array[1,2,3,4] === array[1,3,2];
result
--------
1
(1 row)
postgres=# select 1 as result where array[1,2,3,4] === array[1,3,5];
result
--------
(0 rows)
Mam nadzieje ze sie nigdzie nie walnąłem .