postgresql 如何匹配枚举值数组中的元素?

2admgd59  于 2024-01-07  发布在  PostgreSQL
关注(0)|答案(1)|浏览(119)

我有一个表books,行如下:
genres字段是一个enum数组,它包含图书类型,以下是它的可能值:['adventure', 'horror', 'romance']
| 标题|流派|
| --|--|
| 僵局|【恐怖】|
| 阳光山|{浪漫,冒险}|
| 流亡王子|【冒险】|
我试探着:

SELECT * FROM books
WHERE genres = ARRAY['Adventure']::book_genres_enum[];

字符串
但那只会退回“流亡王子”的书。
如何对genres数组中包含 *“Adventure”的所有行进行公式化查询?

osh3o9ms

osh3o9ms1#

简单的查询是= ANY

SELECT * FROM books
WHERE  'Adventure'::book_genres_enum = ANY(genres)

字符串
这适用于任何类型的数组。在这方面,enum类型没有什么特别之处。请参阅:

  • 检查值是否存在于Postgres数组中

显式强制转换是可选的。当将“Adventure”作为非类型化字符串文本传递时,数据类型是从上下文派生的。(可能不适用于类型化值。)

索引

如果表很大,并且您在books(genres)上有一个GIN索引,请使用数组运算符。此查询等效:

SELECT * FROM books
WHERE  genres @> '{Adventure}'::book_genres_enum[];


为什么?为什么?

  • PostgreSQL可以索引数组列吗?

相关问题