国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PostgreSQL對(duì)接SequoiaDB

TZLLOG / 1274人閱讀

摘要:是一款開源的數(shù)據(jù)庫(kù),支持標(biāo)準(zhǔn),用戶可以通過(guò)驅(qū)動(dòng)連接進(jìn)行應(yīng)用程序開發(fā)。本文就針對(duì)如何擴(kuò)展功能,實(shí)現(xiàn)對(duì)接進(jìn)行介紹。直接在中修改配置文件,只能在當(dāng)前中生效,重新登錄需要重新設(shè)置。

PostgreSQL是一款開源的SQL數(shù)據(jù)庫(kù),支持標(biāo)準(zhǔn)SQL,用戶可以通過(guò)JDBC驅(qū)動(dòng)連接PostgreSQL進(jìn)行應(yīng)用程序開發(fā)。用戶通過(guò)擴(kuò)展PostgreSQL功能,讓開發(fā)者可以使用SQL語(yǔ)句訪問(wèn)SequoiaDB數(shù)據(jù)庫(kù),完成SequoiaDB數(shù)據(jù)庫(kù)的增、刪、查、改操作。本文就針對(duì)如何擴(kuò)展PostgreSQL功能,實(shí)現(xiàn)PostgreSQL對(duì)接SequoiaDB進(jìn)行介紹。

1. 部署PostgreSQL 1.1 安裝PostgreSQL

本教程為PostgreSQL與SequoiaDB的對(duì)接教程,所以作者建議使用者在sdbadmin用戶下(SequoiaDB數(shù)據(jù)庫(kù)默認(rèn)用戶)安裝并使用PostgreSQL(本教程使用的PostgreSQL版本為9.3.4)。

源碼編譯PostgreSQL

下載鏈接:http://www.postgresql.org/ftp/source/
解壓后編譯安裝(需要root權(quán)限)

$> 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 ~/

進(jìn)入PostgreSQL目錄

$>cd pgsql

環(huán)境變量添加PostgreSQL的lib庫(kù)

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

建議用戶將PostgreSQL的lib加到sdbadmin用戶的環(huán)境變量中,否則每次登陸sdbadmin使用PostgreSQL,都需要手工添加PostgreSQL的lib 到 LD_LIBRARY_PATH中

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

創(chuàng)建PostgreSQL的數(shù)據(jù)目錄

$>mkdir pg_data

初始化數(shù)據(jù)目錄(該操作只能操作一次)

$>bin/initdb -D pg_data/

1.2 安裝SequoiaDB-PostgreSQL插件

創(chuàng)建PostgreSQL的lib 目錄

獲取PostgreSQL的libdir路徑

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

如果顯示的libdir目錄不存在,則需要用戶自己手工創(chuàng)建目錄

$> mkdir -p ${PGLIBDIR}

創(chuàng)建PostgreSQL的extension目錄

獲取PostgreSQL的sharedir路徑

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

在shardir目錄上再創(chuàng)建extemsion目錄

$> mkdir -p ${PGSHAREDIR}/extension

從SequoiaDB的安裝包中,拷貝PostgreSQL的擴(kuò)展文件

從SequoiaDB安裝后的postgresql目錄中拷貝sdb_fdw.so文件到PostgreSQL的lib目錄,SequoiaDB默認(rèn)安裝目錄為/opt/sequoiadb

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

將sdb_fdw.control和sdb_fdw--1.0.sql腳本拷貝到extension目錄中,兩個(gè)腳本需要用戶手工編輯

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

sdb_fdw.control 腳本內(nèi)容

  # 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 腳本內(nèi)容

