Отслеживание удаленных объектов базы данных в PostgreSQL

Вы когда-нибудь оказывались в ситуации, когда вам нужно выполнить восстановление по точке-времени, чтобы восстановить упавший объект базы данных, и вам нужно найти точное время, когда объект был сброшен?
Найти точное время не всегда просто, в большинстве случаев все сводится к догадкам, мы все там бывали.
Именно поэтому некоторое время назад я написал простое расширение pg_drop_events.

pg_drop_events — это обёртка, которая использует триггеры событий PostgreSQL, обходит оператор drop и записывает информацию в таблицу pg_drop_events.

Пример данных выглядит следующим образом:

postgres=# SELECT pid, usename, query, xact_id, wal_position, objid, object_name, object_type, xact_time FROM pg_drop_events;
  pid  | usename   |             query              | xact_id | wal_position | objid | object_name | object_type  |             xact_time
-------+-----------+--------------------------------+---------+--------------+-------+-------------+--------------+-------------------------------
 54630 | bolaji    | DROP TABLE t.t3                |   25184 | 1/A266B090   | 51293 | t.t3        | table        | 2022-05-04 17:16:32.913969+00
 54633 | bolaji    | ALTER TABLE t.t1 DROP COLUMN a |   25185 | 1/A266BBF8   | 51287 | t.t1.a      | table column | 2022-05-04 17:16:39.033796+00
 54638 | postgres  | DROP SCHEMA t CASCADE          |   25186 | 1/A266BEC0   | 51287 | t.t1        | table        | 2022-05-04 17:16:56.094366+00
 54639 | postgres  | DROP SCHEMA t CASCADE          |   25186 | 1/A266BEC0   | 51290 | t.t2        | table        | 2022-05-04 17:16:56.094366+00

Вход в полноэкранный режим Выход из полноэкранного режима

Информация из pg_drop_events может быть использована для восстановления в момент времени, что и является целью расширения — помочь в восстановлении в момент времени.

PostgreSQL предоставляет различные конфигурации времени выполнения для выполнения восстановления в момент времени. Полный список можно найти здесь recovery target

Лично я предпочитаю использовать xact_id для точечного восстановления удаленного объекта базы данных. О причинах я расскажу в следующей главе.

Оцените статью
Procodings.ru
Добавить комментарий