sidan
@sidan
php-developer

Текст в первичном ключе и его переиндексация?

Добрый день!

Есть относительно большая табличка (50 млн записей), всю жизнь там был id в виде varchar(255) + обычный индекс btree без unique, в котором хранили кастомный UUID на 36 символов.
Сейчас начали переносить базу на новый сервер, переделали немного эту табличку - стал id varchar(36) primary key.
Загрузка 35млн строк пачками через copy прошла нормально. После этого следующая пачка выдает:
postgres@server0:/var/backups/$ psql -d db -c "copy table from '/var/backups/2017-11-16-2017-11-30.txt'"
ERROR:  compressed data is corrupted
CONTEXT:  COPY table, line 9185

При этому line иногда плавает. Проверили указанную строку - данные корректные.
Нагуглил что стоит попробовать reindex, который выдает:
ERROR:  index row requires 190372000 bytes, maximum size is 8191


Сам id представляет собой UUID 0001-71239d5f-5a017c63-39ec-d22112a2.

Что делаем не так и какие варианты решения?

Заранее спасибо.
  • Вопрос задан
  • 248 просмотров
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
Для uuid в принципе не нужен текст, есть нативный одноимённый тип данных.

При этому line иногда плавает.

Проверьте память. Физическую на сервере. Подозрение что косячит.
И диски тоже проверьте.
Потому что есть всего одно место, где можно поймать "compressed data is corrupted" и связано оно с распаковкой сжатых данных из toast. reindex тоже говорит, что прочитано что-то совсем не то, что предполагалось.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы