powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как удалить таблицу и не стать жертвой взаимоблокировки?
25 сообщений из 59, страница 1 из 3
Как удалить таблицу и не стать жертвой взаимоблокировки?
    #39468709
сникерс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую.


В ночном задании при попытке удаления таблицы процесс удаления становится жертвой взаимоблокировки.


ПОдскажите пожалуйста, как можно удалить таблицу и не стать жертвой?
...
Рейтинг: 0 / 0
Как удалить таблицу и не стать жертвой взаимоблокировки?
    #39468760
сникерс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приоритет мож процесса как-то повысить чтобы жертвой его не выбирали?
...
Рейтинг: 0 / 0
Как удалить таблицу и не стать жертвой взаимоблокировки?
    #39468789
сникерс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем, есть огромная партичированная таблица.

И удаляются части ее партиций.





Можно ли как-то отключить перед удалением партицию, которую собираюсь удалить?



Читаю сейчас про это:

NO INHERIT
таблица_родитель

Эта форма удаляет целевую таблицу из списка потомков указанной родительской таблицы. Результаты запросов к родительской таблице после этого не будут включать записи, взятые из целевой таблицы.


Вроде похоже на отключение, но никогда так не делал.


Подскажите, можно ли ее


Код: sql
1.
ALTER TABLE таблица_партиция NO INHERIT таблица_родитель



А потом:

Код: sql
1.
DROP TABLE таблица_партиция




?
...
Рейтинг: 0 / 0
Как удалить таблицу и не стать жертвой взаимоблокировки?
    #39468793
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сникерс,

можно, но обычно одна ошибка при этом сменяется другой (другими)

стесняюсь спросить -- в "головной" таблице ONLY у вас часом не завалялось записей ?
...
Рейтинг: 0 / 0
Как удалить таблицу и не стать жертвой взаимоблокировки?
    #39468812
сникерс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqсникерс,

можно, но обычно одна ошибка при этом сменяется другой (другими)

стесняюсь спросить -- в "головной" таблице ONLY у вас часом не завалялось записей ?


Ну а если сделать

NO INHERIT


пауза


DROP ?


про ONLY не понял..
...
Рейтинг: 0 / 0
Как удалить таблицу и не стать жертвой взаимоблокировки?
    #39468849
сникерс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqодна ошибка при этом сменяется другой (другими)



А можете сказать хоть примерно какие ошибки появляются?
...
Рейтинг: 0 / 0
Как удалить таблицу и не стать жертвой взаимоблокировки?
    #39468874
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сникерсqwwqодна ошибка при этом сменяется другой (другими)



А можете сказать хоть примерно какие ошибки появляются?
поищите сами.
вкратце -- ошибка выполнения уже стартовавших запросов к таблице, по причине либо недоступности спланированной в план таблички(DROP). либо отсутствия уже спланированного объекта (кажется колонки) в числе наследуемых (NO INHERIT).

когда-то держал живую ссылку на оное
ага , случайно вспомнил
https://www.postgresql.org/message-id/4A083AAA.2020808@agama.tv
-- это в момент дропа. про NO INHERIT с лёта не найду, но тоже приятно.

про
Код: sql
1.
SELECT * FROM ONLY TABLE

-- "понаберут по объявлениям"(сс)
...
Рейтинг: 0 / 0
Как удалить таблицу и не стать жертвой взаимоблокировки?
    #39468936
сникерс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqсникерспропущено...



А можете сказать хоть примерно какие ошибки появляются?
поищите сами.
вкратце -- ошибка выполнения уже стартовавших запросов к таблице, по причине либо недоступности спланированной в план таблички(DROP). либо отсутствия уже спланированного объекта (кажется колонки) в числе наследуемых (NO INHERIT).

когда-то держал живую ссылку на оное
ага , случайно вспомнил
https://www.postgresql.org/message-id/4A083AAA.2020808@agama.tv]https://www.postgresql.org/message-id/4A083AAA.2020808@agama.tv
-- это в момент дропа. про NO INHERIT с лёта не найду, но тоже приятно.

про
Код: sql
1.
SELECT * FROM ONLY TABLE

-- "понаберут по объявлениям"(сс)


В данном конкретном случае это не страшно, т.к. там только селекты идут.

На счет ONLY почитал, но не совсем понял связь с вопросом.

А скажите, есть ли какая-нибудь функция узнать родительскую таблицу для таблицы_партиции?
...
Рейтинг: 0 / 0
Как удалить таблицу и не стать жертвой взаимоблокировки?
    #39468943
сникерс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq
Код: sql
1.
SELECT * FROM ONLY TABLE



В родительской пусто.
...
Рейтинг: 0 / 0
Как удалить таблицу и не стать жертвой взаимоблокировки?
    #39468947
сникерс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сникерсА скажите, есть ли какая-нибудь функция узнать родительскую таблицу для таблицы_партиции?
...
Рейтинг: 0 / 0
Как удалить таблицу и не стать жертвой взаимоблокировки?
    #39468958
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сникерс,

чо, и диплом купил ?

Код: sql
1.
2.
3.
4.
5.
6.
postgres=# SELECT inhrelid::regclass,inhparent::regclass FROM pg_inherits;
 inhrelid | inhparent 
----------+-----------
 t_1      | t_t
 t_2      | t_t
(2 строки)
...
Рейтинг: 0 / 0
Как удалить таблицу и не стать жертвой взаимоблокировки?
    #39468962
сникерс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqсникерс,

чо, и диплом купил ?

Код: sql
1.
2.
3.
4.
5.
6.
postgres=# SELECT inhrelid::regclass,inhparent::regclass FROM pg_inherits;
 inhrelid | inhparent 
