You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby:查询PostgreSQL数组列长度大于1的ActiveRecord记录

查询PostgreSQL数组列长度大于1的记录

直接在数据库层面过滤是最高效的方案,避免全量拉取数据到内存后处理,以下是两种可行实现方式:

Rails ActiveRecord 写法

利用PostgreSQL的数组函数直接构建查询条件:

方式1:使用array_length函数

TrackingInfo.where("array_length(tracking_numbers, 1) > 1")

array_length的第二个参数1表示数组的维度(这里是一维数组)。

方式2:使用cardinality函数

cardinality函数直接返回数组的元素个数,写法更简洁:

TrackingInfo.where("cardinality(tracking_numbers) > 1")

原生SQL 查询语句

如果需要直接执行SQL,对应的语句如下:

SELECT * FROM tracking_infos WHERE array_length(tracking_numbers, 1) > 1;
-- 或使用cardinality
SELECT * FROM tracking_infos WHERE cardinality(tracking_numbers) > 1;

注意:之前用TrackingInfo.all.pluck(:tracking_numbers)后处理的方式会将所有记录的数组字段加载到内存中过滤,数据量较大时会严重影响性能,推荐使用上述数据库端过滤的方案。

内容的提问来源于stack exchange,提问作者ToddT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 13:09:55