问题情况
由于PostgreSQL数据库模式(schema)存在多个,原先的表单是默认采用public但是查询表和字段时候有查询所有未进行过滤,导致数据库连接失败、查表字段也为空(空即查询服务端异常错误)
解决方式
- 数据库连接配置
添加参数补充?currentSchema=dwd
譬如:username=root;password=XXXX;url=jdbc:postgresql://11.XX.XX.145:5432/test_data?currentSchema=dwd
代码优化
代码调整
首先获取url:文章来源:https://www.toymoban.com/news/detail-505231.html
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】
然后根据解析,参数传递查询文章来源地址https://www.toymoban.com/news/detail-505231.html
/**
* 解析 jdbc的url内的默认参数
* <p>
* 譬如:username=root;password=XXXX;url=jdbc:postgresql://11.XX.XX.145:5432/test_data?currentSchema=dwd
* 获取 currentSchema=dwd
*
* @param url
* @return
*/
public static Map<String, Object> analysisDefParam(String url) {
Map<String, Object> value = new HashMap<>();
try {
String[] params = url.split("\\?");
List<String> 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
到了这里,关于【PostgreSQL】连接pg数据库Schema切换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!