----------+-----------
 t_1      | t_t
 t_2      | t_t
(2 строки)




Да дорогие дипломы-то....



Спасибо :)
...
Рейтинг: 0 / 0
Как удалить таблицу и не стать жертвой взаимоблокировки?
    #39468965
сникерс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще осталось придумать как паузу сделать между командами.
...
Рейтинг: 0 / 0
Как удалить таблицу и не стать жертвой взаимоблокировки?
    #39468975
сникерс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сникерсЕще осталось придумать как паузу сделать между командами.


пока не нашел как.
...
Рейтинг: 0 / 0
Как удалить таблицу и не стать жертвой взаимоблокировки?
    #39468976
ursido
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сникерс,

pg_sleep(100)
...
Рейтинг: 0 / 0
Как удалить таблицу и не стать жертвой взаимоблокировки?
    #39468996
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сникерсЕще осталось придумать как паузу сделать между командами.
а зачем ?

если конечно не секрет.
...
Рейтинг: 0 / 0
Как удалить таблицу и не стать жертвой взаимоблокировки?
    #39468997
сникерс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ursidoсникерс,

pg_sleep(100)


О, круто, благодарю!!!
...
Рейтинг: 0 / 0
Как удалить таблицу и не стать жертвой взаимоблокировки?
    #39469003
сникерс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqсникерсЕще осталось придумать как паузу сделать между командами.
а зачем ?

если конечно не секрет.


Сделал так:

Код: sql
1.
2.
3.
4.
5.
ALTER TABLE таблица_партиция NO INHERIT таблица_родитель;

pg_sleep(60);

DROP TABLE таблица_партиция;




Но паузы в 60 сек оказалось недостаточно.


С первого раза не удаляется таблица.





А расчитывал на то что select-ы за время паузы завершаться, а новые таблица_родитель уже будут без использования таблица_партиция, которую надо удалить.

Но это в теории, на практике как лучше реализовать я не знаю
...
Рейтинг: 0 / 0
Как удалить таблицу и не стать жертвой взаимоблокировки?
    #39469005
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ursidoсникерс,

pg_sleep(100)
не надо учить детей плохому.


кстати недавно заметил, что пжодмин3 под линухами ведёт себя много много хуже , чем пжодмин под виндой. когда одновременно пытаешься работать в разных конкурирующих окнах--сеансах. до того плохо, что пришлось из psql cancel-ить бекенды, после попытки cancel-нуть сеанс, с детским pg_sleep(1000) в dblink. всегда знал, что гуй в линухах для проформы.
из говна и палок
...
Рейтинг: 0 / 0
Как удалить таблицу и не стать жертвой взаимоблокировки?
    #39469007
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сникерс
Код: sql
1.
2.
3.
4.
5.
ALTER TABLE таблица_партиция NO INHERIT таблица_родитель;

pg_sleep(60);

DROP TABLE таблица_партиция;



это всё в одной транзакции ?

или вы транзакций не различаете ?
...
Рейтинг: 0 / 0
Как удалить таблицу и не стать жертвой взаимоблокировки?
    #39469009
ursido
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwqне надо учить детей плохому.


Здесь не приветствуется мат, упоминание падших женщин и массовые расстрелы.

Остается только это.
...
Рейтинг: 0 / 0
Как удалить таблицу и не стать жертвой взаимоблокировки?
    #39469010
сникерс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqursidoсникерс,

pg_sleep(100)
не надо учить детей плохому.


кстати недавно заметил, что пжодмин3 под линухами ведёт себя много много хуже , чем пжодмин под виндой. когда одновременно пытаешься работать в разных конкурирующих окнах--сеансах. до того плохо, что пришлось из psql cancel-ить бекенды, после попытки cancel-нуть сеанс, с детским pg_sleep(1000) в dblink. всегда знал, что гуй в линухах для проформы.
из говна и палок



Тут дети интересуются что плохого в pg_sleep(100), если он выполняется на сервере из крона?

А пг админ это да, жесть. Но тоад еще большее говнище.
...
Рейтинг: 0 / 0
Как удалить таблицу и не стать жертвой взаимоблокировки?
    #39469011
ursido
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сникерсТут дети интересуются что плохого в pg_sleep(100), если он выполняется на сервере из крона?


Обычно усилия прикладываются для ускорения выполнения скриптов.
Если Вы прикладываете усилия по его замедлению, то ой!
...
Рейтинг: 0 / 0
Как удалить таблицу и не стать жертвой взаимоблокировки?
    #39469013
сникерс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqсникерс
Код: sql
1.
2.
3.
4.
5.
ALTER TABLE таблица_партиция NO INHERIT таблица_родитель;

pg_sleep(60);

DROP TABLE таблица_партиция;



это всё в одной транзакции ?

или вы транзакций не различаете ?


Это все в одном блоке EXECUTE через ; каждая команда.



Кстати, с высоты ваших знаний, какой изящный вариант дропанья таблица_партиция можно сделать?
...
Рейтинг: 0 / 0
Как удалить таблицу и не стать жертвой взаимоблокировки?
    #39469014
сникерс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ursidoсникерсТут дети интересуются что плохого в pg_sleep(100), если он выполняется на сервере из крона?


Обычно усилия прикладываются для ускорения выполнения скриптов.
Если Вы прикладываете усилия по его замедлению, то ой!


там дропается пяток таблиц.

А это утверждение разве не верно?
А расчитывал на то что select-ы за время паузы завершаться, а новые таблица_родитель уже будут без использования таблица_партиция, которую надо удалить.
...
Рейтинг: 0 / 0
25 сообщений из 59, страница 1 из 3
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как удалить таблицу и не стать жертвой взаимоблокировки?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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