GreenPlum - Schema 如何连接?
Posted 放羊的牧码
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GreenPlum - Schema 如何连接?相关的知识,希望对你有一定的参考价值。
背景
最近在写多数据源的时候,遇到了 GP,因为之前倒腾过 Oracle 和 Gaussdb,他们也都有 schema 的概念,以为这个也差不多,但是发现在连接池那块总是报错 schema,如下
java.lang.AbstractMethodError: com.pivotal.jdbc.greenplumbase.ddu.setSchema
后来在一番倒腾,找到了解决方案~
方案
1、URL 拼接 Schema
这个方案是针对使用 com.pivotal.jdbc.GreenplumDriver 驱动来讲的,URL 规范 jdbc:pivotal:greenplum:// 因为在如下连接的时候,绝对报上面的错
<dependency>
<groupId>com.pivotal.greenplum</groupId>
<artifactId>greenplum</artifactId>
<version>1.0</version>
</dependency>
HikariConfig configuration = new HikariConfig();
configuration.setJdbcUrl(url);
configuration.setUsername(username);
configuration.setPassword(password);
configuration.setDriverClassName(driverName);
configuration.setSchema(schema);
HikariDataSource hikariDataSource = new HikariDataSource(configuration);
所以我们需要稍微改造下,采用拼接 URL,代码如下
HikariConfig configuration = new HikariConfig();
// 处理特殊数据库的 URL
DataSourceEntityUtil.evalParam(dataSource);
configuration.setJdbcUrl(dataSource.getUrl());
configuration.setUsername(username);
configuration.setPassword(password);
configuration.setDriverClassName(driverName);
configuration.setSchema(dataSource.getSchema());
HikariDataSource hikariDataSource = new HikariDataSource(configuration);
public class DataSourceEntityUtil
public static void evalParam(DataSourceEntity dataSource)
Integer dataSourceType = dataSource.getDataSourceType();
if (DataSourceTypeEnum.GREENPLUM.getType().equals(dataSourceType))
dataSource.setUrl(buildUrlForGreenPlum(dataSource));
// 清空 Schema
dataSource.setSchema(null);
private static String buildUrlForGreenPlum(DataSourceEntity dataSource)
String schema = dataSource.getSchema();
String url = dataSource.getUrl() + ";initializationString=set search_path to " + schema;
return url;
2、使用 setSchema 方法
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.1.1</version>
</dependency>
首先这种驱动,需要按照它的 URL 规范 jdbc:postgresql://XXX,然后使用下面这种方式即可,但唯一的缺点就是如果你项目中还有 GaussDB,那么它会和 GaussDB 的驱动 JAR 会依赖冲突,所以就只能转向第一种方案了,否则的话用这个即可
HikariConfig configuration = new HikariConfig();
configuration.setJdbcUrl(url);
configuration.setUsername(username);
configuration.setPassword(password);
configuration.setDriverClassName(driverName);
configuration.setSchema(schema);
HikariDataSource hikariDataSource = new HikariDataSource(configuration);
以上是关于GreenPlum - Schema 如何连接?的主要内容,如果未能解决你的问题,请参考以下文章
greenplum给某个用户赋予整个schema下所有表的权限
GreenPlum添加Column信息,以及获取数据库schema表表注释(Column信息)字段字段注释(Column信息)字段类型是否为空等信息,以及转JSON输出