Увидеть все или как восстановить случайно удаленные записи.

Mar 29, 2016 14:58

Что делать, если вы случайно удалили одну или несколько записей ? Надо быстро остановить autovacuum для этой таблицы и воспользоваться расширением pg_dirtyread.

create table qq (a text);
insert into qq values('1'), ('2');
select * from qq;
a
---
1
2
(2 rows)
delete from qq;
DELETE 2
select * from qq;
a
---
(0 rows)

Запретить autovaccum на этой таблице

ALTER TABLE qq SET (
autovacuum_enabled = false, toast.autovacuum_enabled = false
);
ALTER TABLE

Установить расширение pg_dirtyread и воспользоваться функцией pg_dirtyread(), которая покажет все версии записей таблицы. Для понимания механизмов этого надо прочитать раздел документации постгреса про MVCC.

SELECT * FROM pg_dirtyread('qq'::regclass) as t(t text);
t
---
1
2
(2 rows)

Когда-то для этого надо было комментировать строчку в исходниках постгреса, а теперь достаточно поставить это расширение. Когда вы починитесь, не забудьте разрешить автовакуум на таблице, чтобы не попасть в проблемы.

ALTER TABLE qq RESET (
autovacuum_enabled, toast.autovacuum_enabled
);

PS. Надеюсь, что все понимают, что это расширение полезно не только для DELETE, но и для UPDATE.

pg

Previous post Next post
Up