【发布时间】:2017-05-12 17:03:33
【问题描述】:
TL;DR 我想知道@> {as_champion, whatever} 和使用IN ('as_champion', 'whatever') 之间的优缺点是什么(或者它们是否相等)。详情如下:
我正在使用 Rails 并使用 Postgres 的数组列类型,但我的查询必须使用原始 sql,因为 Rails finder 方法不能很好地使用它。我找到了一种可行的方法,但想知道首选方法是什么:
Memberships 表上的 roles 列是我的数组列。它是通过 rails 添加的:
add_column :memberships, :roles, :text, array: true
当我检查表格时,它显示的类型为:text[](不确定 Postgres 是否真的如此表示数组列,或者这是否是 Rails 的恶作剧。
要查询它,我会执行以下操作:
Membership.where("roles @> ?", '{as_champion, whatever}')
【问题讨论】:
-
@>运算符表示“包含”:如果左侧数组包含右侧数组中的所有元素,则为 true。IN运算符用于基本数据类型,而不是数组。 -
@Andomar 按基本数据类型,您的意思是
IN仅用于检查值是否等于提供的列表中的单个字符串或整数或其他内容?@>需要在哪里包含所有这些?
标签: ruby-on-rails postgresql ruby-on-rails-4 rails-activerecord array-column