作者:张连壮 PostgreSQL 研发负责人
从事多年 PostgreSQL 数据库内核开发,对 Citus 有非常深入的研究。
PostgreSQL 本身不具备数据闪回和数据误删除保护功能,但在不同场景下也有对应的解决方案。
本文由作者在 2021 PCC 大会的演讲主题《PostgreSQL 数据找回》整理而来,上一篇《盘点 | 常用 PG 数据恢复方案概览》介绍了 PostgreSQL 常见的 数据恢复方案。本篇将介绍 预防数据丢失方案的实现原理及使用示例。
预防数据丢失方案
前文提到数据丢失的主要操作为 DDL 和 DML 。
本篇主要介绍关于 DDL 和 DML 操作,如何预防数据丢失的方案。
DDL 操作
事件触发器
当事件以其定义的方式在数据库中相关的发生时,触发事件触发器。主要可预防以下四种 DDL 事件。
事件 | 说明 |
---|---|
ddl_command_start | DDL 执行前执行 |
ddl_command_end | DDL 执行后执行, 通过 pg_event_trigger_ddl_commands() 可以获取操作的对象 |
sql_drop | DDL 执行后执行, 通过 pg_event_trigger_dropped_objects() 可以获取所有被删除的对象 |
table_rewrite | DDL 执行前执行, 例如 ALTER TABLE、ALTER TYPE 等 |
当表被删除后,可以通过 ddl_command_start 事件组织删除操作。