更新查询永远

时间:2013-03-27 22:38:22

标签: sql postgresql sql-update plpgsql postgresql-9.1

我有一个表my_obj,其中包含两个字段value_a varchar(5)value_b varchar(5)

实际上,这两个值变化不大,可以成对分组。最多只能给出一个最大数量< 100对。相反,我在my_obj中有数百万条记录。

所有干扰value_avalue_b的查询都需要很长时间。所以我决定为所有可能的对创建表对,其中包含value_avalue_b字段。因此,我在表my_obj中添加了字段id_pair。

我已经用它的所有对填充了表对,没关系。 所以,现在,我想用这个命令相应地更新表my_obj

update my_obj
set id_pair = p.id
from my_obj as o
inner join pair as p on p.value_a = o.value_a and p.value_b = o.value_b;

虽然该查询已推出很长时间,但我运行了select count(*) from my_obj where id_pair > 0;并返回了我0

因此我的更新查询出现问题。 EDIT / NB :作为事务单元的plpgsql函数在事务结束时执行提交,所以完全正常我在表中看不到任何修改因为我中断了这个功能。

我使用my_obj主键的条件更改了更新查询,以便只在一条记录上执行一个update

update my_obj
set id_pair = p.id
from my_obj as o
inner join pair as p on p.value_a = o.value_a and p.value_b = o.value_b
where o.id = 1234567;  -- 1234567 being the key of an existing record

令人惊讶的是,当我启动此update只有一条记录的查询时,似乎永远

我做错了什么?

1 个答案:

答案 0 :(得分:3)

这对你有什么用?

update my_obj o
set    id_pair = p.id
from   pair p
where  p.value_a = o.value_a and
       p.value_b = o.value_b and
       o.id = 1234567;