Postgres 查询中的数组比较(非空集交集)(不能强制)

Array comparison (non-empty set intersection) in Postgres query (can't coerce)

我有一个 Plone Web 应用程序,它使用 psycopg2(当前为 2.5.5)访问 Postgres 数据库(9.1 或 9.3,取决于机器)。

我有应用程序端组,由组 ID 给出(例如 group_agroup_b)和一个在其中一个字段中生成一组组 ID 的视图(例如 group_ids = {group_b,group_c}。用户可以是多个组的成员。我想 select 用户组 (Python: ('group_a', 'group_b')) 和视图的组 (SQL: {group_b,group_c}) 不为空。

我的第一次尝试是将用户的组扔到 psycopg2:

db.query('SELECT * FROM view_name WHERE group_ids = ANY(%(group_ids)s);',
         None,
         {'group_ids': ('group_a', 'group_b')})

但这不起作用(抱歉,德语错误消息;即使在 psql shell 和 LANG=C 中我也没有收到英文文本):

FEHLER: konnte Arraytyp für Datentyp character varying[] nicht finden

... 这意味着,Postgres 被 group_ids 数组中的 character varying[] 值混淆了。那我该怎么办?

谢谢!

尝试使用重叠 && operator 而不是 = ANY():

SELECT * FROM view_name WHERE group_ids && '{group_a,group_b}';

如果我没看错 psycopg2 documentation,我想你也应该传递 list 而不是 tuple:

db.query('SELECT * FROM view_name WHERE group_ids && %(group_ids)s::character varying[];',
         None,
         {'group_ids': ['group_a', 'group_b']})