powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Разбить тяжелый Update на много легких.
5 сообщений из 5, страница 1 из 1
Разбить тяжелый Update на много легких.
    #39147965
Фотография Deff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо сделать это
Код: 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
Разбить тяжелый Update на много легких.
    #39147972
big-trot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Один из вариантов - написать программу. Лучше всего на скрипте, например shell (bash).
Возможно попробовать через dblink. Внешние запросы могут коммитится. Соединяемся через dblink к своей же базе.
...
Рейтинг: 0 / 0
Разбить тяжелый Update на много легких.
    #39147987
tadmin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DeffКак сделать в цикле update с комитами, не используя сторонние приложения?
Если вручную, можно писать на pgScript и исполнять в pgAdmin.
...
Рейтинг: 0 / 0
Разбить тяжелый Update на много легких.
    #39148063
p2.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Разбить тяжелый Update на много легких.
    #39148082
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deff,

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

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


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