powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Не могу удалить таблицу через dblink
16 сообщений из 16, страница 1 из 1
Не могу удалить таблицу через dblink
    #39502021
Таблица партицированная.

Просто в pgAdmin выполняется без проблем:
Код: sql
1.
2.
3.
4.
5.
BEGIN WORK; 
lock table only history_str IN ACCESS EXCLUSIVE MODE; --таблица-родитель
lock table partitions.history_str_p2017_07_11  IN ACCESS EXCLUSIVE MODE; --таблица, которую надо удалить
drop table partitions.history_str_p2017_07_11; --удаляю.
COMMIT WORK;


В одну строчку тоже выполняется.



А в dblink удалить не получается.

Пробую так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
...функция-шмункция....

PERFORM dblink_connect('mycon','host=xx.xx.xx.xx dbname=promdb port=7432 user=userxxx password=xxx'::text);

RAISE NOTICE '1';
		PERFORM dblink_exec('mycon','BEGIN WORK; lock table only history_str IN ACCESS EXCLUSIVE MODE;');
RAISE NOTICE '2';		
		PERFORM dblink_exec('mycon','lock table partitions.history_str_p2017_07_11 IN ACCESS EXCLUSIVE MODE;');
RAISE NOTICE '3';		
		PERFORM dblink_exec('mycon','drop table partitions.history_str_p2017_07_11;');
RAISE NOTICE '4';		
		PERFORM dblink_exec('mycon','COMMIT WORK;');
RAISE NOTICE '5';		
		PERFORM dblink_exec('mycon','COMMIT;');
		
PERFORM dblink_disconnect('mycon');  





После запуска функции выдает только 1 и висит.

При этом блокировка в БД создается, а дальше не идет.


Если сделать не по шагам, а в одну строку тоже висит, просто непонятно где именно.

Подключение и прямое и через pgbouncer - результат одинаковый.

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

посмотрите на локи.
имхую -- ваш дблинк ждет окончания ваше же вызывающей его транзакции, чтобы повесить лок.
т.е. если вы хотите поглядывать за табличкой -- посматривайте в коротенькие автономии, а не из основной транзы.
...
Рейтинг: 0 / 0
Не могу удалить таблицу через dblink
    #39502032
qwwqУдалитель таблиц,

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


Просто в одну строку тот же самый результат:

Код: sql
1.
PERFORM dblink_exec('mycon','BEGIN WORK; lock table only history_str IN ACCESS EXCLUSIVE MODE; lock table partitions.history_str_p2017_07_11 IN ACCESS EXCLUSIVE MODE; drop table partitions.history_str_p2017_07_11;COMMIT WORK;')
...
Рейтинг: 0 / 0
Не могу удалить таблицу через dblink
    #39502033
qwwqУдалитель таблиц,

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


локов там появляется два, у одного granted f у другого t.
...
Рейтинг: 0 / 0
Не могу удалить таблицу через dblink
    #39502038
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Удалитель таблицqwwqУдалитель таблиц,

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


Просто в одну строку тот же самый результат:

Код: sql
1.
PERFORM dblink_exec('mycon','BEGIN WORK; lock table only history_str IN ACCESS EXCLUSIVE MODE; lock table partitions.history_str_p2017_07_11 IN ACCESS EXCLUSIVE MODE; drop table partitions.history_str_p2017_07_11;COMMIT WORK;')


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

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


локов там появляется два, у одного granted f у другого t.
да и в пж--стат-активити будет видно ожидание, наверняка
...
Рейтинг: 0 / 0
Не могу удалить таблицу через dblink
    #39502042
qwwqУдалитель таблицпропущено...



Просто в одну строку тот же самый результат:

Код: sql
1.
PERFORM dblink_exec('mycon','BEGIN WORK; lock table only history_str IN ACCESS EXCLUSIVE MODE; lock table partitions.history_str_p2017_07_11 IN ACCESS EXCLUSIVE MODE; drop table partitions.history_str_p2017_07_11;COMMIT WORK;')


йоптель, покажите предшествующие строки головной транзакции , вызывающей эту строку.
вангую -- мы там обратились уже к тому, чаво лочить собрались.
дедлок. только неразрешимый в автомате, т.к. дерево не видит "деток" дблинка.


Из dblink до этого ничего не вызывается.

А с таблицей делается вот что:
Код: sql
1.
EXECUTE 'ALTER TABLE partitions.history_str_p2017_07_11 NO INHERIT history_str; SELECT pg_terminate_backend(pid) FROM pg_locks WHERE relation IN (SELECT oid FROM pg_class WHERE relname=''history_str_p2017_07_11'') AND pid<>pg_backend_pid();';   
...
Рейтинг: 0 / 0
Не могу удалить таблицу через dblink
    #39502045
