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_a
、group_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']})
我有一个 Plone Web 应用程序,它使用 psycopg2
(当前为 2.5.5)访问 Postgres 数据库(9.1 或 9.3,取决于机器)。
我有应用程序端组,由组 ID 给出(例如 group_a
、group_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']})