1、PostgreSQL簡介python
1.1 PostgreSQL概述
PostgreSQL數據庫是目前功能最強大的開源數據庫,支持豐富的數據類型(如JSON和JSONB類型、數組類型)和自定義類型。並且它提供了豐富的接口,能夠很容易地擴展它的功能,如能夠在GiST框架下實現本身的索引類型等,它還支持使用C語言寫自定義函數、觸發器,也支持使用流行的語言寫自定義函數,好比其中的PL/Perl提供了使用Perl語言寫自定義函數的功能,固然還有PL/Python、PL/Tcl,等等。
1.2 PostgreSQL的優點
PostgreSQL有如下優點:
- PostgreSQL數據庫是目前功能最強大的開源數據庫,它是最接近工業標準SQL92的查詢語言,而且正在實現新的功能以兼容最新的SQL標準:SQL2003
- 穩定可靠:PostgreSQL是惟一能作到數據零丟失的開源數據庫。
- 開源省錢:PostgreSQL數據庫是開源的、免費的,並且是BSD協議,在使用和二次開發上基本沒有限制。
- 支持普遍:PostgreSQL數據庫支持大量的主流開發語言,包括C、C++、Perl、Python、Java、Tcl,以及PHP等。
- PostgreSQL社區活躍:PostgreSQL基本上每三個月推出一個補丁版本,這意味着已知的BUG很快會被修復,有應用場景的需求也會及時獲得響應。
1.3 PostgreSQL應用現狀和發展趨勢sql
PostgreSQL目前在國外很流行,特別是最近幾年使用PostgreSQL數據庫的公司愈來愈多。好比,日本電信(NTT)大量使用PostgreSQL替代Oracle數據庫,而且在PostgreSQL之上二次開發了Postgres-XC。網絡電話公司Skype也大量使用PostgreSQL,並貢獻了一些與PostgreSQL數據庫配套的開源軟件:PL/Proxy、pgQ、Londiste。全球最大的CRM軟件服務提供商Salesforce也開始使用PostgreSQL。
在國內,愈來愈多的公司開始使用PostgreSQL,如斯凱網絡的後臺數據庫基本使用的都是PostgreSQL數據庫,去哪網也大量使用了PostgreSQL數據庫。主流的雲服務提供商如亞馬遜、阿里雲的RDS一樣提供了PostgreSQL的支持。
更多的使用狀況能夠見PostgreSQL官方網站:http://www.postgresql.org/about/users/
1.4 PostgreSQL與MySQL的對比
既然有了MySQL數據庫了,爲何還要使用PostgreSQL呢?這是由於在一些應用場景中,使用MySQL有如下幾個缺點:
- 功能不夠強大:MySQL的多表鏈接查詢方式只支持「Nest Loop」,不支持「hash join」和「sort merge join」。不只如此,還有不少SQL語法也不支持,子查詢性能比較低。
- 性能優化工具和度量信息不足:MySQL在運行過程當中若是出現問題,只產生不多的性能數據,很難讓維護人員準肯定位問題產生的緣由。MySQL的複製是異步的,沒法經過Master/Slave作到數據零丟失。一些第三方公司也有改造MySQL源代碼實現同步複製,但這些方案要麼是沒有開源,要麼開源卻又不是很穩定,因此,對於普通大衆來講,如何實現同步複製成了一個使人頭疼的問題。
- 在線操做功能較弱:若是在MySQL表中加列,基本上是新建一個表,並且建索引時也會鎖定整張表,即在建索引的過程當中,表不能作任何操做。一些大的互聯網公司或者是修改MySQL源碼來實如今線DDL的功能,或者是經過上層架構來解決這個問題,如如今slave數據庫上把DDL作完,而後把應用從master庫切換到slave,再把原先的master上把DDL作完。第一種方法,須要公司有很強的MySQL研發能力,第二種方法須要公司有較強的開發能力,能設計出較強的應用架構。這對於一些中小公司來講不太容易實現。
相對這些MySQL的弱點,PostgreSQL有如下優勢:
- PostgreSQL功能強大:支持全部主流的多表鏈接查詢的方法(如:「Nest Loop」、「hash join」、「sort merge join」);支持絕大多數的SQL語法(如:with語句)。
- 性能優化工具與度量信息豐富:PostgreSQL數據庫中有大量的性能視圖,可方便地定位問題(好比:可看到正在執行的SQL,可經過鎖視圖看到誰在等待、哪條記錄被鎖定等)。PostgreSQL中設計了專門的架構和進程用於收集性能數據,既有物理I/O方面的統計,也有表掃描方面的性能數據。
- 在線操做功能好:PostgreSQL增長空值的列時,本質上只是在系統表上把列定義上,無須對物理結構作更新,這就讓PostgreSQL在加列時能夠作到瞬間完成。PostgreSQL還支持在線建索引的功能,建索引的過程能夠不鎖更新操做。
- PostgreSQL9.1開始,支持同步複製功能,經過master和slave之間的複製能夠實現零數據丟失的高可用方案。
另外,因爲MySQL對SQL語法支持的功能較弱,基本上不適合作數據倉庫。而PostgreSQL不只支持複雜的SQL,還支持大量的分析函數,很是適合作數據倉庫。
PostgreSQL數據庫中還有一些支持移動互聯網的新功能,如空間索引。PostGIS是最著名的一個開源GIS系統,它是PostgreSQL中的一個插件,經過它能夠很方便地解決LBS中一些位置計算問題。
綜上所述,PostgreSQL數據庫市一個功能強大,又帶有移動互聯網特徵的開源數據庫。若是你僅僅是想把數據庫做爲一個簡單的存儲功能使用(如一些大的互聯網公司),一些較複雜的功能都想放在應用中來實現,那麼選擇MySQL或一些NoSQL產品都是合適的;若是你應用的數據訪問很簡單(如大多數的blog系統),那麼後端使用MySQL也是很合適的。但若是你的應用不像blog系統那麼簡單,而你又不想消耗太多的開發資源,那麼PostgreSQL是一個明智的選擇。最有說服力的例子就是圖片分享公司instagram,在使用python+PostgreSQL架構後,只是十幾我的就支持起了整個公司的業務。在數據庫中使用PostgreSQL的感受,就像在開發語言中使用python,會讓你的工做變得簡潔和高效。
2、PostgreSQL安裝
2.1 Linux上的安裝:
源碼安裝方式:
一、從PostgreSQL官方網站下載源碼:www.postgresql.com,目前最新版本是9.5
二、點擊「Download」標籤,選擇合適的源碼壓縮包,我這裏選擇Redhat平臺的postgresql9.5.0.tar.gz壓縮包
三、環境準備:操做系統爲CentOS6.5_x86 64位
1 [root@masterdb ~]#yum install -y zlib zlib-devle readline readline-devel python python-devel perl perl-devel bison flex perl-ExtUtils-Embed
可選軟件包(lrzsz,sysstat,e4fsprogs,openssl ,openssl-devel ,pam-devel,libxml2-devel,libxslt-devel,tcl-devel,gcc,make,smartmontools,OpenIPMI-tools, systemtap-sdt-devel)數據庫
四、安裝步驟:vim
1 [root@masterdb ~]# useradd postgres
2 [root@masterdb ~]# passwd postgres
3 Changing password for user postgres.
4 New password:
5 BAD PASSWORD: it is too simplistic/systematic
6 BAD PASSWORD: is too simple
7 Retype new password:
8 passwd: all authentication tokens updated successfully.
9 [root@masterdb ~]# tar xf postgresql-9.5.0.tar.gz -C /usr/local/
10 [root@masterdb ~]# cd /usr/local/postgresql-9.5.0/
11 [root@masterdb postgresql-9.5.0]# ./configure --prefix=/usr/local/pgsql9.4.5 --with-perl --with-python
12 [root@masterdb postgresql-9.5.0]# make
13 [root@masterdb postgresql-9.5.0]# make install
14 [root@masterdb postgresql-9.5.0]# cd contrib/ #安裝額外的管理工具,以便後續管理使用
15 [root@masterdb contrib]# make install
16 [root@masterdb ~]# chown -R postgres.postgres /data/postgredata/
17 [root@masterdb ~]# chown -R root.postgres /usr/local/pgsql9.4.5
五、配置環境變量:windows
1 [root@masterdb ~]# vim /etc/profile.d/pgsql.sh
2 export PATH=$PATH:/usr/local/pgsql9.4.5/bin
3 export LD_LIBRARY_PATH=/usr/local/pgsql9.4.5/lib
4 export PGDATA=/data/pgdata
5 [root@masterdb ~]# source /etc/profile.d/pgsql.sh
六、初始化數據庫:後端
1 [root@masterdb ~]# su - postgres
2 [postgres@masterdb ~]$ pg_ctl initdb
3 setting privileges on built-in objects ... ok
4 creating information schema ... ok
5 loading PL/pgSQL server-side language ... ok
6 vacuuming database template1 ... ok
7 copying template1 to template0 ... ok
8 copying template1 to postgres ... ok
9 syncing data to disk ... ok
10 WARNING: enabling "trust" authentication for local connections
11 You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.Success. You can now start the database server using: /usr/local/pgsql9.4.5/bin/pg_ctl -D /data/postgredata -l logfile start
12 [postgres@masterdb ~]$ pg_ctl -D /data/postgredata/ start
13 server starting
14 [postgres@masterdb ~]$ LOG: database system was shut down at 2016-02-01 14:02:16 CST
15 LOG: MultiXact member wraparound protections are now enabled
16 LOG: database system is ready to accept connections
17 LOG: autovacuum launcher started
若是以上沒有報錯,說明已安裝成功。數組
2.2 Windows上的安裝性能優化
我這裏以window6位的postgresql9.5爲例演示圖形化安裝
二、雙擊下載的postgresql-9.5.0-1-windows-x64.exe文件開始安裝服務器
![](http://static.javashuo.com/static/loading.gif)
三、單擊「Next」繼續,選擇PostgreSQL軟件安裝目錄,這裏我選擇安裝在D:\Program Files\PostgreSQL\9.5網絡
![](http://static.javashuo.com/static/loading.gif)
四、單擊"Next"繼續,選擇數據存放目錄,我選擇D:\Program Files\PostgreSQL\9.5\data,也便是在軟件安裝目錄下的data目錄,生產環境下要按實際需求合理規劃數據存放目錄。
五、單擊「Next」繼續,爲postgresql的超級用戶設置一個強密碼,默認超級用戶爲postgres
六、單擊「Next」繼續,設置監聽端口,默認爲5432,你也能夠自定義端口,我這裏選擇默認
七、單擊「Next」繼續,設置高級選項,主要是集羣方面的設置,這裏暫時用不到集羣,選擇默認便可
八、單擊「Next」繼續
九、繼續單擊「Next」後開始安裝,等待安裝完成,以下圖:
十、單擊「Finished」完成安裝
十二、單擊「添加一個服務器鏈接」圖標,鏈接咱們剛剛安裝好的postgresql服務器,輸入主機、端口、用戶名和密碼等信息後,點擊「肯定」 ,便可鏈接進去。