摘要:是一款開源的數據庫,支持標準,用戶可以通過驅動連接進行應用程序開發。本文就針對如何擴展功能,實現對接進行介紹。直接在中修改配置文件,只能在當前中生效,重新登錄需要重新設置。
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. 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默認啟動端口為”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/postgres unix 2 [ ACC ] STREAM LISTENING 40776754 20502/postgres /tmp/.s.PGSQL.5432
創建PostgreSQL的database
$> bin/createdb -p 5432 foo
進入PostgreSQL shell 環境
$> bin/psql -p 5432 foo2. 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=# q2.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,2,3} | 123
連接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 foo2.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.conf3. 使用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 $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(); } } ```
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/38927.html
摘要:在大會上,巨杉數據庫正式發布了巨杉全新的兼容架構,并將項目正式開源。在大會主論壇中,巨杉數據庫聯合創始人王濤,介紹了對于兼容的機構以及兼容工具,同時也正式宣布項目正式向社區開源。而數據存儲和管理層,則完全由巨杉數據庫的分布式數據庫引擎實現。 9月7日、8日,2018 ODF 開源數據庫論壇,在北京盛大開幕。在大會上,巨杉數據庫正式發布了巨杉全新的MySQL/MariaDB兼容架構,并...
摘要:在技術探索中,選擇了更適合云數據庫場景的架構和引擎設計。目前,巨杉數據庫付費企業級客戶與社區用戶總數超過家,并已在超過家強級別的銀行保險證券等大型金融機構核心生產業務上線。這一整體架構設計相信是云數據發展的主流架構設計。 分布式數據庫技術發展多年,但是在應用、業務的驅動下,分布式數據庫的架構一直在不斷發展和演進。 開源金融級分布式數據庫SequoiaDB,經過6年的研發,堅持從零開始打...
閱讀 2907·2021-11-19 09:40
閱讀 3578·2021-10-09 09:43
閱讀 2675·2021-09-22 15:31
閱讀 1724·2021-07-30 15:31
閱讀 782·2019-08-30 15:55
閱讀 3256·2019-08-30 15:54
閱讀 1160·2019-08-30 11:26
閱讀 1907·2019-08-29 13:00