【发布时间】:2015-05-16 07:11:54
【问题描述】:
因为我要从我的物化视图Matview 中提取数千条记录,所以我想使用find_each 将其拆分成批次以释放内存。
但是,当我运行以下命令时:
Matview.where('p_id > 100').find_each {|m| m }
我收到以下错误:
PG::SyntaxError: ERROR: zero-length delimited identifier at or near """"
经过研究,我发现您无法在没有主键的表上运行 find_each。
我尝试使用以下方法将唯一 ID 添加到 Matview:
CREATE UNIQUE INDEX index_mv ON matview(p_id)
虽然这很成功,但它并不能替代主键。
我尝试使用以下方法向我的物化视图添加主要约束:
ALTER MATERIALIZED matview ADD CONSTRAINT mv_pk primary key (p_id) disabled
但是失败了。
所以一般来说,我的问题是,我如何在物化视图上运行find_each,也许具体来说,如何向物化视图添加主键以便我可以运行find_each?
编辑:为清楚起见,我在Matview 中没有id 列。如果我有的话,我听说它可能会被活动记录识别为默认主键,但我还没有测试过。
【问题讨论】:
标签: postgresql rails-activerecord materialized-views