问题情况

由于PostgreSQL数据库模式(schema)存在多个,原先的表单是默认采用public但是查询表和字段时候有查询所有未进行过滤,导致数据库连接失败、查表字段也为空(空即查询服务端异常错误)

解决方式

数据库连接配置

添加参数补充?currentSchema=dwd 譬如:username=root;password=XXXX;url=jdbc:postgresql://11.XX.XX.145:5432/test_data?currentSchema=dwd

代码优化

代码调整

首先获取url:

jdbc:postgresql://localhost:5432/test_data?currentSchema=dwd ==> 解析【currentSchema=dwd】

jdbc:postgresql://localhost:5432/test_data?currentSchema=public ==> 解析【currentSchema=public】

jdbc:postgresql://localhost:5432/test_data ==> 解析【currentSchema=null】默认表使用【current_schema()】表字段查询使用【public】

然后根据解析,参数传递查询

/**

* 解析 jdbc的url内的默认参数

*

* 譬如:username=root;password=XXXX;url=jdbc:postgresql://11.XX.XX.145:5432/test_data?currentSchema=dwd

* 获取 currentSchema=dwd

*

* @param url

* @return

*/

public static Map analysisDefParam(String url) {

Map value = new HashMap<>();

try {

String[] params = url.split("\\?");

List param = new ArrayList<>();

if (params.length > 1) {

param = Arrays.asList(params[1].split("&"));

}

param.forEach(p -> {

String[] item = p.split("=");

if (item.length > 1) {

value.put(item[0], item[1]);

}

});

} catch (Exception e) {

log.error("出现异常 {} {}", e);

}

return value;

}

其他

## 版本查看

select version();

datasource 如何指定postgresql 连接的schema

##9.4开始通过关键字currentSchema指定

jdbc:postgresql://localhost:5432/mypgsql?currentSchema=myschema

##旧版本通过searchpath指定 (代码暂未兼容)

jdbc:postgresql://localhost:5432/mypgsql?searchpath=myschema

相关阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: