LINUX.ORG.RU

SQL ALTER TABLE


0

1

Есть таблица в БД, которая крутится под PostgreSQL. Таблица довольно жирная (300к+ записей), но главное, что она очень нагружена (в основном на чтение). Необходимо сделать ATLER TABLE, добавить одно поле. Каким образом это лучше всего сделать? Очень важна скорость такой операции, т.к. простой недопустим. Сделать репликацию не представляется возможным из-за того, что нет свободного железа.

300 тысяч это фигня. Сделай копию таблицы и посмотри сколько её ALTER займёт. Рискну предположить ~ 500 миллисекунд. А если default значение нового поля NULL то таблица вообще не будет перезаписываться.

Eshkin_kot ★★ ()
Ответ на: комментарий от Rastafarra

> добавить рядом табличку-клон с новым полем, скопировать в нее, переименовать.

Вы конечно же в курсе что RENAME не изменят ссылки во VIEW? :)

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

Eshkin_kot ★★ ()
Ответ на: комментарий от Eshkin_kot

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

tanenn ()
Ответ на: комментарий от anonymous

9.0.1. Мне сложно достоверно судить, что на самом деле происходило, т.к. мягко говоря не гуру. Но у меня есть предположения в пользу того, что всё же не в блоке висел альтер. После запуска альтера, поднялась нагрузка на проц и на дисковую подсистему. Причем значительно. iotop показывал, что процессы постгреса ушатывают дисковую подсистему. Думаю при ожидании разблокировки такого бы не было.

tanenn ()
Ответ на: комментарий от Eshkin_kot

> Вы конечно же в курсе что RENAME не изменят ссылки во VIEW? :)

клевая фича.

Rastafarra ★★★★ ()
Ответ на: комментарий от x905

А я пробовал, успеха не добился. Даже в 3-5 утра на БД есть значительная нагрузка, это самая популярная таблица в БД. Поэтому и интересуют нестандатные техники.

tanenn ()
Ответ на: комментарий от tanenn

alter table t add f text default null; выполнится за миллисекунды потому что не изменяет таблицы, только её описание. Вам только нужно сделать поддержку NULL значения в Вашем новом поле.

Eshkin_kot ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.