powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите восстановить базу postgres
5 сообщений из 5, страница 1 из 1
Помогите восстановить базу postgres
    #39065686
Использую СУБД postgres 9.2.4-1.1с

Одна из баз у клиентов стала выдавать вот такое особщение:

missing chunk number 0 for toast value 22499742 in pg_toast_2619

Понял что есть служебная таблица pg_toast_2619 которой соответствует реальная таблиц. Не могу понять как найти в какой реальной таблице проблема и как найти проблемную запись таблицы.
...
Рейтинг: 0 / 0
Помогите восстановить базу postgres
    #39065912
Фотография grufos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Москвитин Сергей,

сделайте следующее
select * from pg_class where oid = 2619
в поле relname увидите имя реальной таблицы
...
Рейтинг: 0 / 0
Помогите восстановить базу postgres
    #39065914
Фотография grufos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Москвитин Сергей,

по второму вопросу (замените имена полей и таблицы на свой):

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
-- пример скрипта для тестирования TOAST поля "messages.contents" на предмет целостности и отображение в консоли ключей с разрушенными TOAST
DO $f$
declare
    curid INT := 0;
    vcontent TEXT;
    badid INT;
begin
FOR badid IN SELECT message_id FROM messages LOOP
    curid = curid + 1;
    if curid % 100000 = 0 then
        raise notice '% rows inspected', curid;
    end if;
    begin
        SELECT contents
        INTO vcontent
        FROM messages where message_id = badid;
        vcontent := substr(vcontent,1000,2000);
    exception
        when others then
            raise notice 'data for message % is corrupt', badid;
            continue;
    end;
end loop;
end;
$f$;
...
Рейтинг: 0 / 0
Помогите восстановить базу postgres
    #39066479
grufos,

По последнему посту не понял.
Выяснил что проблема в таблице pg_catalog.pg_statistic
Но не понимаю как работает второй код. И какое именно поле может быть битым.
Поля данной таблицы:

CREATE TABLE pg_statistic
(
starelid oid NOT NULL,
staattnum smallint NOT NULL,
stainherit boolean NOT NULL,
stanullfrac real NOT NULL,
stawidth integer NOT NULL,
stadistinct real NOT NULL,
stakind1 smallint NOT NULL,
stakind2 smallint NOT NULL,
stakind3 smallint NOT NULL,
stakind4 smallint NOT NULL,
stakind5 smallint NOT NULL,
staop1 oid NOT NULL,
staop2 oid NOT NULL,
staop3 oid NOT NULL,
staop4 oid NOT NULL,
staop5 oid NOT NULL,
stanumbers1 real[],
stanumbers2 real[],
stanumbers3 real[],
stanumbers4 real[],
stanumbers5 real[],
stavalues1 anyarray,
stavalues2 anyarray,
stavalues3 anyarray,
stavalues4 anyarray,
stavalues5 anyarray
)
WITH (
OIDS=FALSE
);
ALTER TABLE pg_statistic
OWNER TO postgres;
GRANT ALL ON TABLE pg_statistic TO postgres;
...
Рейтинг: 0 / 0
Помогите восстановить базу postgres
    #39066733
Фотография grufos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Москвитин Сергей,
Москвитин СергейИ какое именно поле может быть битым.
Это вот эти поля:
Москвитин Сергейstanumbers1 real[],
stanumbers2 real[],
stanumbers3 real[],
stanumbers4 real[],
stanumbers5 real[],
stavalues1 anyarray,
stavalues2 anyarray,
stavalues3 anyarray,
stavalues4 anyarray,
stavalues5 anyarray
то есть такие которые могут быть достаточно объемными (они помечаются как extended storage)
в psql наберите
Код: sql
1.
\dS+ pg_statistic


и увидите, что у этой таблицы ряд полей помечен именно таким образом.

однако, так как у вас сбойной является таблица статистики, то её данные можно просто пересоздать командой
Код: sql
1.
vacuum analyze verbose;
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите восстановить базу postgres
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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