【PostgreSQL】CentOS7.x上 PostgreSQL 9.5的安裝配置

一、PostgreSQL簡介


PostgreSQL是自由的對象-關(guān)系型數(shù)據(jù)庫服務(wù)器(數(shù)據(jù)庫管理系統(tǒng)),在靈活的BSD許可證下發(fā)行。它在其他開放源代碼數(shù)據(jù)庫系統(tǒng)(比如MySQL和Firebird),和專有系統(tǒng)(比如Oracle、Sybase、IBM的DB2和Microsoft SQL Server)之外,為用戶提供了又一種選擇。

PostgreSQL不尋常的名字導(dǎo)致一些讀者停下來嘗試拼讀它,特別是那些把SQL拼讀為"sequel"的人。PostgreSQL開發(fā)者把它拼讀為"post-gress-Q-L",它也經(jīng)常被簡略念為"postgres"。

PostgreSQL維基百科:https://zh.wikipedia.org/wiki/PostgreSQL


二、實驗環(huán)境

操作系統(tǒng): CentOS7.5 Minimal?

IP: 192.168.1.106


三、安裝PostgreSQL


添加PostgreSQL9.5官方y(tǒng)um源

# yum -y? install? https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm

# ll /etc/yum.repos.d/



安裝PostgreSQL9.5服務(wù)端和客戶端

#? yum? -y install? ?postgresql95? ??postgresql95-server??

# yum info??postgresql95? ??postgresql95-server??

# rpm? -ql? ?postgresql95??

# rpm? -ql??postgresql95-server??


# cat /etc/passwd


初始化數(shù)據(jù)庫,啟動數(shù)據(jù)庫

#? ?/usr/pgsql-9.5/bin/postgresql95-setup initdb??

#? ?cat /var/lib/pgsql/9.5/initdb.log



#??systemctl start? postgresql-9.5.service

# systemctl enable postgresql-9.5.service

# systemctl status? postgresql-9.5.service


默認的數(shù)據(jù)存方目錄是/var/lib/pgsql/9.5/data/

# ll? ?/var/lib/pgsql/9.5/data/??

可以看出數(shù)據(jù)里目錄的屬主屬組為postgres,默認目錄權(quán)限為700,文件權(quán)限為600?


如果你想自定義數(shù)據(jù)庫目錄,在輸出化數(shù)據(jù)前更改數(shù)據(jù)存放目錄然后初始化數(shù)據(jù)庫,啟動數(shù)據(jù)庫:

#? cat? ? /usr/lib/systemd/system/postgresql-9.5.service



設(shè)置數(shù)據(jù)庫目錄,假設(shè)為/opt/data/postgres

# vim???/usr/lib/systemd/system/postgresql-9.5.service

#####################################

Environment=PGDATA=/opt/data/postgres

######################################

# chown -R? postgres:postgres? /opt/data/postgres

# chmod 700??/opt/data/postgres


#??/usr/pgsql-9.5/bin/postgresql95-setup initdb??

#? systemctl start? postgresql-9.5.service


四、設(shè)置監(jiān)聽IP,開啟遠程連接


#??vim? /var/lib/pgsql/9.6/data/postgresql.conf

#######################################

listen_addresses = '192.168.1.106'

########################################

注:如果是設(shè)置 listen_addresses = '*'? 表示監(jiān)聽 0.0.0.0.0


# vim??/var/lib/pgsql/9.5/data/pg_hba.conf

#####################################

host? ? ?all? ? ? ? ?all? ? ? ?127.0.0.1/32? ? ? ?trust

host? ? all? ? ? ? ? ?all? ? ? 192.168.1.0/24? ? trust

######################################

注:設(shè)置你允許的客戶端網(wǎng)段,你可以設(shè)置為某個網(wǎng)段如 192.168.1.0/24,具體某個IP如 192.168.1.106 或者任何客戶端 0.0.0.0/0



五、數(shù)據(jù)庫的命令行操作

