PostgreSQL对接SequoiaDB

PostgreSQL对接SequoiaDB,第1张

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

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

1. 部署Postgresql 1.1 安装Postgresql

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

源码编译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

切换用户

$>su - sdbadmin

拷贝Postgresql文件

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

进入Postgresql目录

$>cd pgsql

环境变量添加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

创建Postgresql的数据目录

$>mkdir pg_data

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

$>bin/initdb -D pg_data/
1.2 安装SequoiaDB-Postgresql插件

创建Postgresql的lib 目录

获取Postgresql的libdir路径

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

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

$> mkdir -p ${PGliBDIR}

创建Postgresql的extension目录

获取Postgresql的sharedir路径

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

在shardir目录上再创建extemsion目录

$> mkdir -p ${PGSHAREDIR}/extension

从SequoiaDB的安装包中,拷贝Postgresql的扩展文件

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

$> cp -f /opt/sequoiadb/postgresql/sdb_fDW.so ${PGliBDIR}

将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. \quitCREATE FUNCTION sdb_fDW_handler()RETURNS fDW_handlerAS 'MODulE_PATHname'LANGUAGE C STRICT;CREATE FUNCTION sdb_fDW_valIDator(text[],oID)RETURNS voIDAS 'MODulE_PATHname'LANGUAGE C STRICT;CREATE FOREIGN DATA WRAPPER sdb_fDWHANDLER sdb_fDW_handlerVALIDATOR sdb_fDW_valIDator;
1.3 部署Postgresql

检查端口是否被占用

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

$>netstat -nap | grep 5432

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

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

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

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

检查Postgresql是否启动成功

执行命令:

$> netstat -nap | grep 5432

结果为:

tcp   0   0 127.0.0.1:5432     0.0.0.0:*         ListEN     20502/postgresunix  2   [ ACC ]   STREAM    ListENING   40776754 20502/postgres     /tmp/.s.PGsql.5432

创建Postgresql的database

$> bin/createdb -p 5432 foo

进入Postgresql shell 环境

$> bin/psql -p 5432 foo
2. Postgresql连接SequoiaDB

以下 *** 作均在Postgresql shell 环境下执行

2.1 Postgresql与SequoiaDB建立关联

加载SequoiaDB连接驱动

foo=# create extension sdb_fDW;

配置与SequoiaDB连接参数

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

关联SequoiaDB的集合空间与集合

注:集合空间与集合必须已经存在于SequoiaDB,否则查询出错。
默认情况下,表的字段映射到SequoiaDB中为小写字符,如果强制指定字段为大写字符,创建方式参考注意事项1
映射SequoiaDB 的数组类型,创建方式参考注意事项2

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

查询

foo=# select * from test;

写入数据

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

更改数据

foo=# update test set ID=9 where name='one';

查看所有的表(show tables;)

foo=# \d

查看表的描述信息

foo=# \d test

删除表

foo=# drop foreign table test;

退出Postgresql shell环境

foo=# \q
2.2 使用须知 2.2.1 数据类型的对应关系

2.2.2 注意事项

注意字符的大小写

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)

映射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,3} | 123

连接SequoiaDB 协调节点错误

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

ERROR: Unable to get collection "chen.test",rc = -15HINT: 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配置文件

查看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'

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

foo=#\set FETCH_COUNT 100

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

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

修改配置文件,调整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

调整pg_shell的日志级别

$>sed -i 's/#clIEnt_min_messages = notice/clIEnt_min_messages = deBUG1/g' pg_data/postgresql.conf

调整pg引擎的日志级别

$>sed -i 's/#log_min_messages = warning/log_min_messages = deBUG1/g' pg_data/postgresql.conf
3. 使用java客户端连接Postgresql 3.1 修改Postgresql的连接配置

修改Postgresql的监听地址

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

修改信任的机器列表

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

重启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();   }}```
总结

以上是内存溢出为你收集整理的PostgreSQL对接SequoiaDB全部内容,希望文章能够帮你解决PostgreSQL对接SequoiaDB所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1182453.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存