powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Разрушилась таблица pg_largeobject, как ее удалить?
38 сообщений из 38, показаны все 2 страниц
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549083
Личинка DBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день,


Разрушилась таблица pg_largeobject.


Она была пустая,

При попытке подключения к БД ошибка


Код: sql
1.
ОШИБКА: не удалось открыть файл "base/20685/12090": No such file or directory



Этот файл соответсвует таблице pg_largeobject.



По идее, ее надо просто дропнуть и создать заново, она была пустой.


Но удалить мне ее не получается.


Код: sql
1.
2.
3.
4.
DROP TABLE pg_largeobject

ОШИБКА: доступ запрещён: "pg_largeobject" - это системный каталог
SQL-состояние: 42501





Пдскажите как пересоздать эту таблицу?
...
Рейтинг: 0 / 0
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549104
Личинка DBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Экспорт из БД не идет.

Даже 1 таблицы с указанием имени.
...
Рейтинг: 0 / 0
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549109
Личинка DBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ай нид хелп
...
Рейтинг: 0 / 0
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549120
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Личинка DBAай нид хелп

Мммм вряд ли бы она разрушилась если бы она была пустая. ;)
Можете попробовать запустить базу в single user режиме и сделать truncate на pg_largeobject.
(но я бы предварительно бы сделал backup всего кластера).



PS: может проще будет сделать пустой файл base/20685/12090
...
Рейтинг: 0 / 0
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549146
Личинка DBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim BogukЛичинка DBAай нид хелп

Мммм вряд ли бы она разрушилась если бы она была пустая. ;)
Можете попробовать запустить базу в single user режиме и сделать truncate на pg_largeobject.
(но я бы предварительно бы сделал backup всего кластера).



PS: может проще будет сделать пустой файл base/20685/12090



Обнаружил еще что файл индекса разрушился в табличке pg_largeobject_metadata.

аналогичная ошибка была на файл индекса.

сделал REINDEX TABLE pg_largeobject_metadata; - это устранило ошибку.


Однако количество записей в pg_largeobject_metadata около 1 млн.

есть подозрение что в pg_largeobject тоже были записи
...
Рейтинг: 0 / 0
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549150
Личинка DBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim, пустой файлик подложил - вроде пока все в норме.


Большое спасибо!
...
Рейтинг: 0 / 0
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549156
Личинка DBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно как-нибудь проверить были ли записи в таблице pg_largeobject ?
...
Рейтинг: 0 / 0
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549167
Личинка DBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Плохо дело, на аналогичном сервере в pg_largeobject 5 млн записей
...
Рейтинг: 0 / 0
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549175
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Личинка DBAПлохо дело, на аналогичном сервере в pg_largeobject 5 млн записей

расскажите, пжалста, как вы этого добиваетесь.

то у вас пг_прок развалилась, то вот -- лаже--объекты пропали.

что вы там, кстати сказать хранили ? неужто файлики ? и почему не в bytea , а в лаже .
...
Рейтинг: 0 / 0
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549181
Личинка DBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqЛичинка DBAПлохо дело, на аналогичном сервере в pg_largeobject 5 млн записей

расскажите, пжалста, как вы этого добиваетесь.




Около тысячи отднотипных серверов на относительно слабом железе.
...
Рейтинг: 0 / 0
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549184
Личинка DBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq
что вы там, кстати сказать хранили ? неужто файлики ? и почему не в bytea , а в лаже .


Можете подробнее написать что вы имеете ввиду?
...
Рейтинг: 0 / 0
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549209
Личинка DBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pg_largeobject, на скотлько я понял, хранит BLOB в себе.
...
Рейтинг: 0 / 0
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549210
Личинка DBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МОжно как-нибудь запросом выяснить какие в каких таблицах используются данные из pg_largeobject?
...
Рейтинг: 0 / 0
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549211
Личинка DBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и чем грозит потеря данных из pg_largeobject ?
...
Рейтинг: 0 / 0
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549301
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Личинка DBAМОжно как-нибудь запросом выяснить какие в каких таблицах используются данные из pg_largeobject?

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

PS: если проблема потери данных постоянно происходит то сервера однотипно неверно настроены. Или fsync=on/syncronous_commit=on забыли, или если это windows то забыли отключить write cache на диске где база.
Вот этой вот галочки на дисках с базой под WIN быть НЕ ДОЛЖНО (и тем более не должно быть второй галочки):


PPS: backups нужно делать а лучше base backup + wal archive для всех серверов.
...
Рейтинг: 0 / 0
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549302
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Личинка DBApg_largeobject, на скотлько я понял, хранит BLOB в себе.

Вот не надо blob использовать а надо нормально bytea поля делать. BLOB в pg реализации - дурной.
...
Рейтинг: 0 / 0
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549390
Личинка DBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,

спасибо, изучаю.
...
Рейтинг: 0 / 0
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549503
1xx1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разрабы обещали это доработать, а от лобов отказаццо.
Только как оно сейчас - не очень понятно.
...
Рейтинг: 0 / 0
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549512
Личинка DBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim BogukЛичинка DBAМОжно как-нибудь запросом выяснить какие в каких таблицах используются данные из pg_largeobject?

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


Прочел.

Понял вот что:

BLOB-ы разбиваются на куски и записываются в pg_largeobject кусками.
У каждого куска есть loid и pageno.

loid - это и есть номер BLOB,
а pageno - это номер страницы на которые разделен BLOB.

loid - пишется при востановлении в лог, например:

Код: sql
1.
pg_restore: восстановление большого объекта с OID 99993





Но я не понял как по loid понять к какой таблице относится конкретный BLOB.

Подскажите пожалуйста как связать loid с таблицей.
...
Рейтинг: 0 / 0
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549538
Личинка DBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Личинка DBAПодскажите пожалуйста как связать loid с таблицей.

очень надо
...
Рейтинг: 0 / 0
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549548
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Личинка DBAЛичинка DBAПодскажите пожалуйста как связать loid с таблицей.

очень надо

Никак в ту сторону что вы хотите (т.е. нет инфы о связи loid -> table, тем более что ничего не мешает иметь ссылку на один и тот же large object в нескольких таблицах или даже не иметь ссылки на loid ни в одной таблице)
Надо в таблице смотреть... там есть loid поле или как то еще называется и вот оно уже ссылается на oid в pg_largeobject.
...
Рейтинг: 0 / 0
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549559
Личинка DBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim BogukЛичинка DBAпропущено...


очень надо

Никак в ту сторону что вы хотите (т.е. нет инфы о связи loid -> table, тем более что ничего не мешает иметь ссылку на один и тот же large object в нескольких таблицах или даже не иметь ссылки на loid ни в одной таблице)
Надо в таблице смотреть... там есть loid поле или как то еще называется и вот оно уже ссылается на oid в pg_largeobject.

Пытаюсь понять какие таблицы используют BLOB.

Создал скрипт создания таблиц БД pg_dump-ом.

Таблицы, которые используеют pg_largeobject должны иметь тип столбцов bytea ?
...
Рейтинг: 0 / 0
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549596
Личинка DBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поэкспериментировал:

Код: sql
1.
2.
3.
4.
5.
create table test_b(id int, bbb bytea);


insert into test_b(id,bbb) VALUES (1,'dsfsdf');
insert into test_b(id,bbb) VALUES (2,pg_read_binary_file('postgresql.conf'));




Записи в test_b есть.



Но в pg_largeobject пусто:

Код: sql
1.
2.
3.
SELECT COUNT(*) FROM pg_largeobject

0





Значит не bytea а какой-то другой тип использует pg_largeobject.

Но какой?
...
Рейтинг: 0 / 0
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549623
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Личинка DBAПоэкспериментировал:

Код: sql
1.
2.
3.
4.
5.
create table test_b(id int, bbb bytea);


insert into test_b(id,bbb) VALUES (1,'dsfsdf');
insert into test_b(id,bbb) VALUES (2,pg_read_binary_file('postgresql.conf'));




Записи в test_b есть.



Но в pg_largeobject пусто:

Код: sql
1.
2.
3.
SELECT COUNT(*) FROM pg_largeobject

0





Значит не bytea а какой-то другой тип использует pg_largeobject.

Но какой?

Идем в https://www.postgresql.org/docs/10/static/lo-funcs.html
и видим что ссылка на LO из таблицы имеет тип oid.
Но вообще LO может существовать сам по себе без ссылки на него из таблиц.
...
Рейтинг: 0 / 0
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549625
Личинка DBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Восстановил БД рядом из файла экспорта, которому несколько дней и тогда все было в норме.