/* 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

檢查端口是否被占用

PostgreSQL默認(rèn)啟動(dòng)端口為”5432”,檢查端口是否被占用(檢查操作建議使用root用戶操作,只有檢查端口需要root權(quán)限,其余操作還是需要在sdbadmin用戶下操作)

$>netstat -nap | grep 5432

如果5432端口被占用或者希望修改PostgreSQL的啟動(dòng)端口,則執(zhí)行:

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

啟動(dòng)Postgresql服務(wù)進(jìn)程(需要使用sdbadmin用戶執(zhí)行以下命令)

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

檢查PostgreSQL是否啟動(dòng)成功

執(zhí)行命令:

$> netstat -nap | grep 5432

結(jié)果為:

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

創(chuàng)建PostgreSQL的database

$> bin/createdb -p 5432 foo

進(jìn)入PostgreSQL shell 環(huán)境

$> bin/psql -p 5432 foo

2. PostgreSQL連接SequoiaDB

以下操作均在PostgreSQL shell 環(huán)境下執(zhí)行

2.1 PostgreSQL與SequoiaDB建立關(guān)聯(lián)

加載SequoiaDB連接驅(qū)動(dòng)

foo=# create extension sdb_fdw;

配置與SequoiaDB連接參數(shù)

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

關(guān)聯(lián)SequoiaDB的集合空間與集合

注:集合空間與集合必須已經(jīng)存在于SequoiaDB,否則查詢出錯(cuò)。
默認(rèn)情況下,表的字段映射到SequoiaDB中為小寫字符,如果強(qiáng)制指定字段為大寫字符,創(chuàng)建方式參考注意事項(xiàng)1
映射SequoiaDB 的數(shù)組類型,創(chuàng)建方式參考注意事項(xiàng)2

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

查詢

foo=# select * from test;

寫入數(shù)據(jù)

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

更改數(shù)據(jù)

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

查看所有的表(show tables;)

foo=# d

查看表的描述信息

foo=# d test

刪除表

foo=# drop foreign table test;

退出PostgreSQL shell環(huán)境

foo=# q

2.2 使用須知 2.2.1 數(shù)據(jù)類型的對(duì)應(yīng)關(guān)系

2.2.2 注意事項(xiàng)

注意字符的大小寫

SequoiaDB 中的集合空間、集合和字段名均對(duì)字母的大小寫敏感

集合空間、集合名大寫

假設(shè)SequoiaDB 中存在名為TEST的集合空間,CHEN的集合,在PostgreSQL中建立相應(yīng)的映射表

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

字段名大寫

假設(shè)SequoiaDB 中存在名為foo的集合空間,bar的集合,而且保存的數(shù)據(jù)為:

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

在PostgreSQL中建立相應(yīng)的映射表

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

執(zhí)行查詢命令:

foo=# select * from sdb_upcase_field;

查詢結(jié)果為:

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

映射SequoiaDB中的數(shù)據(jù)類型

假設(shè)SequoiaDB中存在foo集合空間,bar集合,保存記錄為:

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

在PostgreSQL 中建立相應(yīng)的映射表

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

執(zhí)行查詢命令:

foo=# select * from bartest;

查詢結(jié)果:

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

連接SequoiaDB 協(xié)調(diào)節(jié)點(diǎn)錯(cuò)誤

如果PostgreSQL連接的SequoiaDB 協(xié)調(diào)節(jié)點(diǎn)重啟,在查詢時(shí)報(bào)錯(cuò)

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

重新進(jìn)入PostgreSQL shell

$> bin/psql -p 5432 foo  

2.2.3 調(diào)整PostgreSQL配置文件

查看pg_shell中默認(rèn)的配置

執(zhí)行命令:

foo=#set

結(jié)果為:

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"

調(diào)整pg_shell查詢時(shí),每次獲取記錄數(shù)

foo=#set FETCH_COUNT 100

調(diào)整為每次ps_shell每次獲取100 條記錄立即返回記錄,然后再繼續(xù)獲取。

直接在pg_shell中修改配置文件,只能在當(dāng)前pg_shell中生效,重新登錄pg_shell需要重新設(shè)置。

修改配置文件,調(diào)整pg_shell查詢時(shí),每次獲取記錄數(shù)

執(zhí)行命令:

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

結(jié)果為:

/opt/sequoiadb/pgsql/etc

如果顯示目錄不存在,自己手動(dòng)創(chuàng)建即可

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

將需要修改的參數(shù)寫入配置文件中

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

調(diào)整pg_shell的日志級(jí)別

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

調(diào)整pg引擎的日志級(jí)別

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

3. 使用java客戶端連接PostgreSQL 3.1 修改PostgreSQL的連接配置

修改PostgreSQL的監(jiān)聽地址

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

修改信任的機(jī)器列表

$>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;

重啟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();
   }
}
```

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/38927.html

相關(guān)文章

  • 巨杉數(shù)據(jù)庫(kù) MySQL兼容項(xiàng)目正式開源

    摘要:在大會(huì)上,巨杉數(shù)據(jù)庫(kù)正式發(fā)布了巨杉全新的兼容架構(gòu),并將項(xiàng)目正式開源。在大會(huì)主論壇中,巨杉數(shù)據(jù)庫(kù)聯(lián)合創(chuàng)始人王濤,介紹了對(duì)于兼容的機(jī)構(gòu)以及兼容工具,同時(shí)也正式宣布項(xiàng)目正式向社區(qū)開源。而數(shù)據(jù)存儲(chǔ)和管理層,則完全由巨杉數(shù)據(jù)庫(kù)的分布式數(shù)據(jù)庫(kù)引擎實(shí)現(xiàn)。 9月7日、8日,2018 ODF 開源數(shù)據(jù)庫(kù)論壇,在北京盛大開幕。在大會(huì)上,巨杉數(shù)據(jù)庫(kù)正式發(fā)布了巨杉全新的MySQL/MariaDB兼容架構(gòu),并...

    lentrue 評(píng)論0 收藏0
  • 什么是最適合云數(shù)據(jù)庫(kù)的架構(gòu)設(shè)計(jì)?

    摘要:在技術(shù)探索中,選擇了更適合云數(shù)據(jù)庫(kù)場(chǎng)景的架構(gòu)和引擎設(shè)計(jì)。目前,巨杉數(shù)據(jù)庫(kù)付費(fèi)企業(yè)級(jí)客戶與社區(qū)用戶總數(shù)超過(guò)家,并已在超過(guò)家強(qiáng)級(jí)別的銀行保險(xiǎn)證券等大型金融機(jī)構(gòu)核心生產(chǎn)業(yè)務(wù)上線。這一整體架構(gòu)設(shè)計(jì)相信是云數(shù)據(jù)發(fā)展的主流架構(gòu)設(shè)計(jì)。 分布式數(shù)據(jù)庫(kù)技術(shù)發(fā)展多年,但是在應(yīng)用、業(yè)務(wù)的驅(qū)動(dòng)下,分布式數(shù)據(jù)庫(kù)的架構(gòu)一直在不斷發(fā)展和演進(jìn)。 開源金融級(jí)分布式數(shù)據(jù)庫(kù)SequoiaDB,經(jīng)過(guò)6年的研發(fā),堅(jiān)持從零開始打...

    whlong 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<