powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как сменить тип блокировки при ALTER TABLE?
6 сообщений из 6, страница 1 из 1
Как сменить тип блокировки при ALTER TABLE?
    #39258612
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть таблица в 15 гб, 2 млн записей,в нее иногда приходится добавлять колонки. При добавлении колонок таблица блокируется. Соответственно сессия у 15 клиентов, которые сидят постоянно подвисает. Я прочитал в документации, что можно как-то сменить блокировку. цитата https://www.postgrespro.ru/doc/sql-altertable.html
авторALTER TABLE меняет определение существующей таблицы. Несколько её разновидностей описаны ниже . Заметьте, что для разных разновидностей могут требоваться разные уровни блокировок. Если явно не отмечено другое, требуется блокировка ACCESS EXCLUSIVE .
чуть ниже я ничего не нашел, нашел только режимы блокировки https://www.postgrespro.ru/doc/sql-lock.html Не понятно что с ними делать.
Вот у меня вопрос. Есть запрос:
ALTER TABLE distributors ADD COLUMN address varchar(30);
Как его переписать так, чтобы клиенты могли работать с таблицей на селект и инсерт, одновременно с добавлением новой колонки в эту таблицу?
...
Рейтинг: 0 / 0
Как сменить тип блокировки при ALTER TABLE?
    #39258618
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
azsx,

если добавлять колонки без default значения, то это операция требует очень короткий ACCESS EXCLUSIVE лок. скорей всего у вас длинные транзакции какие-то висят, которые не дают его взять. перед альтером их необходимо закрыть/прибить.

уровень блокировки никак не изменить, неправильно читаете. там написано что для некоторых операций, для которых сказано явно уровень блокировки может быть другим (например alter ... set statistics требует SHARE UPDATE EXCLUSIVE lock).
...
Рейтинг: 0 / 0
Как сменить тип блокировки при ALTER TABLE?
    #39258622
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexius, спасибо. Да, действительно у меня в каждой колонке обязательно есть default и запрет на пустые значения. И мне это надо.
А как добавить колонку без блокировок с такими условиями? (default и запрет на пустые значения).
...
Рейтинг: 0 / 0
Как сменить тип блокировки при ALTER TABLE?
    #39258640
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
azsx,

для этого придется повозиться (для больших таблиц):

1) добавить поле без default значения и без not null
2) прописать default значение
3) обновить все строки таблицы небольшими порциями в цикле и прописать нужное значение в поле
4) добавить not null (тут будет блокировка, пока вся таблица прочитается. можно предварительно разогреть если есть смысл)
...
Рейтинг: 0 / 0
Как сменить тип блокировки при ALTER TABLE?
    #39258702
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
azsxAlexius, спасибо. Да, действительно у меня в каждой колонке обязательно есть default и запрет на пустые значения. И мне это надо.
А как добавить колонку без блокировок с такими условиями? (default и запрет на пустые значения).

Если вам в 15Gb таблицу часто и регулярно приходится добавлять колонки с default value - у вас что то серьезно не то или с архитектурой или процессом вноса изменений в базу.
Как это сделать с минимальными локами - вам уже написали, но это надо скрипты писать (т.е. делать внешними по отношению к базе средствами.

--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Как сменить тип блокировки при ALTER TABLE?
    #39258781
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо Alexius так и поступлю.
Maxim Boguk, да архитектура у меня не очень. Я в качестве обучения БД и лазарус взял себе более менее реальный проект у которого из плюсов только что обработка большого массива данных и мастерю в нем чо то. Например, в день идет около 150 тысяч операций записи. Селектов раза в три больше. Удаляется тысяч 60-80. ХЗ мало это или нет.
Так как денег там нет, чисто хобби - для меня нормально там иногда добавить колонку или убрать колонку. На сайте 2 калеки, переживут. Помогите мне, пожалуйста, если время есть http://www.sql.ru/forum/1218967-a/skolko-vesyat-indeksy
зы
хотелось бы писать в postgresql на чистом С, но пока я так не умею :(
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Как сменить тип блокировки при ALTER TABLE?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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