標籤:
為什麼是PostgreSQL?
在.NET Core誕生之前,微軟平台上最常見的開發組件便是.NET Framework + SQL Server了,但是現在.NET Core終於讓跨平台部署成為了現實,這一模式還會常見嗎?個人認為這一黃金搭檔很可能會日漸勢微了,因為未來很多的.NET應用將部署在Linux上,為了使用SQL Server,人們又部署一個Windows環境嗎?想想都覺得不大可能,那麼為Linux上的.NET Core選擇一款合適的資料庫就變得非常重要。其實也不難選,因為就兩個選項,一個是MySQL(The world’s most popular open-source database),另一個是PostgreSQL(The world‘s most advanced open source database),從目前我的認知而言,我選擇了PostgreSQL。
在51job上全文檢索搜尋MySQL,有1568頁內容,而全文檢索搜尋PostgreSQL則只有44頁內容(2016年9月16日資料),這說明使用MySQL的企業和從業人員資料遠超PostgreSQL資料,那為什麼我還要選擇PostgreSQL呢?這要從三個方面談起,一是我曾學習並使用過MySQL,感覺MySQL上手容易,精通困難,一般程式員沒有經過培訓駕馭不了MySQL,當時有個項目,開發階段貌似和SQL Server區別不大,但是系統部署到生產環境之後很快效能問題就會暴露出來了,為此我不得不趕鴨子上架,邊學邊用,重構了整個資料訪問層,(有同學可能會問了,PostgreSQL可能比MySQL還要難上手,額,我最擔心的是項目組中有人SQL指令碼技術不過關,MySQL對於指令碼的最佳化做的又不咋滴...);第二是我目前對GIS應用系統比較感興趣,而PostgreSQL有一個MySQL無法比擬的優勢,那就是PostGIS,PostGIS可以完美支援空間資料儲存和空間分析;三是從PostgreSQL9.3起就內建了JSON資料類型,而9.4又開始支援JSONB,這標誌著PostgreSQL實際上已經是一個關係型資料庫和NoSQL資料庫的結合體了,而且有訊息表明,PostgreSQL的NoSQL效能有益到甚至超過了MongoDB!,這對於GIS大資料應用是多麼好的一個訊息啊。我還有什麼理由拒絕PostgreSQL呢?
~~~~~~~~~~~~~~~~我是分割線,以上都是廢話~~~~~~~~~~~~~~~~
安裝環境:CentOS7.2,與此處環境相同
在安裝之前,先看看官方的安裝說明總是一個好習慣
CentOS7.2中內建的PostgreSQL是9.2版本的,裡面沒有NoSQL特性,因此我們使用rpm包安裝方式,PostgreSQL的repository包地址清單在這裡。
1. 首先安裝PostgreSQL的rpm
sudo yum install http://yum.postgresql.org/9.5/redhat/rhel-7-x86_64/pgdg-redhat95-9.5-2.noarch.rpm -y
2. 然後再安裝PostgreSQL伺服器和第三方擴充包
sudo yum install postgresql95-server postgresql95-contrib -y
3. 初始化資料庫
sudo /usr/pgsql-9.5/bin/postgresql95-setup initdb
4. 設定資料庫服務開機啟動並立即啟動資料庫服務
sudo systemctl enable postgresql-9.5.servicesudo service postgresql-9.5 start
5. 檢查資料庫服務狀態,有綠色,沒紅色說明啟動OK了
service postgresql-9.5 status
6. 修改postgres使用者密碼,切換到postgres使用者
sudo passwd postgres
su postgres
7. 然後使用psql工具登入資料庫,列出當前的資料庫,命令分別是 psql 和 \l
在CentOS上,預設的PostgreSQL資料目錄是/var/lib/pgsql/版本號碼/data
PostgreSQL的設定檔就在這個目錄下/var/lib/pgsql/版本號碼/data/postgresql.confg,還有一個設定檔也需要稍加關注,那就是存取控制設定檔/var/lib/pgsql/版本號碼/data/pg_hba.conf
8. 下面需要先對服務組態檔postgresql.conf進行一些設定:
將 #listen_addresses = ‘localhost‘ 前的#號去掉,然後將後面的localhost改為*,然後將 #port = 5432 前的#去掉,最後再將 #password_encryption = on 前面的#號去掉,如所示,使用wq命令儲存退出。
(友情提示:postgresql.conf中可以修改的參數很多,中第2個紅框可以修改偵聽連接埠,另外此檔案內還可以修改緩衝大小等多種參數)
9. 再對pg_hba.conf內容進行配置,將上面紅框內的ident改為md5,然後再在最下面加入 host all all 0.0.0.0/0 md5 ,如所示:
10. 重啟postgresql-9.5服務,使設定檔重效
service postgresql-9.5 restart
11. 接下來我們建立一個資料庫
psql
CREATE DATABASE testdb;
如所示,我們就建立了一個名為testdb的資料庫,
12.然後再建立一名使用者
CREATE USER think8848 CREATEDB LOGIN PASSWORD ‘111111‘
如所示,這樣我們就建立了一個名為think8848的使用者,後面的 CREATEDB LOGIN PASSWORD ‘111111‘ 意思是這個使用者可以建立資料庫,還可以登入,他的密碼是111111
13. 接下來將testdb的所有許可權都分配給think8848同學
GRANT ALL ON DATABASE testdb TO think8848
14. 退出postgres使用者登入,命令為\q, 對,你沒看錯,就是一個反斜線和一個q
15. 開啟防火牆5432連接埠
sudo firewall-cmd --zone=public --add-port=5432/tcp --permanentsudo firewall-cmd --reload
16. 嘗試用think8848登入資料庫
psql -U think8848 -h 127.0.0.1 -p 5432 -d testdb -W
最後,再說兩個psql很常用的命令,一個\c,切換資料庫,如: \c postgres; ,它的作用和SQL Server的 use postgres; 一樣;另一個是\d,此命令是列出當前庫下所有的表。
17. 我打算使用PostgreSQL做資料庫伺服器,但是從沒打算使用psql當管理工具,所以還是要找個GUI的管理工具才行啊,也不知道哪個好,先隨手抓過來一個用用看,pgAdmin4,在這裡 ,
先建個Server看看都有什麼
再給起個響亮點的名稱
然後再設定管理員IP等資訊
點了Save後並沒有什麼反應,在Servers上點擊右鍵Refresh,還是沒有什麼效果,難道這貨沒有用?好吧,再試試IT人員的殺手級技巧吧,關了程式重新開啟,這時...
看起來還不錯,可以用圖形化介面管理資料庫,然後又是免費的,我們不能要求太多,對吧?
CentOS7下安裝並簡單設定PostgreSQL筆記