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-zxvfpostgresql-9.3.4.tar.gz$>cdpostgresql-9.3.4/$>./configure&&make&&makeinstall2)切换用户
$>su-sdbadmin3)拷贝Postgresql文件
$>cp-rf/usr/local/pgsql~/4)进入Postgresql目录
$>cdpgsql
5)环境变量添加Postgresql的lib库
$>export LD_liBRARY_PATH=$(pwd)/lib:${LD_liBRARY_PATH}
建议用户将Postgresql的lib加到sdbadmin用户的环境变量中,否则每次登陆sdbadmin使用Postgresql,都需要手工添加Postgresql的lib 到 LD_liBRARY_PATH中
$>echo"exportLD_liBRARY_PATH=$(pwd)/lib:${LD_liBRARY_PATH}">>~/.bash_profile6)创建Postgresql的数据目录
$>mkdirpg_data7)初始化数据目录(该 *** 作只能 *** 作一次)
$>bin/initdb-Dpg_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-fsdb_fDW.control${PGSHAREDIR}/extension/;$>cp-fsdb_fDW--1.0.sql${PGSHAREDIR}/extension/;sdb_fDW.control 脚本内容
#sdb_fDWextensioncomment='foreigndatawrapperforSequoiadbaccess'default_version='1.0'module_pathname='$libdir/sdb_fDW'relocatable=truesdb_fDW--1.0.sql 脚本内容
/*contrib/mongo_fDW/sdb_fDW--1.0.sql*/--complainifscriptissourcedinpsql,ratherthanviaCREATEEXTENSION\echoUse"CREATEEXTENSIONsdb_fDW"toloadthisfile.\quitCREATEFUNCTIONsdb_fDW_handler()RETURNSfDW_handlerAS'MODulE_PATHname'LANGUAGECSTRICT;CREATEFUNCTIONsdb_fDW_valIDator(text[],oID)RETURNSvoIDAS'MODulE_PATHname'LANGUAGECSTRICT;CREATEFOREIGNDATAWRAPPERsdb_fDWHANDLERsdb_fDW_handlerVALIDATORsdb_fDW_valIDator;
1.3 部署Postgresql
1)
检查端口是否被占用
Postgresql默认启动端口为”5432”,检查端口是否被占用(检查 *** 作建议使用root用户 *** 作,只有检查端口需要root权限,其余 *** 作还是需要在sdbadmin用户下 *** 作)
$>netstat-nap|grep5432
如果5432端口被占用或者希望修改Postgresql的启动端口,则执行:
$>sed-i"s/#port=5432/port=11780/g"pg_data/postgresql.conf
2)启动Postgresql服务进程(需要使用sdbadmin用户执行以下命令)
$>bin/postgres-Dpg_data/>>logfile2>&1&
3)检查Postgresql是否启动成功
执行命令:
$>netstat-nap|grep5432
结果为:
tcp00127.0.0.1:54320.0.0.0:*ListEN20502/postgresunix2[ACC]STREAMListENING4077675420502/postgres/tmp/.s.PGsql.5432
4)创建Postgresql的database
$>bin/createdb-p5432foo
5)进入Postgresqlshell环境
$>bin/psql-p5432foo
2 Postgresql连接SequoiaDB
以下 *** 作均在Postgresql shell 环境下执行
2.1 Postgresql与SequoiaDB建立关联
1)加载SequoiaDB连接驱动
foo=#createextensionsdb_fDW;
2)配置与SequoiaDB连接参数
foo=#createserversdb_serverforeigndatawrappersdb_fDWoptions(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*fromtest;5)写入数据
foo=#insertintotestvalues('one',3);6)更改数据
foo=#updatetestsetID=9wherename='one';
7)查看所有的表(show tables;)
foo=#\d
8)查看表的描述信息
foo=#\dtest9)删除表
foo=#dropforeigntabletest;
10)退出Postgresql shell环境
foo=#\q
2.2 使用须知
650) this.wIDth=650;" src="http://img.jb51.cc/vcimg/static/loading.png" alt="内存溢出" src="http://www.ahlinux.com/uploadfile/2015/0118/20150118034116570.jpg">
2.2.2 注意事项
1)注意字符的大小写
SequoiaDB 中的集合空间、集合和字段名均对字母的大小写敏感
集合空间、集合名大写假设SequoiaDB 中存在名为TEST的集合空间,CHEN的集合,在Postgresql中建立相应的映射表
foo=#createforeigntablesdb_upcase_cs_cl(nametext)serversdb_serveroptions(collectionspace'TEST',collection'CHEN');字段名大写
假设SequoiaDB 中存在名为foo的集合空间,bar的集合,而且保存的数据为:
{"_ID":{"$oID":"53a2a0e100e75e2c53000006"},"name":"test"}
在Postgresql中建立相应的映射表
foo=#createforeigntablesdb_upcase_fIEld(“name”text)serversdb_serveroptions(collectionspace'foo',collection'bar');
执行查询命令:
foo=#select*fromsdb_upcase_fIEld;
查询结果为:
name------test(1rows)2)映射SequoiaDB中的数据类型
假设SequoiaDB中存在foo集合空间,bar集合,保存记录为:
{"_ID":{"$oID":"53a2de926b4715450a000001"},"name":[1,2,3],"ID":123}
在Postgresql 中建立相应的映射表
foo=#createforeigntablebartest(namenumeric[],IDnumeric)serversdb_serveroptions(collectionspace'foo',collection'bar');
执行查询命令:
foo=#select*frombartest;
查询结果:
name|ID---------+-----{1,3}|1233)连接SequoiaDB 协调节点错误
如果Postgresql连接的SequoiaDB 协调节点重启,在查询时报错
ERROR:Unabletogetcollection"chen.test",rc=-15HINT:Makesurethecollectionspaceandcollectionexistontheremotedatabase
解决方法:
退出Postgresql shell
foo=#\q
重新进入Postgresql shell
$>bin/psql-p5432foo
2.2.3 调整Postgresql配置文件
1)查看pg_shell中默认的配置
执行命令:
foo=#\set
结果为:
autoCOMMIT='on'PROMPT1='%/%r%#'PROMPT2='%/%r%#'PROMPT3='>>'VERBOSITY='default'VERSION='Postgresql9.3.4onx86_64-unkNown-linux-gnu,compiledbygcc(SUSElinux)4.3.4[gcc-4_3-branchrevision152973],64-bit'DBname='foo'USER='sdbadmin'PORT='5432'ENCoding='UTF8'2)调整pg_shell查询时,每次获取记录数
foo=#\setFETCH_COUNT100
调整为每次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"\setFETCH_COUNT100">>/opt/sequoiadb/pgsql/etc/psqlrc4)调整pg_shell的日志级别
$>sed-i's/#clIEnt_min_messages=notice/clIEnt_min_messages=deBUG1/g'pg_data/postgresql.conf5)调整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.conf2)修改信任的机器列表
$>linenum=$(cat-npg_data/pg_hba.conf|grep"#IPv4localconnections:"|awk'{print}');\let"linenum=linenum+1";varStr="hostallall0.0.0.0/0trust";\sed-i"${linenum}a${varStr}"pg_data/pg_hba.conf;3)重启Postgresql
$>bin/pg_ctlstop-s-Dpg_data/-mfast;bin/postgres-Dpg_data/>>logfile2>&1&3.2 JDBC连接程序
packagecom.sequoiadb.sample;importjava.sql.*;publicclasspostgresql_sample{static{try{Class.forname"org.postgresql.Driver");}catch(ClassNotFoundExceptione){e.printstacktrace();}}publicstaticvoIDmain(String[]args)throwssqlException{Stringpghost="192.168.30.182";Stringport="5432";Stringdatabasename="foo";//postgresqlprocessisrunninginwhichuserStringpgUser="sdbadmin";Stringurl="jdbc:postgresql://"+pghost+":"+port+"/"+databasename;Connectionconn=DriverManager.getConnection(url,pgUser,null);Statementstmt=conn.createStatement();Stringsql="select*fromsdb_upcase_fIEld";ResultSetrs=stmt.executequery(sql);booleanisheaderPrint=false;while(rs.next()){ResultSetMetaDatamd=rs.getMetaData();intcol_num=md.getColumnCount();if(isheaderPrint){for(inti=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();}}
本文来自:Linux学习教程网
总结以上是内存溢出为你收集整理的PostgreSQL对接SequoiaDB全部内容,希望文章能够帮你解决PostgreSQL对接SequoiaDB所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)