Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как удалить таблицу и не стать жертвой взаимоблокировки? / 25 сообщений из 59, страница 1 из 3
08.06.2017, 14:52
    #39468709
сникерс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить таблицу и не стать жертвой взаимоблокировки?
Приветствую.


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


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

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





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



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

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

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


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


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


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



А потом:

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




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

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

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

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

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


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

NO INHERIT


пауза


DROP ?


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



А можете сказать хоть примерно какие ошибки появляются?
...
Рейтинг: 0 / 0
08.06.2017, 16:44
    #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
08.06.2017, 17:43
    #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
08.06.2017, 17:47
    #39468943
сникерс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить таблицу и не стать жертвой взаимоблокировки?
qwwq
Код: sql
1.
SELECT * FROM ONLY TABLE



В родительской пусто.
...
Рейтинг: 0 / 0
08.06.2017, 17:59
    #39468947
сникерс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить таблицу и не стать жертвой взаимоблокировки?
сникерсА скажите, есть ли какая-нибудь функция узнать родительскую таблицу для таблицы_партиции?
...
Рейтинг: 0 / 0
08.06.2017, 18:14
    #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
08.06.2017, 18:17
    #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
08.06.2017, 18:17
    #39468965
сникерс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить таблицу и не стать жертвой взаимоблокировки?
Еще осталось придумать как паузу сделать между командами.
...
Рейтинг: 0 / 0
08.06.2017, 18:31
    #39468975
сникерс
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалить таблицу и не стать жертвой взаимоблокировки?
сникерсЕще осталось придумать как паузу сделать между командами.


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

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

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

pg_sleep(100)


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

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


Сделал так:

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

pg_sleep(60);

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




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


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





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

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

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


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

pg_sleep(60);

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



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

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


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

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

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


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



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

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


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

pg_sleep(60);

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



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

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


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



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


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


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

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


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