Postgres 选择枚举数组中的特定数组

Ale*_*ier 1 sql postgresql

鉴于这个例子:

桌子:

CREATE TABLE public.animals
(
  name character varying(64),
  whitelist animal_whitelist[]
)
Run Code Online (Sandbox Code Playgroud)

自定义枚举类型animal_whitelist:

CREATE TYPE public.animal_whitelist AS ENUM
  ('dog',
  'cat',
  'bird');
Run Code Online (Sandbox Code Playgroud)

我怎样才能专门选择白名单。

在伪代码中,这是我想要选择的。

  • 任何animal_whitelist等于的行dog
  • 任何animal_whitelist等于和的dog cat
  • animal_whitelist等于或的任何行dog cat
  • 任何行,其中animal_whitelist不是 dogcatbird

Iva*_*kiy 5

请检查这一个

    insert into animals ("name", "whitelist") values ('bobic', array['dog']::animal_whitelist[]);
insert into animals ("name", "whitelist") values ('barsic', array['cat']::animal_whitelist[]);
insert into animals ("name", "whitelist") values ('pet', array['dog', 'cat', 'bird']::animal_whitelist[]);
insert into animals ("name") values ('jim');


-- Any rows where the animal_whitelist equals dog
select * from animals where  array['dog']::animal_whitelist[] = "whitelist" ;

-- Any rows where the animal_whitelist equals dog and cat
select * from animals where  array['dog', 'cat']::animal_whitelist[] = "whitelist" ;

-- Any rows where the animal_whitelist equals dog or cat
select * from animals where  array['dog', 'cat']::animal_whitelist[] <@ "whitelist" ;

-- Any rows where the animal_whitelist is not dog, cat, or bird
select * from animals where not array['dog', 'cat', 'bird']::animal_whitelist[] && "whitelist";
Run Code Online (Sandbox Code Playgroud)