5分钟上手postgresql_cursor:Rails项目安装与快速使用完整指南
5分钟上手postgresql_cursorRails项目安装与快速使用完整指南【免费下载链接】postgresql_cursorActiveRecord PostgreSQL Adapter extension for using a cursor to return a large result set项目地址: https://gitcode.com/gh_mirrors/po/postgresql_cursorpostgresql_cursor 是一款专为 Rails / ActiveRecord 打造的 PostgreSQL 游标扩展 gem它利用数据库原生游标机制分批拉取查询结果让你在处理百万行级大结果集时不再担心内存爆掉。本文带你用 5 分钟完成安装、配置与快速使用轻松解决 Rails 项目中的大数据量处理难题。 postgresql_cursor 解决什么问题在 Rails 项目中一句简单的Product.all会把所有匹配行一次性加载进内存。数据量小的时候没问题但后台任务、离线批处理动辄处理几十万、上百万行时内存会持续膨胀轻则拖慢服务重则进程崩溃。方案能否指定排序主键要求复杂查询内存表现Product.all✅无✅❌ 全量加载find_each/find_in_batches❌ 只能按主键必须是数字每批重新执行查询✅ 分批postgresql_cursor✅ 任意 order无✅ 只执行一次✅ 分批postgresql_cursor 的核心思路在数据库端声明一个游标cursor先执行查询、保留结果集位置应用端每次只FETCH一小批默认 1000 行处理完再继续取直到结果集耗尽。整个查询只跑一次内存占用始终可控。⚡ Rails 项目安装 postgresql_cursor 三步走第一步修改 Gemfile打开项目根目录的Gemfile添加一行依赖gemspec 要求 ActiveRecord 6.0gem postgresql_cursor第二步执行 bundle installbundle install第三步确认自动加载gem 的入口文件 lib/postgresql_cursor.rb 通过ActiveSupport.on_load钩子自动扩展ActiveRecord::Relation和 PostgreSQL 连接适配器无需手动初始化——安装完成即可直接使用each_row等方法。 如果想通读源码或跑演示应用可以克隆仓库查看git clone https://gitcode.com/gh_mirrors/po/postgresql_cursor演示脚本位于test-app/app.rb运行脚本为test-app/run.sh。 快速上手记住 3 个游标方法1️⃣ 逐行处理大数据each_row 与 each_instance这是最核心的两个方法分别返回哈希快适合纯数据处理和模型实例带类型转换适合调用模型方法。二者都支持挂在任意where/order查询条件之后# 返回 Hash性能更好 Product.where(id0).order(name).each_row { |row| Process.run(row) } # 返回 ActiveRecord 实例 Product.where(id0).each_instance { |product| product.process! }2️⃣ 控制批次大小block_size 选项所有方法都接受选项参数block_size决定每次从数据库取多少行默认 1000Product.each_instance(block_size: 100_000) { |p| p.process }3️⃣ 直接执行原始 SQL不经过模型时可用_by_sql系列方法对任意 SQL 建立游标Product.each_row_by_sql(select * from products) { |row| Process.run(row) } 游标进阶技巧让处理更高效加锁批量更新FOR UPDATE配合 ActiveRecord 的lock方法游标每次取回的批次会被FOR UPDATE锁定适合边扫描边更新的场景处理完一批才释放锁兼顾并发安全Product.lock.each_instance(block_size: 100) do |p| p.update!(price: p.price * 1.05) end⚠️ 对繁忙的大表block_size建议 ≤ 100批次太大可能导致锁等待甚至死锁。手动 fetch 必须在事务中游标需要保持在事务内使用。若不传块、手动控制取行节奏记得包一层transactionProduct.transaction do cursor Product.all.each_row cursor.fetch # {id1} cursor.close end支持 Enumerable 链式调用不传块时返回游标对象本身天然支持map、reduce等 Enumerable 操作还能链式lazy保持低内存Product.each_row.map { |r| r[id].to_i }需要类型转换选 each_instanceeach_row返回字符串值如2024-01-01追求极致速度时手动转换即可若依赖Time、数值等 Ruby 类型用each_instance按需惰性转换更省心。官方基准显示返回实例比返回哈希慢约 4 倍可按需取舍。❓ 常见问题FAQQ1小数据量也要用游标吗不建议。游标在数据库端有额外开销日常网页请求几十行直接用 ActiveRecord 即可。游标专为大结果集设计。Q2和 find_each 相比为什么选游标find_each只能按主键顺序、要求数字主键且每批都重新执行查询游标支持任意排序、任意复杂查询且查询只执行一次。Q3支持哪些 Rails 版本当前版本0.6.11要求 ActiveRecord 6.0项目通过Appraisals与gemfiles/目录维护了 Rails 4 / 5 / 6 各版本的兼容性测试。 核心源码文件索引想深入原理可以从这几个文件入手入口与自动加载逻辑lib/postgresql_cursor.rb游标核心实现open / fetch / closelib/postgresql_cursor/cursor.rbRelation 扩展each_row、each_instance 等方法定义lib/postgresql_cursor/active_record/relation/cursor_iterators.rb裸 SQL 游标支持lib/postgresql_cursor/active_record/sql_cursor.rbPostgreSQL 类型映射lib/postgresql_cursor/active_record/connection_adapters/postgresql_type_map.rb完整用法与参数说明README.md功能测试用例test/test_postgresql_cursor.rb✅ 小结postgresql_cursor 用三行安装、一行调用就为 Rails 项目补上了大结果集高效处理这块拼图查询只执行一次、排序完全自由、内存恒定可控。后台任务、数据迁移、批量更新场景都能直接受益5 分钟即可跑通值得每个 Rails PostgreSQL 项目收藏备用。【免费下载链接】postgresql_cursorActiveRecord PostgreSQL Adapter extension for using a cursor to return a large result set项目地址: https://gitcode.com/gh_mirrors/po/postgresql_cursor创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Mapbox 导航 SDK 预测缓存(Predictive Cache)原理与省流优化实战:完整指南

