為什么是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
---------------------------我是分割線,2016.10.26更新開始---------------------------
3. 默認情況下,Postgresql安裝目錄是/usr/pgsql-9.5,而Postgresql的數據目錄是/var/lib/pgsql/版本號/data目錄,如果你從一開始就規划了/var很大磁盤空間,就沒有問題,但是一旦你的/var目錄空間並不大,那么就要考慮在安裝Postgresql時指定安裝目錄了,在本例中,我們假定/home的空間很大。
首先在/home下創建一個Postgresql的數據目錄
sudo mkdir /home/postgresql_data
然后為這個目錄指定所有者同時分配權限
sudo chown postgres:postgres /home/postgresql_data
sudo chmod 750 /home/postgresql_data
然后設置環境變量
export PATH=/usr/pgsql-9.5/bin:$PATH export LD_LIBRARY_PATH=/usr/pgsql-9.5/lib export PGDATA=/home/postgresql_data
然后使用命令initdb生成數據庫簇,在此之此,請切換至postgres用戶
initdb
最后嘗試啟動Postgresql服務
pg_ctl start -D $PGDATA
使用 ps -ef | grep postgres 驗證,如果有一堆postgres相關進程,那就安裝成功了。
如果就到此結束了,貌似第4步就沒法做了,因為使用 systemctl start postgresql-9.5 將不會成功的,為啥呢?請打開 sudo vi /usr/lib/systemd/system/postgresql-9.5.service ,因為在#Location of database direcotry配置節里面沒有指定正確的PGDATA。所以我們需要將下面的PGDATA設置成正確值
#Location of database directory Environment=PGDATA=/home/postgresql_data
---------------------------我是分割線,2016.10.26更新結束---------------------------
4. 配置數據庫服務開機啟動並立即啟動數據庫服務
sudo systemctl enable postgresql-9.5.service
sudo 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.conf,還有一個配置文件也需要稍加關注,那就是訪問控制配置文件/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 --permanent
sudo 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人員的殺手級技巧吧,關了程序重新打開,這時...
看起來還不錯,可以用圖形化界面管理數據庫,然后又是免費的,我們不能要求太多,對吧?