|
|
|
работа с pg_toast
|
|||
|---|---|---|---|
|
#18+
Всем привет. Есть задача по миграции на более новую версию PostgreSQL, но при дампе возникают ошибки ссылающиеся на pg_toast_NNNN, в одной таблице, в которой хранятся бинарные данные (bytea). Для быстрого выхода из ситуации решил ненужные строки из этой таблицы удалить, но даже удаление приводило к ошибке. Тогда в ненужных строках я заменил update'ом бинарники на что-то типа 'a22' и после этого эти строки легко удалились, но дамп так и не проходит, так как огромный файл есть и в нужных мне строках, но в какой именно неизвестно. Стал искать в information_schema где же хранятся эти toast-данные, но там так и не нашел. При vacuum'ации таблицы обратил внимание как Postgres выводит сообщение про этот toast (pg_toast.pg_toast_NNNN), сделал выборку по этому имени таблицы и о чудо, данные появились, теперь я могу заменить/очистить их тут (конечно это потеря файла, но что-то мне подсказывает, что его искать никто не будет :), другого пока выхода не вижу, так как мигрировать надо будет уже скоро). Так же посмотрел и другие toast таблицы которые упоминались при vacuum'ации, строк в них было до 50, а вот в "проблемной" 311 тысяч строк. И вот теперь мне очень хочется найти эту запись в исходной таблице, чтобы понять кто его записал и что у него за название. Отсюда вопрос, как в Postgres'е найти связку: строка&toast если знаем таблицу в которой надо искать и pg_toast_NNNN Ну и так как замена данных это совсем уж грубое решение, может кто подскажет как дампить такие огромные (хотя точный размер пока и не знаю) данные? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2015, 07:07 |
|
||
|
работа с pg_toast
|
|||
|---|---|---|---|
|
#18+
Начну с конца - дампить - как обычно. Несколько терабайт нормально дампятся. Ваша проблема в отказе оборудования с вероятностью 95% (не записалось, диски подыхают, память битая, что угодно) во время занесения этой информации в базу и возложения МПХ на логи (вопрос в профнепригодности админа, если он вообще был). Теперь ваш основной вопрос... Вообще справка рулит. Вас интересует вот эта страница: http://www.postgresql.org/docs/9.4/static/catalog-pg-class.html Если грубо, то вам надо что-то типа: Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2015, 14:28 |
|
||
|
работа с pg_toast
|
|||
|---|---|---|---|
|
#18+
D0KXВсем привет. Есть задача по миграции на более новую версию PostgreSQL, но при дампе возникают ошибки ссылающиеся на pg_toast_NNNN, в одной таблице, в которой хранятся бинарные данные (bytea). Для быстрого выхода из ситуации решил ненужные строки из этой таблицы удалить, но даже удаление приводило к ошибке. Тогда в ненужных строках я заменил update'ом бинарники на что-то типа 'a22' и после этого эти строки легко удалились, но дамп так и не проходит, так как огромный файл есть и в нужных мне строках, но в какой именно неизвестно. Стал искать в information_schema где же хранятся эти toast-данные, но там так и не нашел. При vacuum'ации таблицы обратил внимание как Postgres выводит сообщение про этот toast (pg_toast.pg_toast_NNNN), сделал выборку по этому имени таблицы и о чудо, данные появились, теперь я могу заменить/очистить их тут (конечно это потеря файла, но что-то мне подсказывает, что его искать никто не будет :), другого пока выхода не вижу, так как мигрировать надо будет уже скоро). Так же посмотрел и другие toast таблицы которые упоминались при vacuum'ации, строк в них было до 50, а вот в "проблемной" 311 тысяч строк. И вот теперь мне очень хочется найти эту запись в исходной таблице, чтобы понять кто его записал и что у него за название. Отсюда вопрос, как в Postgres'е найти связку: строка&toast если знаем таблицу в которой надо искать и pg_toast_NNNN Ну и так как замена данных это совсем уж грубое решение, может кто подскажет как дампить такие огромные (хотя точный размер пока и не знаю) данные? 1)См тут все разобрано http://www.databasesoup.com/2013/10/de-corrupting-toast-tables.html 2)А какая версия Postgres у вас и когда последний раз вы ее обновляли? 3)Правильно ли я понимаю что Backups через pg_dump вообще никогда не делались на базе? -- Maxim Boguk www.postgresql-consulting.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2015, 14:42 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=39048626&tid=1997780]: |
0ms |
get settings: |
9ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
43ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 314ms |

| 0 / 0 |
