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都可以作为复数形式。
12070 0
|
存储 关系型数据库 Java
知识分享之PostgreSQL——数据库中的模式(Schema)
日常我们开发时,我们会遇到各种各样的奇奇怪怪的问题(踩坑o(╯□╰)o),这个常见问题系列就是我日常遇到的一些问题的记录文章系列,这里整理汇总后分享给大家,让其还在深坑中的小伙伴有绳索能爬出来。 同时在这里也欢迎大家把自己遇到的问题留言或私信给我,我看看其能否给大家解决。
390 0
知识分享之PostgreSQL——数据库中的模式(Schema)
|
关系型数据库 数据库 PostgreSQL
PostgreSQL 模式(SCHEMA)
PostgreSQL 模式(SCHEMA)
124 0
|
存储 SQL JSON
Citus 分布式 PostgreSQL 集群 - SQL Reference(查询分布式表 SQL)
Citus 分布式 PostgreSQL 集群 - SQL Reference(查询分布式表 SQL)
224 0
|
SQL 关系型数据库 数据库
PostgreSQL 模式(SCHEMA)
PostgreSQL 模式(SCHEMA)
206 0
|
SQL 关系型数据库 数据库
PostgreSQL sharding : citus 系列4 - DDL 操作规范 (新增DB,TABLE,SCHEMA,UDF,OP,用户等)
标签 PostgreSQL , citus , 新增对象 , 新增数据库 , 新增用户 背景 citus是PG的一个插件,插件主要针对普通SQL(非UTILITY)加HOOK进行了一些ROUTE处理,同时使用UDF对表进行新建分区的操作。
1863 0
|
SQL 存储 数据库
SQL Server 游标运用:查看所有数据库所有表大小信息(Sizes of All Tables in All Database)
原文:SQL Server 游标运用:查看所有数据库所有表大小信息(Sizes of All Tables in All Database) 一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:游...
1433 0
|
SQL 存储 数据库
SQL Server 游标运用:查看一个数据库所有表大小信息(Sizes of All Tables in a Database)
原文:SQL Server 游标运用:查看一个数据库所有表大小信息(Sizes of All Tables in a Database) 一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:运用游...
1382 0

热门文章

最新文章