Обновление большой таблицы с исключением хедлинг - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть большая таблица «Foo» с миллионами строк, для простоты пусть таблица имеет 3 столбца: «@ID» типа bigint, «hs_params» типа текста в формате HSTORE и «число» типа int.Мне нужно написать «номер» в «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 $$;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...