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

时间:2015-05-08 11:55:36

标签: postgresql psycopg2

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

我有应用程序端组,由组ID(例如group_agroup_b)和一个视图在一个字段中生成一组组ID(例如group_ids = {group_b,group_c}。用户可以是多个组的成员。我想选择用户组(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对character varying[]数组中的group_ids值感到困惑。那我该怎么办?

谢谢!

1 个答案:

答案 0 :(得分:2)

尝试使用重叠&& operator代替 df1 <- structure(list(Date = c("10/1/2013", "", "", "", "", "", "10/2/2013", "", "", "", ""), Id = c(3444L, 87873L, 1243L, 35473L, 7363L, 8335L, 4783L, 3355L, 4544L, 94453L, 33554L)), .Names = c("Date", "Id"), class = "data.frame", row.names = c(NA, -11L))

= ANY()

如果我正确地阅读psycopg2 documentation,我认为您也应该传递SELECT * FROM view_name WHERE group_ids && '{group_a,group_b}'; 而不是list

tuple