Postgres運行用戶默認是postgres,shell為 /bin/bash?

# su -? postgres

$ psql --help

psql 是 PostgreSQL 中的一個命令行交互式客戶端工具,

它允許你交互地鍵入 SQL 命令,然后把它們發(fā)送給 PostgreSQL 服務(wù)器,再顯示 SQL 或命令的結(jié)果。

輸入的內(nèi)容允許來自一個文件,此外它還提供了一些元命令和多種類似 shell 的特性來實現(xiàn)書寫腳本,以及對大量任務(wù)的自動化工作。

postgresql95為我們提供了連接數(shù)據(jù)庫工具的客戶端軟件psql,postgresql96-server 是服務(wù)端軟件。psql命令有兩種格式,分別是:

#################################################

psql postgres://username:password@host:port/dbname?

?psql -U username -h hostname -p port -d dbname

##################################################

PostgreSQL安裝及初始化完成以后,在它的配置文件里,默認只允許本機連接,而且連接到服務(wù)器的認證方式是peer和ident。


#? cat? ?/var/lib/pgsql/9.5/data/pg_hba.conf

命令格式:

本地連接非常好理解,就是從安裝PostgreSQL的主機上連接,那 peer 和 ident 認證又是怎么回事呢?

PostgreSQL的官方文檔上是這么說的:

map映射是在data目錄下的pg_ident.conf目錄里配置的,其基本定義格式如下:

#? cat??/var/lib/pgsql/9.5/data/pg_ident.conf



(1)PostgreSQL的連接命令psql有兩種連接方式。不帶-h參數(shù)或host參數(shù)時,是local連接,用的是peer認證方式,通過unix或者linux系統(tǒng)的socket進行連接。如果使用-h localhost、-h 127.0.0.1、postgres@localhost 或 postgres@127.0.0.1 這樣的格式,則會使用host類型,使用TCP/IP的方式連接,使用的是ident的認證方式。

(2)需要修改配置文件設(shè)置好連接方式和認證方式,保證能夠正常連接。


前面我們講到,剛安裝好并初始化完畢后,PostgreSQL服務(wù)器默認監(jiān)聽的地址是本地地址,即localhost。

我們一般都是在自己的電腦上安裝客戶端,然后遠程連接到機房的物理服務(wù)器上。那怎么允許我們的機器可以連接到PostgreSQL服務(wù)器端呢?這里涉及到data目錄下兩個配置文件:

pg_hba.conf

postgresql.conf




默認監(jiān)聽localhost,這就是為什么剛安裝好的PostgreSQL只能在本機上連接的原因。

我們將這個地址修改為0.0.0.0或服務(wù)器的ip地址,如下所示:

#??vim? /var/lib/pgsql/9.6/data/postgresql.conf

######################################

listen_addresses = '192.168.1.106'

######################################

# systemctl? restart? postgres-9.5.service


這個時候還有一個問題,那就是認證的問題。

剛才我們講過peer和ident兩種認證方式,前者只適用于本地連接,而后者則需要從ident服務(wù)器上獲取用戶名,都不適合我們當(dāng)前的連接方式,那么還需要再修改認證方式,這里要介紹的認證方式是md5和trusted。


我們沒講過PostgreSQL的密碼設(shè)置問題,也沒有為數(shù)據(jù)庫設(shè)置一個密碼,那么我們只能先使用trusted的認證方式先連接到數(shù)據(jù)庫上,再考慮修改數(shù)據(jù)庫密碼的問題。

# vim??/var/lib/pgsql/9.5/data/pg_hba.conf

#####################################

host? ? ?all? ? ? ? ?all? ? ? ?127.0.0.1/32? ? ? ? ?trust

host? ? all? ? ? ? ? ?all? ? ??192.168.1.0/24? ? ?trust

######################################

注:設(shè)置你允許的客戶端網(wǎng)段

六、PostgreSQL密碼設(shè)置

