GreenPlum - Schema 如何连接?

简介: 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>
HikariConfigconfiguration=newHikariConfig();
configuration.setJdbcUrl(url);
configuration.setUsername(username);
configuration.setPassword(password);
configuration.setDriverClassName(driverName);
configuration.setSchema(schema);
HikariDataSourcehikariDataSource=newHikariDataSource(configuration);

所以我们需要稍微改造下,采用拼接 URL,代码如下

HikariConfigconfiguration=newHikariConfig();
// 处理特殊数据库的 URLDataSourceEntityUtil.evalParam(dataSource);
configuration.setJdbcUrl(dataSource.getUrl());
configuration.setUsername(username);
configuration.setPassword(password);
configuration.setDriverClassName(driverName);
configuration.setSchema(dataSource.getSchema());
HikariDataSourcehikariDataSource=newHikariDataSource(configuration);
publicclassDataSourceEntityUtil {
publicstaticvoidevalParam(DataSourceEntitydataSource) {
IntegerdataSourceType=dataSource.getDataSourceType();
if (DataSourceTypeEnum.GREENPLUM.getType().equals(dataSourceType)) {
dataSource.setUrl(buildUrlForGreenPlum(dataSource));
// 清空 SchemadataSource.setSchema(null);
        }
    }
privatestaticStringbuildUrlForGreenPlum(DataSourceEntitydataSource) {
Stringschema=dataSource.getSchema();
Stringurl=dataSource.getUrl() +";initializationString=set search_path to "+schema;
returnurl;
    }
}

2、使用 setSchema 方法

<dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><version>42.1.1</version></dependency>

首先这种驱动,需要按照它的 URL 规范 jdbc:postgresql://XXX,然后使用下面这种方式即可,但唯一的缺点就是如果你项目中还有 GaussDB,那么它会和 GaussDB 的驱动 JAR 会依赖冲突,所以就只能转向第一种方案了,否则的话用这个即可

HikariConfigconfiguration=newHikariConfig();
configuration.setJdbcUrl(url);
configuration.setUsername(username);
configuration.setPassword(password);
configuration.setDriverClassName(driverName);
configuration.setSchema(schema);
HikariDataSourcehikariDataSource=newHikariDataSource(configuration);
目录
相关文章
|
SQL Oracle 关系型数据库
数据库中的Schema是什么?
翻译自:http://database.guide/what-is-a-database-schema/   在数据库中,schema(发音 “skee-muh” 或者“skee-mah”,中文模式)是数据库的组织和结构,schemas andschemata都可以作为复数形式。
11888 0
|
6月前
|
存储 SQL 数据库
数据库模式(Schema)
数据库模式(逻辑模式)是数据库全体数据的逻辑结构和特征描述,是公共数据视图,一个数据库只有一个。外模式(用户模式)是用户可见的局部数据逻辑结构,可有多个,提供数据安全性。内模式(存储模式)描述数据的物理结构和存储方式,一个数据库仅有一个,用于优化存储和减少冗余。
|
存储 关系型数据库 Java
知识分享之PostgreSQL——数据库中的模式(Schema)
日常我们开发时,我们会遇到各种各样的奇奇怪怪的问题(踩坑o(╯□╰)o),这个常见问题系列就是我日常遇到的一些问题的记录文章系列,这里整理汇总后分享给大家,让其还在深坑中的小伙伴有绳索能爬出来。 同时在这里也欢迎大家把自己遇到的问题留言或私信给我,我看看其能否给大家解决。
381 0
知识分享之PostgreSQL——数据库中的模式(Schema)
|
关系型数据库 数据库 PostgreSQL
PostgreSQL 模式(SCHEMA)
PostgreSQL 模式(SCHEMA)
120 0
|
存储 SQL JSON
Citus 分布式 PostgreSQL 集群 - SQL Reference(查询分布式表 SQL)
Citus 分布式 PostgreSQL 集群 - SQL Reference(查询分布式表 SQL)
216 0
|
SQL 存储 关系型数据库
Citus 分布式 PostgreSQL 集群 - SQL Reference(查询处理)
Citus 分布式 PostgreSQL 集群 - SQL Reference(查询处理)
177 0
|
SQL 关系型数据库 数据库
PostgreSQL 模式(SCHEMA)
PostgreSQL 模式(SCHEMA)
202 0
|
关系型数据库 数据库 PostgreSQL