accounts/account/sql
2025-10-09 09:09:28 +08:00
..
migrations feat(account): add migratectl CLI and golang-migrate workflows (#460) 2025-10-08 21:56:50 +08:00
20251001.migrate.to_uuid.md chore(sql,pglogical): migrate schema for pglogical compatibility & cleanup 2025-10-08 19:45:20 +08:00
readme.md feat(pglogical): add region CN/Global schema and sync guide 2025-10-09 09:09:28 +08:00
schema.sql feat(pglogical): add region CN/Global schema and sync guide 2025-10-09 09:09:28 +08:00

使用新的 migratectl CLI 可以在不同环境下快速执行迁移、校验和重置操作:

go run ./cmd/migratectl/main.go migrate --dsn "$DB_URL"
go run ./cmd/migratectl/main.go check --cn "$CN_DSN" --global "$GLOBAL_DSN"

以下命令展示了如何授予 pglogical schema 访问权限:

sudo -u postgres psql -d account -c "GRANT USAGE ON SCHEMA pglogical TO PUBLIC;"

-- 登录 postgres sudo -u postgres psql -d account

-- 授权 shenlan 对 public schema 全权限 ALTER SCHEMA public OWNER TO shenlan; GRANT ALL ON SCHEMA public TO shenlan; GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO shenlan; GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO shenlan; GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public TO shenlan;

-- 授权 pglogical schema 使用权限(防止混用) GRANT USAGE ON SCHEMA pglogical TO shenlan;

\q

执行顺序建议 步骤 节点 脚本 说明 1 Global schema_base.sql 创建业务结构 2 CN schema_base.sql 创建相同业务结构 3 Global schema_pglogical_region_global.sql 定义 Global provider + 订阅 CN 4 CN schema_pglogical_region_cn.sql 定义 CN provider + 订阅 Global 🧩 验证同步状态 SELECT * FROM pglogical.show_subscription_status();

如果输出中:

status = 'replicating'

即表示 双向复制同步正常。

🚀 双向同步特性汇总 特性 实现机制 双主写入 两端都是 Provider + Subscriber 唯一性保障 所有主键为 gen_random_uuid(),避免冲突 邮箱唯一 lower(email) 唯一索引 异步复制 WAL 级逻辑同步,自动断点续传 结构一致性 schema_base.sql 保证完全相同 幂等可重建 全部 IF NOT EXISTS可重复执行 可扩展性 可新增字段或表,通过 replication_set_add_table() 同步