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给某个用户赋予整个schema下所有表的权限

查看Greenplum集群中的创建的类型

查看Greenplum集群中的创建的类型

GreenPlum添加Column信息,以及获取数据库schema表表注释(Column信息)字段字段注释(Column信息)字段类型是否为空等信息,以及转JSON输出

Greenplum 与远程 Hadoop 连接