兼容SQL Server的Babelfish Aurora PostgreSQL存储过程调用报错
Babelfish Aurora PostgreSQL执行SQL Server存储过程异常
问题背景
在兼容SQL Server的Babelfish Aurora PostgreSQL数据库中执行存储过程调用时抛出异常,但该调用在常规SQL Server环境下可正常运行。
执行的存储过程命令
exec sp_sproc_columns @procedure_qualifier=DivDB, @procedure_owner=dbo, @procedure_name=spProcName, @ODBCVer=3, @fUsePattern=0
使用的JDBC依赖
使用的JDBC库版本:mssql-jdbc-12.2.0.jre8
报错信息
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: com.microsoft.sqlserver.jdbc.SQLServerException: column "divdb" does not exist
...
调试定位的原因
经调试发现,错误根源在于SQLServerCallableStatement::findColumn方法执行元数据查询时,拼接生成的SQL未对数据库名DivDB进行正确处理,导致Babelfish将其误识别为列名,从而触发报错。
疑问与当前配置
当前存在疑问:使用Babelfish时,需要使用PostgreSQL驱动还是SQL Server驱动?目前Spring Boot配置采用SQL Server驱动,具体配置如下:
spring.datasource.jdbc-url=jdbc:sqlserver://DB-URL;databaseName=DivDB;appName=XXXXX;allowMultiQueries=true;encrypt=true;trustServerCertificate=true; spring.datasource.username=***** spring.datasource.password=DivaDev*321 spring.datasource.sqlserver.schema=dbo spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver spring.datasource.queryTimeout=300 spring.datasource.test-on-borrow=true spring.datasource.validation-query=SELECT 1
内容的提问来源于stack exchange,提问作者Ashish Ratan
相关产品推荐
相关产品推荐

