Postgres'更新'查询产生内存不足错误

时间:2016-06-03 19:14:46

标签: sql postgresql out-of-memory relational-database

我有两张桌子:

CREATE TABLE public.organization
(
 id_organization SERIAL PRIMARY KEY,
 name varchar, 
 country varchar,
 prod_id varchar
 );


CREATE TABLE public suborganization
(
 id_suborganization SERIAL PRIMARY KEY,
 id_organization bigint references organization(id_organization) ON UPDATE CASCADE ON DELETE CASCADE,
 full_address varchar,
 prod_id varchar
 );

两个表都与suborganization.id_organization分开填充。我尝试使用以下语句填充此列:

UPDATE suborganization SET id_organization = organization.id_organization 
FROM organization 
WHERE suborganization.prod_id = organization.prod_id;

但是,Postgres正在生成以下错误消息并且无法填充外键:

ERROR: out of memory
DETAIL: Failed on request of size 8

这些是大型表,大约有2亿行,但是我在一台机器上运行它,内存为62.8GB,work_mem设置为4MB。

任何人都可以解释为什么我收到此错误消息?它只是一个硬件问题还是我需要重新配置postgres?或者是我的方法是有缺陷的,有没有更好的方法来创建这个外键?

在Red Hat Enterprise Linux Server 6.7上运行的PotgreSQL 9.4.7

1 个答案:

答案 0 :(得分:0)

这是由on update cascade选项引起的,该选项主要通过"""触发。

需要触发触发器的行列表保存在内存中,这就是占用内存的内容。

尝试删除FK约束的cascade选项。或者批量更新例如一百万。