通过mssql包连接Aurora PostgreSQL Babelfish 1433端口访问异常问题
可行排查方案
- 首先获取Babelfish TDS端点支持的合法数据库名
用你现在不加database参数的连接配置成功连接后,执行SQL语句:
这个查询返回的结果中的库名才是你可以在mssql连接配置的SELECT name FROM sys.databases;database字段填写的合法值,你之前填的postgres是PostgreSQL原生侧的库名,没有在Babelfish的TDS协议层注册,所以会直接报库不存在,同时也会触发跨库查询的限制。 - 修正连接配置
将上一步查询到的你业务数据所属的库名填写到database参数中,示例如下:
正常情况下此时就可以正常连接到目标数据库,不会再报库不存在的错误。var config = { server: 'xxx.us-east-1.rds.amazonaws.com', database: '你查询到的合法库名', user: 'xxx', password: 'xxx' }; - 表不存在报错的排查
如果连接成功后还是报relation "person" does not exist,按以下顺序排查:- 确认表名大小写匹配:如果你的Babelfish集群使用的是大小写敏感的排序规则,查询时的表名必须和创建时的大小写完全一致,例如建表时使用的是
PERSON,查询时需要写SELECT COUNT(1) FROM "PERSON"或者SELECT COUNT(1) FROM dbo."PERSON" - 确认schema映射:Babelfish默认将SQL Server的
dboschema映射到PostgreSQL的publicschema,如果你的业务表建在PostgreSQL的非public schema下,需要先通过TDS连接创建对应名称的schema后才能正常访问 - 确认库创建方式:如果你是在PostgreSQL原生侧(5432端口)创建的业务库,Babelfish的TDS端点不会自动识别该库,必须通过TDS协议(1433端口)执行
CREATE DATABASE命令创建的库才会被TDS端点识别
- 确认表名大小写匹配:如果你的Babelfish集群使用的是大小写敏感的排序规则,查询时的表名必须和创建时的大小写完全一致,例如建表时使用的是
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