Mapbox 导航 SDK 预测缓存(Predictive Cache)原理与省流优化实战:完整指南

Mapbox 导航 SDK 预测缓存(Predictive Cache)原理与省流优化实战:完整指南 【免费下载链接】mapbox-navigation-android Mapbox Navigation SDK for Android 项目地址: https://gitcode.com/gh_mirrors/ma/mapbox-navigation-android Mapbox Navigation SDK f…

2026/8/23 16:48:11 阅读更多 →
tp6-vue-admin:用 ThinkPHP 6 + Vue 搭一套前后端分离后台,权限模型直接可用

tp6-vue-admin:用 ThinkPHP 6 + Vue 搭一套前后端分离后台,权限模型直接可用

tp6-vue-admin:用 ThinkPHP 6 Vue 搭一套前后端分离后台,权限模型直接可用 【免费下载链接】tp6-vue-admin 基于thinkphp6vue2.6element2.13 前后端分离落地解决方案 项目地址: https://gitcode.com/gh_mirrors/tp/tp6-vue-admin tp6-vue-admin …

2026/8/23 16:47:11 阅读更多 →
untrunc 免费修复 MP4 截断视频完整指南

untrunc 免费修复 MP4 截断视频完整指南

untrunc 免费修复 MP4 截断视频完整指南 【免费下载链接】untrunc Restore a truncated mp4/mov. Improved version of ponchio/untrunc 项目地址: https://gitcode.com/gh_mirrors/un/untrunc 手机在录像时突然断电,文件夹里那条视频从此打不开。untrunc 是…

2026/8/23 16:47:11 阅读更多 →

最新新闻

异步 FIFO 为什么使用格雷码

异步 FIFO 为什么使用格雷码

前言异步 FIFO 中,写数据和读数据分别工作在两个没有固定相位关系的时钟域中。例如:写时钟:wclk读时钟:rclk写指针:在 wclk 域更新读指针:在 rclk 域更新为了判断 FIFO 是否为空或已满,写时钟域…

2026/8/23 18:14:39 阅读更多 →
Learned-Rule-Augmented Large Language Model Evaluators

Learned-Rule-Augmented Large Language Model Evaluators

文章总结与翻译 一、主要内容 本文聚焦于扩展大型语言模型(LLMs)作为通用评估器的应用范围,解决现有LLM评估方法依赖人工设计评估原则、泛化能力弱且与数据和人类判断存在错位的问题。核心提出了一种规则增强的评估范式,包含两大核心阶段: 规则蒸馏阶段:通过LLM辅助的蒙…

2026/8/23 18:14:39 阅读更多 →
The Art of Scaling Test-Time Compute for Large Language Models

The Art of Scaling Test-Time Compute for Large Language Models

一、文章主要内容总结 本文聚焦大语言模型(LLMs)的测试时缩放(TTS)技术,旨在解决现有研究中缺乏统一条件下TTS策略系统对比、模型类型与问题难度对性能影响不明确的问题。通过对8个开源LLM(参数规模7B-235B)在4个推理数据集上生成的超300亿tokens进行大规模研究,得出三…

2026/8/23 18:14:39 阅读更多 →
PPTBench: Towards Holistic Evaluation of Large Language Models for PowerPoint Layout and Design U...

PPTBench: Towards Holistic Evaluation of Large Language Models for PowerPoint Layout and Design U...

PPTBench论文核心总结与关键部分翻译 一、文章主要内容 PPTBench是一个针对大型语言模型(MLLMs)在PowerPoint相关任务中布局理解与设计推理能力的综合多模态基准测试集。其核心内容围绕以下维度展开: 1. 基准测试集设计 数据基础:基于958个源自政府档案的专业PPT文件,构…

2026/8/23 18:14:39 阅读更多 →
SAP MIGO物料凭证消息与输出配置详解:从NACE到条件技术的实战指南

SAP MIGO物料凭证消息与输出配置详解:从NACE到条件技术的实战指南

1. 项目背景与核心诉求:为什么MIGO的MESSAGE OUTPUT配置如此重要?如果你在SAP MM模块里泡过一段时间,肯定对MIGO这个事务代码不陌生。它是物料管理的核心操作入口,收货、发货、转储、退货,几乎所有的物料移动都得经过它…

2026/8/23 18:14:39 阅读更多 →
计算机舆情数据项目推荐:基于Python微博舆情数据爬虫可视化分析系统(NLP情感分析+爬虫+机器学习)

计算机舆情数据项目推荐:基于Python微博舆情数据爬虫可视化分析系统(NLP情感分析+爬虫+机器学习)

文章目录计算机舆情数据项目推荐:基于Python微博舆情数据爬虫可视化分析系统(NLP情感分析爬虫机器学习)一、项目概述全套资料获取二、微博热词统计析三、微博文章分析四、微博评论分析五、微博舆情分析六、系统设计系统数据爬虫过程机器学习算法情感分析功能实现数据…

2026/8/23 18:13:39 阅读更多 →

日新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/23 0:00:50 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/23 0:00:50 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/23 0:00:50 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/23 0:00:50 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/23 0:00:50 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/23 0:00:50 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/22 18:08:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/23 12:10:44 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →