如何通过SSMS查看Babelfish_db中的AWS DMS迁移数据与对象?
问题排查与解决
为什么SSMS看不到迁移的对象?
AWS DMS默认会把SQL Server的对象迁移到Postgres的public schema,但Babelfish给SSMS暴露的是它专属的schema(默认是dbo)——这俩schema完全隔离,所以pgAdmin能看到public里的内容,但SSMS通过Babelfish的TDS接口只能访问Babelfish管理的schema,自然看不到迁移后的对象。
解决办法
1. 调整DMS的schema映射(未迁移优先操作)
打开DMS任务的Table Mapping配置,添加规则:把源SQL Server的dbo schema直接映射到目标Babelfish Aurora的dbo schema,而非默认的public。这样迁移完成后,对象会直接出现在SSMS可识别的位置。
2. 迁移已到public的对象至Babelfish的dbo schema
如果已经完成迁移,直接在pgAdmin中执行Postgres语句移动对象:
-- 移动表 ALTER TABLE public.你的表名 SET SCHEMA dbo; -- 移动视图 ALTER VIEW public.你的视图名 SET SCHEMA dbo; -- 移动存储过程(注意Babelfish对SQL Server存储过程的兼容要求) ALTER PROCEDURE public.你的存储过程名 SET SCHEMA dbo;
执行完成后刷新SSMS即可看到对象。
3. 确认SSMS连接参数正确
- 连接端口需使用Babelfish的TDS端口(默认1433),而非Postgres的5432端口
- 连接时的数据库名称必须填写
babelfish_db,不能使用Postgres默认数据库
4. 检查Babelfish的schema配置
在pgAdmin中执行以下SQL,确认dbo schema已在Babelfish的注册列表中:
SELECT * FROM sys.schemas;
若dbo不存在,需先在Babelfish中创建对应schema。
5. 匹配Babelfish与源SQL Server的兼容模式
比如源SQL Server是2019版本,需将Babelfish的兼容级别设为150:
ALTER SYSTEM SET babelfishpg_tsql.database_compatibility_level = 150;
部分对象(如特定语法的存储过程)需要对应兼容模式才能被SSMS正常识别。
内容的提问来源于stack exchange,提问作者P Kernel
相关产品推荐
相关产品推荐