我們在上一節(jié)中講了兩種連接PostgreSQL的方式,分別是命令行連接和圖形界面連接。這里不知道大家有沒有發(fā)現(xiàn)一個問題,就是不管是在命令行連接或者是圖形界面連接的時候,我們都沒有要求大家設(shè)置密碼或者輸入密碼?

這是因為在PostgreSQL安裝完成后,我們使用/usr/pgsql-9.5/bin/postgresql96-setup initdb命令進行初始化的時候,并沒有通過這個命令指定初始用戶postgres的密碼。當(dāng)我們在服務(wù)器命令行界面使用peer認證直接登陸時,沒要求我們輸入密碼,但是要記住,這樣使用數(shù)據(jù)庫是非常危險的,特別是你的數(shù)據(jù)庫布置在云服務(wù)器的時候,很可能分分鐘就被黑掉。在圖形界面連接的時候,我們還設(shè)置了使用trust認證方式,這種方式默認允許不使用密碼即可進行連接,也是非常危險的。

為了避免這些意外情況,我們介紹一下如何設(shè)置以及修改用戶的密碼。


1. 初始化時設(shè)置密碼

當(dāng)使用rpm包或PostgreSQL的官方y(tǒng)um源安裝好PostgreSQL以后,不要使用/usr/pgsql-9.5/bin/postgresql95-setup initdb命令進行初始化,而是使用initdb命令。,

命令語法:

initdb [命令選項] [--pgdata | -D] 目錄名


介紹完這個命令的用法以后,我們嘗試使用這個命令來初始化數(shù)據(jù)庫并給postgres用戶設(shè)置一個密碼。

這個命令是不能用root用戶來允許的,因此先切換到postgres用戶:

# su? - postgres?

$? /usr/pgsql-9.5/bin/initdb? -A md5? -U postgres -W -D? 9.5/data


在這個命令中,我們使用的是md5加密密碼,超級用戶是postgres,目錄是postgres用戶的家目錄下的9.6/data/目錄,完整路徑是/var/lib/psql/9.5/data/。

因為我們沒有設(shè)置編碼模式,從圖中我們可以看到默認使用的是UTF8編碼,然后執(zhí)行過程中有讓我們輸入密碼,輸入密碼確認以后,開始創(chuàng)建目錄,設(shè)置各種參數(shù)。

配置完成以后還給出了啟動PostgreSQL服務(wù)的命令:

$? /usr/pgsql-9.5/bin/pg_ctl? ?-D 9.5/data? ?-l? logfile? ?start

pg_ctl是postgresql自帶的管理工具,也是只能在普通用戶權(quán)限下執(zhí)行的命令。

這里我們先暫時不使用這個工具。初始完成以后,我們使用systemctl啟動PostgreSQL服務(wù)器:

#? su -? root?

# systemctl start postgresql-9.5.service

此時登錄就可以看到已經(jīng)要求你輸入賬號密碼了,輸入剛才我們初始化時設(shè)置的密碼,成功登陸。

我們再看看配置文件pg_hba.conf,如下所示:

# cat? ? /var/lib/pgsql/9.5/data/pg_hba.conf

此時所有的默認認證方式都是我們剛才設(shè)置的md5認證方式,說明設(shè)置成功。


2. 初始化完成后修改密碼

如果使用的是默認的初始化模式,則默認使用的是peer和ident的認證方式,配置好這兩種認證方式以后,是不需要密碼就可以登陸。

這時候可以先登陸到PostgreSQL服務(wù)器,然后修改密碼,修改密碼有兩種方式:

psql命令工具修改密碼

PostgreSQL的SQL語句修改密碼

psql用來修改的命令工具是\password,命令行界面登錄成功以后,輸入這個命令,就可以直接修改當(dāng)前用戶的密碼。

比如我們是postgres用戶登陸,輸入這個密碼則修改postgres的密碼,若是其他用戶,則修改其他用戶的密碼,如下所示:


連續(xù)輸入兩遍密碼,即成功修改,退出以后重新登陸時就需要輸入新密碼。


