使用DMS迁移Aurora PostgreSQL到CloudSQL报错:无法删除postgres库
问题分析与解决方案
1. 明确操作对象
这个报错是针对目标端Google Cloud SQL的postgres数据库,而非源端Aurora:
- 你的源端DMS账号仅拥有
SELECT权限,根本没有DROP DATABASE权限,不可能对源端执行删除操作; - Cloud SQL的迁移任务在初始化逻辑复制(尤其是基于pglogical的场景)时,会尝试重置目标端的默认
postgres库来同步环境,但该库作为系统默认库,通常会被Cloud SQL内部监控进程、默认管理连接占用,导致无法删除。
2. 具体解决步骤
- 排除系统库的迁移范围:
创建迁移任务时,不要选择默认的postgres库,仅勾选你需要迁移的业务数据库/schema。Cloud SQL迁移任务默认可能包含所有库(包括系统库),这是触发该报错的核心原因。 - 强制断开目标端postgres库的连接:
在启动迁移任务前,通过Cloud SQL的SQL客户端执行以下命令,终止postgres库的所有非当前连接:
注意:Cloud SQL的内部监控进程可能会快速重连,建议执行该命令后立即启动迁移任务。SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'postgres' AND pid <> pg_backend_pid(); - 确认目标端权限配置:
Cloud SQL通常会自动分配拥有足够权限的内部迁移账号,无需手动配置;如果使用自定义账号,需确认其拥有CREATE DATABASE、DROP DATABASE等必要权限。
3. 额外提示
- 迁移测试连接时的「部分表无主键」提示不影响任务启动,但会降低增量复制的效率,建议后续为这些表添加主键;
- 无需更换目标端PostgreSQL版本,当前13.x版本与源端兼容,版本差异不是问题根源。
内容的提问来源于stack exchange,提问作者Phil Taylor
相关产品推荐
相关产品推荐

