CentOS7下安裝並簡單設置PostgreSQL筆記


為什么是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人員的殺手級技巧吧,關了程序重新打開,這時...

看起來還不錯,可以用圖形化界面管理數據庫,然后又是免費的,我們不能要求太多,對吧?

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM