PostgreSQL对接SequoiaDB

PostgreSQL是一款开源的SQL数据库,支持标准SQL,用户可以通过JDBC驱动连接PostgreSQL进行应用程序开发。用户通过 扩展PostgreSQL功能,让开发者可以使用SQL语句访问SequoiaDB数据库,完成SequoiaDB数据库的增、删、查、改操作。本文就针 对如何扩展PostgreSQL功能,实现PostgreSQL对接SequoiaDB进行介绍。

1 部署PostgreSQL

本教程为PostgreSQL与SequoiaDB的对接教程,所以作者建议使用者在sdbadmin用户下(SequoiaDB数据库默认用户)安装并使用PostgreSQL(本教程使用的PostgreSQL版本为9.3.4)。

1)源码编译PostgreSQL

下载链接: http://www.postgresql.org/ftp/source/

解压后编译安装(需要root权限)

$> tar -zxvf postgresql-9.3.4.tar.gz
$> cd postgresql-9.3.4/
$> ./configure && make && make install

2)切换用户

$>su - sdbadmin

3)拷贝PostgreSQL文件

$>cp -rf /usr/local/pgsql ~/

4)进入PostgreSQL目录

$>cd pgsql

5)环境变量添加PostgreSQL的lib库

$>export LD_LIBRARY_PATH=$(pwd)/lib:${LD_LIBRARY_PATH}

建议用户将PostgreSQL的lib加到sdbadmin用户的环境变量中,否则每次登陆sdbadmin使用PostgreSQL,都需要手工添加PostgreSQL的lib 到 LD_LIBRARY_PATH中

$> echo "export LD_LIBRARY_PATH=$(pwd)/lib:${LD_LIBRARY_PATH}" >> ~/.bash_profile

6)创建PostgreSQL的数据目录

$>mkdir pg_data

7)初始化数据目录(该操作只能操作一次)

$>bin/initdb -D pg_data/

1.2安装SequoiaDB-PostgreSQL插件

**1)

创建PostgreSQL的lib 目录**

获取PostgreSQL的libdir路径

$> PGLIBDIR=$(bin/pg_config --libdir)

如果显示的libdir目录不存在,则需要用户自己手工创建目录

$> mkdir -p ${PGLIBDIR}

2)创建PostgreSQL的extension目录

获取PostgreSQL的sharedir路径

$> PGSHAREDIR=$(bin/pg_config --sharedir)

在shardir目录上再创建extemsion目录

$> mkdir -p ${PGSHAREDIR}/extension

3)从SequoiaDB的安装包中,拷贝PostgreSQL的扩展文件

从SequoiaDB安装后的postgresql目录中拷贝sdb_fdw.so文件到PostgreSQL的lib目录,SequoiaDB默认安装目录为/opt/sequoiadb

$> cp -f /opt/sequoiadb/postgresql/sdb_fdw.so ${PGLIBDIR}

4)将sdb_fdw.control和sdb_fdw--1.0.sql脚本拷贝到extension目录中,两个脚本需要用户手工编辑

$> cp -f sdb_fdw.control ${PGSHAREDIR}/extension/ ;
$> cp -f sdb_fdw--1.0.sql ${PGSHAREDIR}/extension/ ;

sdb_fdw.control 脚本内容

  # sdb_fdw extension
    comment = ‘foreign data wrapper for SequoiaDB access‘
    default_version = ‘1.0‘
    module_pathname = ‘$libdir/sdb_fdw‘
    relocatable = true

sdb_fdw--1.0.sql 脚本内容

/* contrib/mongo_fdw/sdb_fdw--1.0.sql */
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
\echo Use "CREATE EXTENSION sdb_fdw" to load this file. \quit
CREATE FUNCTION sdb_fdw_handler()
RETURNS fdw_handler
AS ‘MODULE_PATHNAME‘
LANGUAGE C STRICT;
CREATE FUNCTION sdb_fdw_validator(text[], oid)
RETURNS void
AS ‘MODULE_PATHNAME‘
LANGUAGE C STRICT;
CREATE FOREIGN DATA WRAPPER sdb_fdw
HANDLER sdb_fdw_handler
VALIDATOR sdb_fdw_validator;

1.3 部署PostgreSQL

1)

检查端口是否被占用

PostgreSQL默认启动端口为”5432”,检查端口是否被占用(检查操作建议使用root用户操作,只有检查端口需要root权限,其余操作还是需要在sdbadmin用户下操作)

$>netstat -nap | grep 5432

如果5432端口被占用或者希望修改PostgreSQL的启动端口,则执行:

$> sed -i "s/#port = 5432/port = 11780/g" pg_data/postgresql.conf

2)启动Postgresql服务进程(需要使用sdbadmin用户执行以下命令)

$> bin/postgres -D pg_data/ >> logfile 2>&1 &

3)检查PostgreSQL是否启动成功

执行命令:

$> netstat -nap | grep 5432

结果为:

tcp   0   0 127.0.0.1:5432     0.0.0.0:*         LISTEN     20502/postgres
unix  2   [ ACC ]   STREAM    LISTENING   40776754 20502/postgres     /tmp/.s.PGSQL.5432

4)创建PostgreSQL的database

$> bin/createdb -p 5432 foo

5)进入PostgreSQL shell 环境

$> bin/psql -p 5432 foo

2 PostgreSQL连接SequoiaDB

以下操作均在PostgreSQL shell 环境下执行

2.1 PostgreSQL与SequoiaDB建立关联

1)加载SequoiaDB连接驱动

foo=# create extension sdb_fdw;

2)配置与SequoiaDB连接参数

foo=# create server sdb_server foreign data wrapper sdb_fdw options(address ‘192.168.30.182‘, service ‘11810‘, user ‘sdbadmin‘, password ‘cmbc123‘);

3)关联SequoiaDB的集合空间与集合

注:集合空间与集合必须已经存在于SequoiaDB,否则查询出错。

默认情况下,表的字段映射到SequoiaDB中为小写字符,如果强制指定字段为大写字符,创建方式参考注意事项1

映射SequoiaDB 的数组类型,创建方式参考注意事项2

foo=# create foreign table test (name text, id numeric) server sdb_server options ( collectionspace ‘chen‘, collection ‘test‘ ) ;

4)查询

foo=# select * from test;

5)写入数据

foo=# insert into test values(‘one‘,3);

6)更改数据

foo=# update test set id=9 where name=‘one‘;

7)查看所有的表(show tables;)

foo=# \d

8)查看表的描述信息

foo=# \d test

9)删除表

foo=# drop foreign table test;

10)退出PostgreSQL shell环境

foo=# \q

2.2 使用须知

2.2.2 注意事项

1)注意字符的大小写

SequoiaDB 中的集合空间、集合和字段名均对字母的大小写敏感

集合空间、集合名大写

假设SequoiaDB 中存在名为TEST的集合空间,CHEN的集合,在PostgreSQL中建立相应的映射表

foo=# create foreign table sdb_upcase_cs_cl (name text) server sdb_server options ( collectionspace ‘TEST‘, collection ‘CHEN‘ ) ;

字段名大写

假设SequoiaDB 中存在名为foo的集合空间,bar的集合,而且保存的数据为:

{
 "_id": {
   "$oid":"53a2a0e100e75e2c53000006"
 },
 "NAME": "test"
}

在PostgreSQL中建立相应的映射表

foo=# create foreign table sdb_upcase_field (“NAME” text) server sdb_server options ( collectionspace ‘foo‘, collection ‘bar‘ ) ;

执行查询命令:

foo=# select * from sdb_upcase_field;

查询结果为:

NAME
------
 test
(1 rows)

2)映射SequoiaDB中的数据类型

假设SequoiaDB中存在foo集合空间,bar集合,保存记录为:

{
 "_id": {
    "$oid":"53a2de926b4715450a000001"
 },
 "name": [
   1,
   2,
   3
 ],
 "id": 123
}

在PostgreSQL 中建立相应的映射表

foo=# create foreign table bartest (name numeric[], id numeric) server sdb_server options ( collectionspace ‘foo‘, collection ‘bar‘ ) ;

执行查询命令:

foo=# select * from bartest;

查询结果:

 name  | id
---------+-----
{1,2,3} | 123

3)连接SequoiaDB 协调节点错误

如果PostgreSQL连接的SequoiaDB 协调节点重启,在查询时报错

ERROR: Unable to get collection "chen.test", rc = -15
HINT: Make sure the collectionspace and collection exist on the remote database

解决方法:

退出PostgreSQL shell

foo=# \q

重新进入PostgreSQL shell

$> bin/psql -p 5432 foo

2.2.3 调整PostgreSQL配置文件

1)查看pg_shell中默认的配置

执行命令:

foo=#\set

结果为:

AUTOCOMMIT = ‘on‘
PROMPT1 = ‘%/%R%# ‘
PROMPT2 = ‘%/%R%# ‘
PROMPT3 = ‘>> ‘
VERBOSITY = ‘default‘
VERSION = ‘PostgreSQL 9.3.4 on x86_64-unknown-linux-gnu, compiled by gcc (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973], 64-bit‘
DBNAME = ‘foo‘
USER = ‘sdbadmin‘
PORT = ‘5432‘
ENCODING = ‘UTF8‘

2)调整pg_shell查询时,每次获取记录数

foo=#\set FETCH_COUNT 100

调整为每次ps_shell每次获取100 条记录立即返回记录,然后再继续获取。

直接在pg_shell中修改配置文件,只能在当前pg_shell中生效,重新登录pg_shell需要重新设置。

3)修改配置文件,调整pg_shell查询时,每次获取记录数

执行命令:

$> ${PG_HOME}/bin/pg_config -sysconfdir

结果为:

/opt/sequoiadb/pgsql/etc

如果显示目录不存在,自己手动创建即可

$> mkdir -p /opt/sequoiadb/pgsql/etc

将需要修改的参数写入配置文件中

$>echo "\\set FETCH_COUNT 100" >> /opt/sequoiadb/pgsql/etc/psqlrc

4)调整pg_shell的日志级别

$>sed -i ‘s/#client_min_messages = notice/client_min_messages = debug1/g‘ pg_data/postgresql.conf

5)调整pg引擎的日志级别

$>sed -i ‘s/#log_min_messages = warning/log_min_messages = debug1/g‘ pg_data/postgresql.conf

3 使用java客户端连接PostgreSQL

1)修改PostgreSQL的监听地址

$>sed -i "s/#listen_addresses = ‘localhost‘/listen_addresses = ‘0.0.0.0‘/g" pg_data/postgresql.conf

2)修改信任的机器列表

$>linenum=$(cat -n pg_data/pg_hba.conf | grep "# IPv4 local connections:" | awk ‘{print $1}‘); let "linenum=linenum+1";varStr="host   all            all            0.0.0.0/0              trust"; sed -i "${linenum} a${varStr}" pg_data/pg_hba.conf;

3)重启PostgreSQL

$>bin/pg_ctl stop -s -D pg_data/ -m fast; bin/postgres -D pg_data/ >> logfile 2>&1 &

3.2 JDBC连接程序

package com.sequoiadb.sample;
import java.sql.*;
public class postgresql_sample {
   static{
     try {
       Class.forName"org.postgresql.Driver");
     } catch (ClassNotFoundException e) {
       e.printStackTrace();
     }
   }
   public static void main( String[] args ) throws SQLException{
    String pghost = "192.168.30.182";
    String port = "5432";
    String databaseName = "foo";
    // postgresql process is running in which user
    String pgUser = "sdbadmin";
    String url = "jdbc:postgresql://"+pghost+":"+port+"/" + databaseName;
    Connection conn = DriverManager.getConnection(url, pgUser, null);
    Statement stmt = conn.createStatement();
    String sql = "select * from sdb_upcase_field ";
    ResultSet rs = stmt.executeQuery(sql);
    boolean isHeaderPrint = false;
    while (rs.next()) {
       ResultSetMetaData md = rs.getMetaData();
       int col_num = md.getColumnCount();
       if (isHeaderPrint){
         for (int i = 1; i <= col_num; i++) {
           System.out.print(md.getColumnName(i) + "|");
           isHeaderPrint = true;
         }
       }
       for (i = 1; i <= col_num; i++) {
         System.out.print(rs.getString(i) + "|");
       }
       System.out.println();
     }
     stmt.close();
     conn.close();
   }
}
时间: 2024-11-06 17:51:58

PostgreSQL对接SequoiaDB的相关文章

linux 搭建unixODBC ,并对接 PostgreSQL 9.3.4

环境:suse 11 ,64位的操作系统 unixODBC 版本:2.3.2 PostgreSQL 9.3.4 1 编译安装 unixODBC 下载 unixODBC :http://www.unixodbc.org/download.html 解压编译 tar -zxvf unixODBC-2.3.2.tar.gz cd unixODBC-2.3.2 ./configure --prefix=/opt/unixODBC make && make install 安装路径设置在 /opt/

spark sql 的metastore 对接 postgresql

本教程记录 spark 1.3.1 版本的thriftserver 的metastore 对接 postgresql postgresql 的编译,参考:http://www.cnblogs.com/chenfool/p/4530925.html 一 启动postgresql 服务 1 首先需要将postgresql 的lib 加载到 LD_LIBRARY_PATH 环境变量中 export LD_LIBRARY_PATH=/opt/sequoiadb/lib:${LD_LIBRARY_PATH

