Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Миграция на добавление внешнего ключа проходит очень долго. / 2 сообщений из 2, страница 1 из 1
07.07.2014, 19:23:31
    #38689756
fdoo4un
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Миграция на добавление внешнего ключа проходит очень долго.
У меня есть 2 таблицы:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create table_1
(
	id serial
);

create table_2
(
	id serial,
	table1_id integer
);



Таблица table_2 состоит из одной записи.
Таблица table_1 очень большая. Помимо этого, она достаточно интенсивно используется для записи в рамках транзакций.

Я делаю миграцию - навешиваю внешний ключ на таблицу table_2, который будет ссылаться на table_1. В итоге запрос:
Код: sql
1.
alter table table_2 add constraint "FK" foreign key(table1_id) references table_1 (id)

проходил очень долго.

Эксперименты показали, что если просто сделать
Код: sql
1.
SELECT id FROM table_1 WHERE id = 1;

в рамках транзакции, то ALTER TABLE не пройдет пока не завершится транзакция c SELECT.
Обычно такие запросы (миграции) проходят успешно.
Версия postgres - 9.1.5

С чем может быть связано такое поведение?
...
Рейтинг: 0 / 0
08.07.2014, 04:15:14
    #38689952
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Миграция на добавление внешнего ключа проходит очень долго.
fdoo4unУ меня есть 2 таблицы:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create table_1
(
	id serial
);

create table_2
(
	id serial,
	table1_id integer
);



Таблица table_2 состоит из одной записи.
Таблица table_1 очень большая. Помимо этого, она достаточно интенсивно используется для записи в рамках транзакций.

Я делаю миграцию - навешиваю внешний ключ на таблицу table_2, который будет ссылаться на table_1. В итоге запрос:
Код: sql
1.
alter table table_2 add constraint "FK" foreign key(table1_id) references table_1 (id)

проходил очень долго.

Эксперименты показали, что если просто сделать
Код: sql
1.
SELECT id FROM table_1 WHERE id = 1;

в рамках транзакции, то ALTER TABLE не пройдет пока не завершится транзакция c SELECT.
Обычно такие запросы (миграции) проходят успешно.
Версия postgres - 9.1.5

С чем может быть связано такое поведение?

поведение совершенно штатное... пока не завершаться ВСЕ транзакции цепляющие table ЛЮБОЙ alter на нее будет ждать.
В данном случае тоже самое касается и table_1 и table_2.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Миграция на добавление внешнего ключа проходит очень долго. / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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