
Петр
14.12.2016
16:19:50
Давай таблицу чинить

blkmrkt
14.12.2016
16:19:57
а битые туплы не могу удалить - ошибка attempted to delete invisible tuple

Петр
14.12.2016
16:20:21
На какой конкретно записи падает?

Google

Петр
14.12.2016
16:20:32
Пробовал все записать нулями?

blkmrkt
14.12.2016
16:20:42
все эт как?

Петр
14.12.2016
16:21:04
В смысле страницы испорченные

blkmrkt
14.12.2016
16:21:22

Петр
14.12.2016
16:21:37
Ты не спеши
На какой записи падает запрос?

blkmrkt
14.12.2016
16:21:52
там в таблице comments примерно 3милл туплов с ненулевым xmax, и подозреваю что они ссылаются на трансакции которых давно нет, вот я в тупике тк не знаю как это вылечить

Петр
14.12.2016
16:22:21
давай так

blkmrkt
14.12.2016
16:22:23
это при попытке pg_dump

lemi
14.12.2016
16:23:23
а бд изначально какой версии была ?

Петр
14.12.2016
16:23:24
\set FETCH_COUNT 1
\pset pager off
select ctid,colmn1,...,columnN from comments;

blkmrkt
14.12.2016
16:23:27
пробую удалить туплы с битыми таймштампами:
elete from comments where date > '1 Jan 9999' or date < '1 Jan 2000' or date_found > '1 Jan 9999' or date_found < '1 Jan 2000';
но ошибка attempted to delete invisible tuple

Google

Петр
14.12.2016
16:23:57

blkmrkt
14.12.2016
16:23:59

lemi
14.12.2016
16:27:38
это не вот это случаем ?
Preventing Transaction ID Wraparound Failures

blkmrkt
14.12.2016
16:27:58

lemi
14.12.2016
16:28:07
хотя с с 9.5 это пофиксили
если БД изначально была на 9.5 то но деложно

Петр
14.12.2016
16:30:02
Не упал еще?

blkmrkt
14.12.2016
16:31:13
Не упал еще?
не, я в tmux запустил и детачнулся, там очнь много на экран печатается

lemi
14.12.2016
16:31:29
а БД с нуля делали на 9.5 или pg_upgrade ?

blkmrkt
14.12.2016
16:31:34
когда делал pg_dump, на 300м мегабайте дампа он отваливался
о вот вылетело
ERROR: timestamp out of range

Sergey
14.12.2016
16:33:09
Может это битые данные, которые не приводятся в разумный timestamp?

blkmrkt
14.12.2016
16:33:31

Sergey
14.12.2016
16:33:36
A vacuum какой-нибудь над таблицей проходит?

blkmrkt
14.12.2016
16:33:46

Sergey
14.12.2016
16:33:57
Это понятно
А vacuum freeze?

Google

blkmrkt
14.12.2016
16:34:15

Петр
14.12.2016
16:35:04
а какое перед этим сообщение?

blkmrkt
14.12.2016
16:35:21
а ничего, просто данные в табличке

Петр
14.12.2016
16:35:31
какая последняя страница?
вот, давай сюда

blkmrkt
14.12.2016
16:35:43
(92815,25) вот это может

Петр
14.12.2016
16:35:52
да

blkmrkt
14.12.2016
16:35:56
SELECT ctid, * from comments;

Петр
14.12.2016
16:36:05
готов расстатья с этими данными?

blkmrkt
14.12.2016
16:36:10
конечно!
напалмом

Петр
14.12.2016
16:36:21
хоккей
SELECT ctid, column1...,columnN from comments where ctid='(92816,1)'; и т.д.
ну и
SELECT ctid, column1...,columnN from comments where ctid='(92816,2)'; и т.д.
эта страница падает или нет?
ну значит и следующая испорчена
в общем понял, как найти испорченные страницы?
давай их затрем

blkmrkt
14.12.2016
16:39:28
с цифрой 4 ничего не возвращает

Петр
14.12.2016
16:40:01
останови пг

Google

blkmrkt
14.12.2016
16:40:16
done

Петр
14.12.2016
16:40:17
а не, спот
нене, запусти обратно

blkmrkt
14.12.2016
16:40:27
ок запустил

Петр
14.12.2016
16:40:52
посмотри как файл называется
на каком файле падает?

blkmrkt
14.12.2016
16:41:16
ээ а как это посмотреть?

Петр
14.12.2016
16:41:30
в логе ничего нет?

Admin
ERROR: S client not available

Петр
14.12.2016
16:43:00
если нет, то select relfilenode from pg_class where relname = 'comments';

blkmrkt
14.12.2016
16:43:14
в логе ничего нет?
это на запрос select ctid, * from comments where ctid='(92816,3)':
2016-12-14 18:42:31 EET [17076-1] postgres@vw WARNING: using index "pg_toast_2619_index" despite IgnoreSystemIndexes
2016-12-14 18:42:31 EET [17076-2] postgres@vw WARNING: using index "pg_toast_2619_index" despite IgnoreSystemIndexes
2016-12-14 18:42:31 EET [17076-3] postgres@vw ERROR: MultiXactId 3036690260 does no longer exist -- apparent wraparound
2016-12-14 18:42:31 EET [17076-4] postgres@vw STATEMENT: FETCH FORWARD 1 FROM _psql_cursor
2016-12-14 18:42:31 EET [17076-5] postgres@vw ERROR: current transaction is aborted, commands ignored until end of transaction block
2016-12-14 18:42:31 EET [17076-6] postgres@vw STATEMENT: CLOSE _psql_cursor

Петр
14.12.2016
16:44:42
посмотри еще oid бд
select oid,datname from pg_database;

blkmrkt
14.12.2016
16:45:05
oid такой же
а
16385

Петр
14.12.2016
16:45:59
вот, где у тебя лежит файл
16385/16443 ?

blkmrkt
14.12.2016
16:46:07
sek

Петр
14.12.2016
16:46:44
у тебя в таблице есть лобы?

Google

blkmrkt
14.12.2016
16:47:06
/var/lib/postgresql/9.5/main/base/16385
блобы?

Петр
14.12.2016
16:47:20
LOB

blkmrkt
14.12.2016
16:47:40
есть туплы которые в тостах лежат
но про lob не слышал

Петр
14.12.2016
16:48:00
хм, надо подумать

blkmrkt
14.12.2016
16:48:34
postgres@3081:~/9.5/main/base/16385$ ls -lah | grep 16443 | wc -l
110

Петр
14.12.2016
16:48:50
я бы рекомендовал тебе перед затиркой страниц сделать копию всех касающихся к commets файлов

blkmrkt
14.12.2016
16:48:55
110 кусков этого файла 16443

Петр
14.12.2016
16:49:34
вот, так надо как то посчитать

blkmrkt
14.12.2016
16:49:39
у меня места нет, но все диски отзеркалены в гуглохранилище, поэтому если что не так, восстановлю проделав все сначала
есть внешний медленный hdd, может туда pgdata перенесу?

Петр
14.12.2016
16:50:26
это долго

blkmrkt
14.12.2016
16:50:43

Петр
14.12.2016
16:50:45
у тебя же есть несколько строк, перед тем как запрос упал?

blkmrkt
14.12.2016
16:51:18

Петр
14.12.2016
16:51:30
ладно, сейчас вычислим
по крайней мере попробуем

blkmrkt
14.12.2016
16:51:46
странно что это не автоматизировано еще

Петр
14.12.2016
16:52:17
по идее 92816 должна быть в первом файле