SQL語句用來修改密碼的格式如下:

ALTER USER username PASSWORD? 'passwordtext';


修改成功后會提示ALTER ROLE。

密碼修改成功以后,將配置文件里的認證方式修改為md5認證

#? cat?/var/lib/pgsql/9.5/data/pg_hba.conf

#? systemctl restart postgresql-9.5.service

# psql? ?-U? postgres -p 5432

重啟完成后,重新登陸就需要輸入密碼登陸了,不管是命令行登錄還是圖形工具登錄。


注意:psql并不支持像mysql命令行那樣直接把密碼作為參數(shù)傳遞進去進行非交互式登錄,必須使用password file或者環(huán)境變量

https://www.postgresql.org/docs/current/libpq-envars.html

https://www.postgresql.org/docs/current/libpq-pgpass.html


3.基本信息查看

(1)通過psql命令查看,命令是psql --version

#? s - postgres

$psql --version


(2)登錄后通過SQL語句查看,命令是:SELECT version();

這個命令查看的信息更詳細,可以看到服務(wù)器版本,平臺型號,編譯信息等。


(3)查看數(shù)據(jù)庫信息


總結(jié):

這一章里我們學(xué)習(xí)的內(nèi)容是如何給用戶設(shè)置密碼、如何配置用戶的認證方式以及如何查看用戶的基本信息。

設(shè)置密碼分為兩種方式,分別是psql命令行形式和SQL語句形式

用戶認證可以在初始化時進行配置,也可以在初始化完成后修改pg_hba.conf文件進行配置

查看表的信息也是通過兩種方式,一種是psql的命令行工具,例如\l、\d、\c等,另外一種是PostgreSQL提供的函數(shù),例如pg_relation_size()等。這里要注意的一點是,PostgreSQL提供的函數(shù)如果帶參數(shù)時,要用引號將參數(shù)引起來否則會報錯。



七、設(shè)置防火墻

CentOS7.x? 防火墻中內(nèi)置了PostgreSQL服務(wù),配置文件位置:

#? ls? /usr/lib/firewalld/services/

?# cat /usr/lib/firewalld/services/postgresql.xml

放行相關(guān)服務(wù)端口方式1:

#? firewall-cmd --add-service=postgresql? ?--zone=pubilic? ?--permanent?

# firewall-cmd --reload?

放行相關(guān)服務(wù)端口方式2:

#?firewall-cmd --add-port=5432? ?--zone=pubilic? ?--permanent

# firewall-cmd --reload?



八、參考


PostgreSQL FAQ

https://wiki.postgresql.org/wiki/FAQ/zh-hant


Documentation /PostgreSQL 9.5/The pg_hba.conf File

https://www.postgresql.org/docs/9.5/auth-pg-hba-conf.html

https://my.oschina.net/liuyuanyuangogo/blog/497239


CentOS 7 安裝、配置、使用 PostgreSQL 9.5

http://www.itdecent.cn/p/7e95fd0bc91a


CentOS 7 安裝PostgreSQL 9.6

http://www.itdecent.cn/p/d26ae43446a2


Centos 7 安裝 PostgreSQL

https://www.cnblogs.com/stulzq/p/7766409.html


PostgreSQL與MySQL比較

http://bbs.chinaunix.net/thread-1688208-1-1.html


Linux downloads (Red Hat family)

https://www.postgresql.org/download/linux/redhat/


PostgreSQL RPM Building Project - Repository Packages

https://yum.postgresql.org/repopackages.php


PostgreSQL使用教程

http://www.itdecent.cn/p/d9fecdeaa759

http://www.itdecent.cn/p/f246dc45e6dc

http://www.itdecent.cn/p/bd6680e4abf3


psql使用入門

http://valleylord.github.io/post/201408-psql-basic


高效使用 PostgreSQL 命令行

https://www.atjiang.com/postgresql-on-the-command-line


PostgreSQL psql 命令語法參數(shù)說明

https://itbilu.com/database/postgre/410auo8xZ.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容