Как изменить набор секционированных таблиц в Postgres? - PullRequest
0 голосов
/ 22 июня 2010

Я создал набор секционированных таблиц в Postgres и начал вставлять множество строк через основную таблицу.Когда процесс загрузки обрушился на меня, я понял, что должен был объявить строку идентификатора BIGSERIAL (BIGINT с последовательностью, за кадром), но непреднамеренно установить ее как SERIAL (INTEGER).Теперь, когда у меня загружено несколько миллиардов строк, я пытаюсь изменить столбец на BIGINT.Процесс, кажется, работает, но занимает много времени.Так что, на самом деле, я не знаю, работает ли он или завис.Я бы предпочел не перезапускать весь процесс загрузки снова.

Есть предложения?

Ответы [ 2 ]

1 голос
/ 22 июня 2010

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

Чтобы выяснить, работает ли этот процесс, посмотрите, использует ли он процессор при запуске top (системы UNIX) или диспетчер задач (Windows).В Linux top -c даже покажет вам, что делают клиентские процессы PostgreSQL.Вы, вероятно, просто ожидали, что это займет меньше времени, чем первоначальная загрузка, чего не произойдет, и он все еще работает, а не зависает.

0 голосов
/ 22 июня 2010

Перезапустите его ( уточняющее редактирование: перезапустите весь процесс загрузки снова).

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

Кроме того, посмотрите, сколько из рекомендаций по заполнению баз данных вы можете выполнить.


Исправление от @archnid:

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

...