mimeo

在PostgreSQL实例间进行表级复制

概览

扩展包名版本分类许可证语言
mimeo1.5.1ETLPostgreSQLSQL
ID扩展名BinLibLoadCreateTrustReloc模式
9700mimeo-
相关扩展dblink pg_jobmon postgres_fdw pglogical pg_cron pg_partman repmgr pg_fact_loader pg_failover_slots

name conflict with pg_partman

版本

类型仓库版本PG 大版本包名依赖
EXTMIXED1.5.11817161514mimeodblink
RPMPIGSTY1.5.11817161514mimeo_$v-
DEBPGDG1.5.11817161514postgresql-$v-mimeo-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64
el8.aarch64
el9.x86_64
el9.aarch64
el10.x86_64
el10.aarch64
d12.x86_64
PGDG 1.5.1
PGDG 1.5.1
PGDG 1.5.1
PGDG 1.5.1
PGDG 1.5.1
d12.aarch64
PGDG 1.5.1
PGDG 1.5.1
PGDG 1.5.1
PGDG 1.5.1
PGDG 1.5.1
d13.x86_64
PGDG 1.5.1
PGDG 1.5.1
PGDG 1.5.1
PGDG 1.5.1
PGDG 1.5.1
d13.aarch64
PGDG 1.5.1
PGDG 1.5.1
PGDG 1.5.1
PGDG 1.5.1
PGDG 1.5.1
u22.x86_64
u22.aarch64
u24.x86_64
u24.aarch64

构建

您可以使用 pig build 命令构建 mimeo 扩展的 RPM 包:

pig build pkg mimeo         # 构建 RPM 包

安装

您可以直接安装 mimeo 扩展包的预置二进制包,首先确保 PGDGPIGSTY 仓库已经添加并启用:

pig repo add pgsql -u          # 添加仓库并更新缓存

使用 pig 或者是 apt/yum/dnf 安装扩展:

pig install mimeo;          # 当前活跃 PG 版本安装
pig ext install -y mimeo -v 18  # PG 18
pig ext install -y mimeo -v 17  # PG 17
pig ext install -y mimeo -v 16  # PG 16
pig ext install -y mimeo -v 15  # PG 15
pig ext install -y mimeo -v 14  # PG 14
dnf install -y mimeo_18       # PG 18
dnf install -y mimeo_17       # PG 17
dnf install -y mimeo_16       # PG 16
dnf install -y mimeo_15       # PG 15
dnf install -y mimeo_14       # PG 14
apt install -y postgresql-18-mimeo   # PG 18
apt install -y postgresql-17-mimeo   # PG 17
apt install -y postgresql-16-mimeo   # PG 16
apt install -y postgresql-15-mimeo   # PG 15
apt install -y postgresql-14-mimeo   # PG 14

创建扩展

CREATE EXTENSION mimeo CASCADE;  -- 依赖: dblink

用法

mimeo: PostgreSQL 实例之间专用的按表复制扩展

提供 PostgreSQL 实例之间的按表复制,支持快照(全量复制)、增量(基于时间戳/ID)和 DML(插入/更新/删除)模式。

启用

CREATE SCHEMA mimeo;
CREATE EXTENSION mimeo SCHEMA mimeo;

需要 dblink 扩展。可选安装 pg_jobmon 用于监控。

设置数据源

-- 创建到源数据库的 dblink 连接
SELECT mimeo.dblink_mapping_create(
    p_mapping_name := 'source_db',
    p_data_source := 'host=sourcehost dbname=sourcedb user=replicator password=secret',
    p_superuser := true
);

快照复制(全表复制)

每次运行时复制整个源表:

SELECT mimeo.snapshot_maker(
    p_src_table := 'public.my_table',
    p_dblink_id := 1  -- 来自 dblink_mapping
);

-- 刷新快照
SELECT mimeo.refresh_snap('public.my_table');

增量复制(基于时间戳)

基于递增时间戳列复制行:

SELECT mimeo.inserter_maker(
    p_src_table := 'public.events',
    p_control := 'created_at',  -- 时间戳列
    p_dblink_id := 1
);

-- 增量刷新
SELECT mimeo.refresh_inserter('public.events');

对于有更新的表(不仅仅是插入):

SELECT mimeo.updater_maker(
    p_src_table := 'public.orders',
    p_control := 'updated_at',
    p_dblink_id := 1
);

SELECT mimeo.refresh_updater('public.orders');

DML 复制(插入/更新/删除)

通过源表上的触发器实现完整 DML 追踪:

SELECT mimeo.dml_maker(
    p_src_table := 'public.accounts',
    p_dblink_id := 1
);

SELECT mimeo.refresh_dml('public.accounts');

调度刷新

使用 pg_jobmon 或 cron 调度定期调用相应的 refresh_* 函数。

关键特性

  • 三种复制模式:快照、增量、DML
  • 按表复制(无需复制整个数据库)
  • 在不同 PostgreSQL 版本之间工作
  • 基于 dblink 实现跨数据库通信

最后修改 2026-03-14: update extension metadata (953cbd0)