Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Разбить тяжелый Update на много легких. / 5 сообщений из 5, страница 1 из 1
15.01.2016, 09:58
    #39147965
Deff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбить тяжелый Update на много легких.
Надо сделать это
Код: plsql
1.
Update ad_image_list set image =null where filename ='ok' and image is not null 


Так как запрос затрагивает большой объем данных, решил разбить на много маленьких.

Так не получается запустить в Query tool:
Код: plsql
1.
2.
3.
while exists(select * from ad_image_list where filename ='ok' and image is not null) LOOP
	Update ad_image_list set image =null where id in (select id from ad_image_list where filename ='ok' and image is not null limit 100);
END LOOP;



Сделал так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE or replace FUNCTION update_image_list() RETURNS VOID AS
$$
BEGIN
while exists(select * from ad_image_list where filename ='ok' and image is not null) LOOP
	Update ad_image_list set image =null where id in (select id from ad_image_list where filename ='ok' and image is not null limit 100);
END LOOP;

END;
$$
LANGUAGE plpgsql;

select update_image_list()



И выяснил функция в одной транзакции выполняется. Т.е. та же самая большая транзакция.

Так как же быть, не запускать же руками
Код: plsql
1.
Update ad_image_list set image =null where id in (select id from ad_image_list where filename ='ok' and image is not null limit 100);

1000 раз.

Как сделать в цикле update с комитами, не используя сторонние приложения?
...
Рейтинг: 0 / 0
15.01.2016, 10:09
    #39147972
big-trot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбить тяжелый Update на много легких.
Один из вариантов - написать программу. Лучше всего на скрипте, например shell (bash).
Возможно попробовать через dblink. Внешние запросы могут коммитится. Соединяемся через dblink к своей же базе.
...
Рейтинг: 0 / 0
15.01.2016, 10:19
    #39147987
tadmin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбить тяжелый Update на много легких.
DeffКак сделать в цикле update с комитами, не используя сторонние приложения?
Если вручную, можно писать на pgScript и исполнять в pgAdmin.
...
Рейтинг: 0 / 0
15.01.2016, 11:21
    #39148063
p2.
p2.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбить тяжелый Update на много легких.
Deffне получается запустить в Query toolограничивая себя возможностями только сервера, не стоит пенять на используемый на клиенте инструмент.

Deffне запускать же руками
Код: plsql
1.
Update ad_image_list set image =null where id in (select id from ad_image_list where filename ='ok' and image is not null limit 100);

1000 раз.можно записаться на курсы generate_series и копипаста.

DeffТак как запрос затрагивает большой объем данных, решил разбить на много маленьких.И главный вопрос, ради зачем?
...
Рейтинг: 0 / 0
15.01.2016, 11:43
    #39148082
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбить тяжелый Update на много легких.
Deff,

попробуйте подцепить апдейтуемое как внешнюю таблицу, используя postgres_fdw (они в нём "апдейтебл") . и апдейтить её через этого "клиента" (как наружнюю -- т.е. в "автономии"). хорошо должно получиться.

или по старинке -- встроенным клиентом dblink [это extension такой]. (там всё в ваших -- т.е большая свобода рук, но всё "в текстах" ).
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Разбить тяжелый Update на много легких. / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]