gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 13:01:01 28 4
gpt4 key购买 nike

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

我有应用程序端组,由组 ID 给出(例如 group_agroup_b)和一个在其中一个字段中生成组 ID 数组的 View (例如 group_ids = {group_b,group_c}。用户可以是多个组的成员。我想选择用户组交集的所有行(Python:('group_a', 'group_b')) 并且 View 的组(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']})

关于postgresql - Postgres 查询中的数组比较(非空集交集)(不能强制),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30123220/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com