Таблица не пустая.

Там pg_largeobject не пустая, в ней 5 млн строк


Я вот думаю, можно ли файлы от этой таблицы из восстановленной БД подложить в рабочую?
...
Рейтинг: 0 / 0
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549627
Личинка DBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim BogukЛичинка DBAПоэкспериментировал:

Код: sql
1.
2.
3.
4.
5.
create table test_b(id int, bbb bytea);


insert into test_b(id,bbb) VALUES (1,'dsfsdf');
insert into test_b(id,bbb) VALUES (2,pg_read_binary_file('postgresql.conf'));




Записи в test_b есть.



Но в pg_largeobject пусто:

Код: sql
1.
2.
3.
SELECT COUNT(*) FROM pg_largeobject

0





Значит не bytea а какой-то другой тип использует pg_largeobject.

Но какой?

Идем в https://www.postgresql.org/docs/10/static/lo-funcs.html
и видим что ссылка на LO из таблицы имеет тип oid.
Но вообще LO может существовать сам по себе без ссылки на него из таблиц.


сейчас поищу с типом oid таблицы.
...
Рейтинг: 0 / 0
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549631
Личинка DBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,

нашел таблицы с полями oid !!!
...
Рейтинг: 0 / 0
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549643
Личинка DBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получилось заполнить pg_largeobject:

Код: sql
1.
2.
create table test_b2(id int, bbb oid);
insert into test_b2(id,bbb) VALUES (2,lo_from_bytea(0,pg_read_binary_file('postgresql.conf')));




Значит действительно pg_largeobject заполнено данными из таблиц с типом полей oid.
...
Рейтинг: 0 / 0
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549660
Личинка DBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,

а рельно ли подменить файлы для этой таблички?
...
Рейтинг: 0 / 0
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549728
Личинка DBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Личинка DBAMaxim Boguk,

а рельно ли подменить файлы для этой таблички?

В общем, подменил файлы.



При экспорте pg_dump ом ошибка:

g_dump: ошибка чтения большого объекта 1500848: не удалось прочитать блок 734927 в файле "base/20685/12090.5" (прочитано байт: 0 из 8192)


С пустым файлом была ошибка типа:

g_dump: ошибка чтения большого объекта 100000: не удалось прочитать блок 1 в файле "base/20685/12090" (прочитано байт: 0 из 8192)
...
Рейтинг: 0 / 0
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549730
Личинка DBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю надо unlink сделать этому BLOB.


Но как получить весь список проблемных BLOB ?
...
Рейтинг: 0 / 0
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549733
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Личинка DBAMaxim Boguk,
а рельно ли подменить файлы для этой таблички?

Нет. Вообще невозможно подменять файлы в базе и получать рабочий результат. Файлы отдельных таблиц сами по себе почти бессмысленны.
...
Рейтинг: 0 / 0
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549743
Личинка DBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim BogukЛичинка DBAMaxim Boguk,
а рельно ли подменить файлы для этой таблички?

Нет. Вообще невозможно подменять файлы в базе и получать рабочий результат. Файлы отдельных таблиц сами по себе почти бессмысленны.

А скажите, как можно перелить данные из pg_largeobject одной БД в другую?

эта таблица системного каталога
...
Рейтинг: 0 / 0
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549759
Личинка DBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ведь можно как-то разрешить таблицы системного каталога редактировать?
...
Рейтинг: 0 / 0
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549766
Личинка DBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,

может есть какой-нить режим, допускающий редактирование системных таблиц?
...
Рейтинг: 0 / 0
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549779
Личинка DBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
создам отдельный топик про редатирование таблиц каталога, чтобы все в одну кучу не валить.
...
Рейтинг: 0 / 0
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549805
Фотография mefman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Личинка DBAсоздам отдельный топик про редатирование таблиц каталога, чтобы все в одну кучу не валить.
лучше сразу в ПТ
...
Рейтинг: 0 / 0
Разрушилась таблица pg_largeobject, как ее удалить?
    #39549833
Личинка DBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В итоге:

-поднял БД рядом из бэкапа
-удалил все из pg_largeobject delet-ом
-перелил данные черед дблинк с восстановленной БД (insert into select)
...
Рейтинг: 0 / 0
38 сообщений из 38, показаны все 2 страниц
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Разрушилась таблица pg_largeobject, как ее удалить?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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