用异常哈希更新大表

时间:2019-02-23 19:03:29

标签: postgresql exception

我有一个大表“ Foo”,具有数百万行,为简单起见,让表具有3列:bigint类型的“ @ID”,HSTORE格式的文本类型的“ hs_params”和int类型的“ number”。我需要将“ number”写为“ hs_params”作为“ NUMBER”(或更新(如果已经存在))。问题在于,在某些记录中,“ hs_params”不是有效的HSTORE,并且在尝试对其进行强制转换时会引发异常“ internal_error”(代码XX000)。我尝试使用下面的代码找出存储错误参数的行的“ @ID”,但是它运行了2个小时,当我与数据库失去连接时崩溃,因此看起来查询不应该只是处理异常,而且要尽可能快。

DO $$
DECLARE
   r record;
   hs hstore;
BEGIN
FOR r IN SELECT * FROM "Foo"
LOOP
    BEGIN
        hs = r."hs_params"::hstore;
    EXCEPTION WHEN internal_error THEN
        raise notice 'ERROR on % with hs text %', r."@ID", r."hs_params";
    END;
END LOOP;
END $$;

0 个答案:

没有答案