我有一个postgresql 9.2安装,其中包含一个包含客户数据的表(约500K客户),不幸的是还包括一些重bytea
类型的字段。
CUSTOMERS1 | id | first name | last name | ...
----------------------------------------------------- ...
c1005 ... ... ...
我们的任务是将数据与外部源合并,遗憾的是,它不使用完全相同的外键。
CUSTOMERS2 | id | first name | last name | ...
----------------------------------------------------- ...
101005 ... ... ...
因此,虽然customers1
在c1005
中的ID为customers2
,但同一个ID为101005
,即c
刚刚被删除,100000
被添加到id。
我现在正在尝试将customers2_id
列添加到customers1
,其中包含与customers2
中相同的ID。我提出了以下SQL命令:
ALTER TABLE customers1 ADD COLUMN customers2_id numeric(15,0);
UPDATE customers1
SET customers2_id = to_number(trim(leading 'c' from id), '9999') + 100000;
不幸的是,当我运行命令时,它需要永远(我们让它运行> 15小时仍然没有完成)。此外,postgres进程似乎是空闲的(根据活动监视器)。
一些注意事项:
UPDATE
命令,例如WHERE id = 'c1005'
快速运行,WHERE子句中包含~10个元素,20个元素速度大幅降低INSERT INTO
个新表并指定为插入select语句SELECT id, to_number(trim(leading 'c' from id), '9999') + 100000 FROM customers2
的值;它运行在< 10秒我们怎样才能加快速度并解决这个问题?什么可能是那么慢的真正问题?
答案 0 :(得分:2)
桌子似乎已经腐败了。我们通过重新创建模式并执行INSERT INTO
来复制表(为方便起见,我们将新的id字段添加到新模式,并让它在插入时计算新的id)。现在一切顺利。