gpt4 book ai didi

postgresql - 你如何运行 ActiveRecord `find_each` 到 postgres 中的物化 View

转载 作者:行者123 更新时间:2023-11-29 11:43:08 26 4
gpt4 key购买 nike

因为我从物化 View 中提取了数千条记录 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)

虽然这很成功,但并不能替代主键。

我尝试使用以下方法向我的物化 View 添加主要约束:

ALTER MATERIALIZED matview ADD CONSTRAINT mv_pk primary key (p_id) disabled

但是失败了。

一般来说,我的问题是,如何运行 find_each在物化 View 上,也许具体来说,如何将主键添加到物化 View 以便我可以运行 find_each

编辑:为清楚起见,我没有 id Matview 中的列.如果我有的话,我听说它可能会被事件记录识别为默认主键,但我还没有测试过。

最佳答案

ActiveRecord 不关心它是否真的是数据库中的主键,但您需要使用 primary_key= 方法在您的对象上设置 primary_key 字段.

所以像这样:

class Matview < ActiveRecord::Base
self.table_name = 'MATERIALIZED_VIEW_NAME_HERE'
self.primary_key = 'ID_COLUMN_NAME_HERE'
end

关于postgresql - 你如何运行 ActiveRecord `find_each` 到 postgres 中的物化 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29038413/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com