Что делать, если вы случайно удалили одну или несколько записей ? Надо быстро остановить 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.