qwwqдедлок. только неразрешимый в автомате, т.к. дерево не видит "деток" дблинка.



ого, а как же тогда табличку удалить, если не через dblink?

В EXECUTE не получается вставить lock table.
...
Рейтинг: 0 / 0
Не могу удалить таблицу через dblink
    #39502053
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Удалитель таблицqwwqдедлок. только неразрешимый в автомате, т.к. дерево не видит "деток" дблинка.



ого, а как же тогда табличку удалить, если не через dblink?

В EXECUTE не получается вставить lock table.
через дблинк можно, но обращаться в самой головной транзакции к той же табле нельзя. вы же не в стороннем клиенте сидите -- все, на что посмотрели до конца транзы будет залочено так или иначе.

поэтому и прочую деятельность так же делать надо -- в автономиях.
...
Рейтинг: 0 / 0
Не могу удалить таблицу через dblink
    #39502058
qwwqУдалитель таблицпропущено...




ого, а как же тогда табличку удалить, если не через dblink?

В EXECUTE не получается вставить lock table.
через дблинк можно, но обращаться в самой головной транзакции к той же табле нельзя. вы же не в стороннем клиенте сидите -- все, на что посмотрели до конца транзы будет залочено так или иначе.

поэтому и прочую деятельность так же делать надо -- в автономиях.


Это вы это:

Код: sql
1.
BEGIN AUTONOMOUS TRANSACTION;




имеете ввиду?
...
Рейтинг: 0 / 0
Не могу удалить таблицу через dblink
    #39502061
Удалитель таблицqwwqпропущено...

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

поэтому и прочую деятельность так же делать надо -- в автономиях.


Это вы это:

Код: sql
1.
BEGIN AUTONOMOUS TRANSACTION;




имеете ввиду?


Читаю про них:

При этом становятся возможны взаимоблокировки в одном сеансе, так как автономная транзакция может оказаться в спутанном состоянии с одной из приостановленных транзакций в сеансе.

Какая-то мутноватая вещь.
...
Рейтинг: 0 / 0
Не могу удалить таблицу через dblink
    #39502067
qwwqУдалитель таблицпропущено...




ого, а как же тогда табличку удалить, если не через dblink?

В EXECUTE не получается вставить lock table.
через дблинк можно, но обращаться в самой головной транзакции к той же табле нельзя. вы же не в стороннем клиенте сидите -- все, на что посмотрели до конца транзы будет залочено так или иначе.

поэтому и прочую деятельность так же делать надо -- в автономиях.



Прочитал раз 20 и вроде дошло...


вы имели ввиду что в головной транзакции нельзя

Код: sql
1.
ALTER TABLE



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


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

там вам сразу объяснят, что ддл в транзакции не бывает. совсем.

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



лучше расскажите, что вам на самом деле надо, а не то, где вы пытаетесь копать, посколь думаете, что там рыхлее.
...
Рейтинг: 0 / 0
Не могу удалить таблицу через dblink
    #39502376
qwwq


лучше расскажите, что вам на самом деле надо, а не то, где вы пытаетесь копать, посколь думаете, что там рыхлее.


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

лучше расскажите, что вам на самом деле надо, а не то, где вы пытаетесь копать, посколь думаете, что там рыхлее.


Нужно просто удалить дочернюю таблицу в процедуре.
в какой дуре ? в которой ещё что--то делается ? и именно с этой табличкой ?
и вот то, что деется -- судя по всему и есть то, "что вам надо на самом деле"


вы можете всё выполнить в одной и той же транзакции. на кой вам пытаться сделать что--то автономно, если вы ни хера не понимаете в локах, автономиях и дедлоках головной с автономией ?
//как я помню, партман так когда--то и делал, или пытался.

если я правильно понял -- вы тот самый ацидофил, который нас недавно пугал по поводц "транзакций в плпгскл" ?

или всёж таки можете попытаться получить представление о транзакциях, конкуренции, "автономиях" (дблинк , или встроенное новьё) и т.п. И потом таки решить для себя -- нужны ли вам длинные локи в длинных (как правило рассчётных) транзакциях, с наприятностями типа отката ддл при ошибке в расчете ( и соответственными очередями длинных транзакций на локи таблиц для ддл), или всё же всю ддл-работу вынести в автономии, и позаботиться о том, чтобы не залочить изменяемое в автономия головной транзакцией.
...
Рейтинг: 0 / 0
Не могу удалить таблицу через dblink
    #39502444
qwwq,

вы, юный падаван, оказались абсолютно правы.

Достаточно было исключить все операции из EXECUTE и выполнить их в одной транзакции в dblink.

Иначе блокировка из дблинка ожидала окончания ALTER и EXECUTE и висела бесконечно.



Большое спасибо за помощь, Дима!
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Не могу удалить таблицу через dblink
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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