【巨杉数据库SequoiaDB】限额开放!巨杉数据库中级工程师认证计划正式开启!

课程背景和规划介绍 巨杉大学的学习和认证包括SCDA(巨杉数据库认证技术专员),SCDP(巨杉数据库中级工程师认证),SCDE(巨杉数据库高级工程师认证),SCDD(巨杉数据库认证开发者)等计划,未来还将持续推出针对行业用户.数据库运维.开发者和开源社区爱好者更多学习计划,共同拓展行业广度和技术深度. 巨杉大学的 SCDP(巨杉数据库中级工程师认证)计划,直接上手操作使用,直观体验分布式数据库功能技术.在线交互学习测试,根据代码验证测试结果,帮助大家快速掌握分布式数据库运维管理. Talk is

Sequoiadb该如何选择合适的SQL引擎

Sequoiadb作为一个文档型NoSQL数据既可以存储结构化数据也可以存储非结构化数据,对于非结构化数据只能使用原生的API进行查询,对结构化数据我们可以选择使用原生的API和开源SQL引擎,目前PostgresSQL,Hive,SparkSQL都可以作为Sequoiadb的SQL引擎,应用中该如何选择? 首先需要了解这些SQL引擎是怎么工作的,下图是Sequoiadb的接口图,所有的SQL查询都是通过SQL引擎把SQL解析成原生API的调用,PG依赖c++驱动,SparkSQL和HIVE依赖

浅谈PostgreSQL数据库

近期工作重点一直放在数据库设计方面,借助这次机会抽时间整理了一些我对PostgreSQL数据库的理解,同时也是对近段时间学习的一个总结.对于很多人而言或许没有听说过这个数据库,通常我们耳边伴随的都是Oracle.MySQL.Microsoft SQL Server一类的关系型数据库. 但看下数据库排行榜,或许更能直观的认识到PostgreSQL数据库的强大与普遍 既然PostgreSQL排行这么高,那为何在国内名气不如其他数据库呢?这其中我认为重点在于两点:一.市场推广力度的问题:二.应用场景与

SequoiaDB的查询执行过程

SequoiaDB的查询执行过程 继续读了SDB的代码,重点还是内核的代码.从客户端–查询优化-查询执行的过程来描述一下查询的过程.希望可以搞清楚2个问题: SDB能做什么查询? 搞清楚SDB是怎么做查询的? 第一个问题的答案是: 理论上,SDB能做mongoDB能做的所有查询,SDB还支持SQL(我指的是SDB内建的支持,不是通过PG支持的查询) 实际上,我没有一个一个去测,SDB看起来mongoDB类的查询基本上完成了:SQL的支持还更像一个玩具.至于说我怎么得到这个结论的,请看下面的分析吧

SequoiaDB x Spark 新主流架构引领企业级应用

6月,汇集当今大数据界精英的Spark Summit 2017盛大召开,Spark作为当今最炙手可热的大数据技术框架,向全世界展示了最新的技术成果.生态体系及未来发展规划. 巨杉作为业内领先的分布式数据库厂商,也是Spark全球的14家发行商之一,受邀在本次大会做了题为"分布式数据库+Spark架构和应用"的分享.巨杉数据库联合创始人.CTO及总架构师也将给大家分享大会的见闻以及这一架构的发展和应用情况. Spark全面进化,扩大生态助力人工智能 随着Spark 2.2 版本的发布,S

spark sql使用sequoiadb作为数据源

目前没有实现,理一下思路,有3中途径: 1:spark core可以使用sequoiadb最为数据源,那么是否spark sql可以直接操作sequoiadb.   (感觉希望不大,) 2: spark sql支持Hive, sequoiadb可以和hive做对接,那么是否可以通过HIveContext 来实现. (希望比1大,但是要看运气) 3:spark 1.2以后支持了external datasource ,需要实现相关的接口来对接第三方数据源.(最靠谱,可是需要时间实现)

ubuntu 14.04 源码编译postgresql

环境 ubuntu 14.04 桌面版 postgresql 源码下载链接,本教程是使用postgresql 9.3.4 进行编译的 http://www.postgresql.org/ftp/source/ 首先我们需要给ubuntu 安装几个包,因为 postgresql 编译时依赖 install libreadline > apt-get install libreadline6 libreadline6-dev install zlib > apt-get install zlib1