powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как удалить таблицу и не стать жертвой взаимоблокировки?
59 сообщений из 59, показаны все 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
Как удалить таблицу и не стать жертвой взаимоблокировки?
    #39469016
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сникерсТут дети интересуются что плохого в pg_sleep(100), если он выполняется на сервере из крона?
если в этот момент одмин переведет часы на час /год назад, вы будете ждать вашего слипа час/год соответственно. даже 5 минут м.б. роскошью.

потому как пг_слип написан колхозниками, не знающими о наличии (и доступности) монотонного "внутреннего" времени. и зачем вам ещё один таймер в кроне ?
...
Рейтинг: 0 / 0
Как удалить таблицу и не стать жертвой взаимоблокировки?
    #39469018
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сникерсЭто все в одном блоке EXECUTE через ; каждая команда.

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

ой, держите меня семеро.
в общем не работает так, даже когда слип 5 минут


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

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

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

Дать товарищу дробовик для отстреливания ног или обойдемся без членовредительства?

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

Дать товарищу дробовик для отстреливания ног или обойдемся без членовредительства?давайте

челу явно не хватает рубцов и потерянных конечностей
как стимула к размышлению
а медитировать над безопасными тестами видимо не полачаецца

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



1) NO INHERIT
2) килл всех сессий которые в pg_lock по удаляеммой таблички
3)дроп.


Проработал несколько дней нормально.


Потом появился дедлок снова.



Затем сделал так:
1) NO INHERIT
2) килл всех сессий которые в pg_lock по удаляеммой таблички
3) пауза 30 сек
4)килл всех сессий которые в pg_lock по удаляеммой таблички
5) дроп


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



1) NO INHERIT
2) килл всех сессий которые в pg_lock по удаляеммой таблички
3)дроп.


Проработал несколько дней нормально.


Потом появился дедлок снова.



Затем сделал так:
1) NO INHERIT
2) килл всех сессий которые в pg_lock по удаляеммой таблички
3) пауза 30 сек
4)килл всех сессий которые в pg_lock по удаляеммой таблички
5) дроп


все равно дедлок.

begin;
set local deadlock_timeout to '1h';
drop ...
commit;
...
Рейтинг: 0 / 0
Как удалить таблицу и не стать жертвой взаимоблокировки?
    #39477590
сникерс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Bogukсникерсделал так:



1) NO INHERIT
2) килл всех сессий которые в pg_lock по удаляеммой таблички
3)дроп.


Проработал несколько дней нормально.


Потом появился дедлок снова.



Затем сделал так:
1) NO INHERIT
2) килл всех сессий которые в pg_lock по удаляеммой таблички
3) пауза 30 сек
4)килл всех сессий которые в pg_lock по удаляеммой таблички
5) дроп


все равно дедлок.

begin;
set local deadlock_timeout to '1h';
drop ...
commit;

ого, круто!

т.е. тут deadlock_timeout = 1 час включится только НА ВРЕМЯ ТРАНЗАКЦИИ?
и в течении этого часа drop table будет ждать освобождение таблицы от блокировки и пытаться ее удалить?

deadlock_timeout в БД останится такимже как был? (1 сек)
...
Рейтинг: 0 / 0
Как удалить таблицу и не стать жертвой взаимоблокировки?
    #39477594
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сникерс,

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

Если не вникать в детали - то да.


Спасибо!

Просто пытаюсь разобраться и желательно не положить сервер


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

Код: sql
1.
2.
3.
ERROR: cannot begin/end transactions in PL/pgSQL
SQL-состояние: 0A000
Подсказка: Use a BEGIN block with an EXCEPTION clause instead.




ищу как обойти.
...
Рейтинг: 0 / 0
Как удалить таблицу и не стать жертвой взаимоблокировки?
    #39477618
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сникерсЗатем сделал так:
1) NO INHERIT
2) килл всех сессий которые в pg_lock по удаляеммой таблички
3) пауза 30 сек
4)килл всех сессий которые в pg_lock по удаляеммой таблички
5) дроп

это посильнее фауста гётте

а крестиком не пробовали ?
или гладью

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

вы не можете объяснить, какого хера вы внутри транзакции делаете паузы ? чего вы хотите ими добиться ? добро бы вы рулили через паузы другими сеансами дблинк-а -- это было бы понятно. хотя там проще выставить сеансу дблинка statement_timout , а не рулить асинхронщиной в цыкле ожыдания.


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

Код: sql
1.
2.
3.
4.
begin;
set local deadlock_timeout to '1h';
DROP table my_table;
commit;



А внутри процедуры не работает:


Код: sql
1.
2.
3.
EXECUTE 'begin;set local deadlock_timeout to ''1h'';'||'DROP TABLE ' ||  quote_ident(tablename)|| ';commit;';
ERROR:  cannot begin/end transactions in PL/pgSQL
HINT:  Use a BEGIN block with an EXCEPTION clause instead.




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


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


А вдруг кто-то недобитый останется ?а вдруг кто-то новый поднимется ?

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



А вдруг кто-то недобитый останется ?а вдруг кто-то новый поднимется ?

или старый переподнимется

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

Вам английским языком написано:

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

Вам английским языком написано:

ERROR: cannot begin/end transactions in PL/pgSQL


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

чел не понимает, что BEGIN; в SQL (SQL.BEGIN) и BEGIN в plpgSQL (plpgSQL.BEGIN) разные слова разных языков, и означают разное.

это в поцгрессе сплошь и рядом
например
END;
EXECUTE;
и т.п. -- сыршенно разные слова.

вплоть до SELECT .... INTO . Из за чего требуется отдельная альтернатива --"CREATE table .... as select ...."
...
Рейтинг: 0 / 0
Как удалить таблицу и не стать жертвой взаимоблокировки?
    #39477708
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сникерсqwwqпропущено...
а вдруг кто-то новый поднимется ?

или старый переподнимется

да!так зачем же ждать этих новых ?

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

чел не понимает, что BEGIN; в SQL (SQL.BEGIN) и BEGIN в plpgSQL (plpgSQL.BEGIN) разные слова разных языков, и означают разное.

это в поцгрессе сплошь и рядом
например
END;
EXECUTE;
и т.п. -- сыршенно разные слова.

вплоть до SELECT .... INTO . Из за чего требуется отдельная альтернатива --"CREATE table .... as select ...."



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

rtfm
https://www.postgresql.org/docs/current/static/plpgsql.html

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

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


да!так зачем же ждать этих новых ?

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

может быть наоборот поторопицца, пока не набегло ?
они не должны набежать, таблица уже не наследник, селекты её не найдут новые.

1. смотря как написаны. можно расписать запросы в хранимках и напрямую к партициям

2. автовакуумы таки найдут. а они быстро переподимаются при отстреле

3. ну и инсерты с апдейтами могут найти -- если влезут в партицирующие условия (триггерам инхеритс похер, они по имени ищут партиции обычно)


но самое забавное -- захера человек в транзакции делает паузу ? он действительно дятил, или просто ваш родственник ?
...
Рейтинг: 0 / 0
Как удалить таблицу и не стать жертвой взаимоблокировки?
    #39479262
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
надо банальный
LOCK TABLE ... ACCESS EXCLUSIVE
он сам подождет пока не освободится таблица
...
Рейтинг: 0 / 0
Как удалить таблицу и не стать жертвой взаимоблокировки?
    #39481516
сникерс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тут подумал...

а почему собственно дедлок-то возникает?

почему delete table просто не дождется пока селект закончится?
...
Рейтинг: 0 / 0
Как удалить таблицу и не стать жертвой взаимоблокировки?
    #39481730
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сникерсЯ тут подумал...

а почему собственно дедлок-то возникает?

почему delete table просто не дождется пока селект закончится?

потому что drop table в случае партиционированной таблицы требует 2 лока:
1)на саму удаляемую таблицу
а потом
2)на таблицу-предок (или основную)

А select берет локи на теже вещи в другом порядке
1)сначала на таблицу предок
а потом уже
2)на таблицы потомки.


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


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