PostgreSQL on Azure.cn : 安裝部署
PostgreSQL 是一個對象-關系數據庫(數據庫管理系統),基於BSD許可證。因為許可證的靈活,任何人都可以以任何目的免費使用,修改,和分發PostgreSQL。簡單地說,即使拿它來改一改,然後再拿出去賣錢,也沒有人會來管。因此頗多的國產數據庫就是基於PostgreSQL開發的。
有一件很有意思的事,PostgreSQL並不是念“post-gre- sequel”,PostgreSQL的開發者把它念作“post-gress-Q-L”,通常會簡讀為 "postgres"。
PostgreSQL支持大部分SQL標準並且提供了許多現代特性,例如:復雜查詢、外鍵、觸發器、視圖、事務完整性、多版本並發控制。同樣,PostgreSQL 可以用許多方法擴展,比如,通過增加新的數據類型、函數、操作符、聚集函數、索引方法、過程語言。而且支持很多分布式集群軟件,如pgpool、pgcluster、slony、plploxy等等,因此很容易做讀寫分離、負載均衡、數據水平拆分。
正因為Postgres有很多好處,目前很多用戶都想要在Azure上也使用PostgreSQL作為數據庫服務。在Azure.com上,PostgreSQL已經作為Azure的PaaS服務提供預覽了。
但是,在Azure.cn上,目前還沒有提供PostgreSQL的PaaS服務。那用戶要使用怎麽辦呢?目前建議用戶在Azure上自行搭建。其實整個安裝部署的過程並不復雜,大家可以參考以下步驟自行安裝。
安裝環境為CentOS7.3,這也是Azure.cn上目前使用較為普遍的Linux系統。
在正式開始安裝前,首先要確保PostgreSQL所需要的依賴包都已經正確安裝了,我們通過一條命令來安裝所有的依賴包:
# yum install readline-devel gcc make zlib-devel openssl openssl-devel libxml2-devel pam-devel pam libxslt-devel tcl-devel python-devel -y
所有的軟件包會自動下載並安裝(記得要給虛機配置一個公網地址)。
等到所有軟件安裝完成,我們就可以下載最新的PostgreSQL的安裝包了,在瀏覽器輸入https://ftp.postgresql.org/pub/source/,可以看到最新版本是2017年8月31號發布的9.6.5
執行以下命令,下載最新的PostgreSQL安裝包到指定目錄
# wget https://ftp.postgresql.org/pub/source/v9.6.5/postgresql-9.6.5.tar.bz2 -P /root/
進入下載目錄,用tar命令解壓縮安裝包
# tar jxvf postgresql-9.6.5.tar.bz2
這條命令將安裝包解壓到了postgresql-9.6.5,接下來我們就進入該目錄,執行安裝部署:
# cd postgresql-9.6.5
指定將PostgreSQL安裝到opt目錄下
# ./configure --prefix=/opt/postgresql-9.6.5
如果我們需要生成所有能生成的內容,包括文檔(HTML 和手冊頁)和其他模塊 (contrib),那麽再執行以下命令,完成安裝:
# gmake install-world
至此,PostgreSQL的軟件包就已經安裝完畢了,接下來我們需要初始化並配置數據庫:
首先我們可以先創建一個鏈接,指向安裝目錄,這只是為了簡化後面用到的命令,也可以跳過這一步,不過後繼的命令要做相應的修改:
# ln -s /opt/postgresql-9.6.5 /opt/pgsql
安裝好的PostgreSQL沒有創建數據庫,因此我們首先要創建數據庫目錄
# mkdir -p /opt/pgsql_data
但是直接在root下運行數據庫是很危險的,所以我們要創建一個新用戶,並修改該用戶的配置文件。
# useradd postgres
# chown -R postgres.postgres /opt/pgsql_data
# su – postgres
編輯 bash_profile 文件。這些行將添加到 bash_profile 文件的末尾,
cat >> ~/.bash_profile <<EOF
export PGPORT=1999
export PGDATA=/opt/pgsql_data
export LANG=en_US.utf8
export PGHOME=/opt/pgsql
export PATH=\$PATH:\$PGHOME/bin
export MANPATH=\$MANPATH:\$PGHOME/share/man
export DATA=`date +"%Y%m%d%H%M"`
export PGUSER=postgres
alias rm=‘rm -i‘
alias ll=‘ls -lh‘
EOF
執行 bash_profile 文件,或者退出當前帳號,重新進入,確保參數生效。
$ source .bash_profile
到這裏,數據庫就配置完成了,我們可以通過以下兩條命令來查看安裝目錄,參數是否正確
$ which psql
$ psql -V
當我們看到以上反饋時,說明安裝基本沒有問題了。
接下來我們初始化數據庫:
$ initdb -D $PGDATA -E UTF8 --locale=C -U postgres -W
還需要配置數據庫啟動文件:
# cd /root/postgresql-9.6.5/contrib/start-scripts
# cp linux /etc/init.d/postgresql
修改 /etc/init.d/postgresql 文件中的兩個變量。設置為 PostgreSQL 的安裝路徑:/opt/pgsql。PGDATA 設置為 PostgreSQL 的數據存儲路徑:/opt/pgsql_data
# sed -i ‘32s#usr/local#opt#‘ /etc/init.d/postgresql
# sed -i ‘35s#usr/local/pgsql/data#opt/pgsql_data#‘ /etc/init.d/postgresql
設置啟動文件為可執行文件
# chmod +x /etc/init.d/postgresql
現在我們可以啟動postgreSQL了
# /etc/init.d/postgresql start
檢查 PostgreSQL 的終結點是否已打開,註意,此時PostgreSQL只允許本機連接數據庫,因為我們還沒有配置監聽端口和信任端點:
# netstat -tunlp|grep 1999
安裝部署至此全部完成,接下來讓我們連接到數據庫,並建立一個簡單的數據庫來驗證一下:
切換成 postgres 用戶
# su – postgres
創建數據庫
$ createdb events
鏈接新創建的數據庫
$ psql -d events
創建我們的第一張表
CREATE TABLE potluck (name VARCHAR(20), food VARCHAR(30), confirmed CHAR(1), signup_date DATE);
現在已經設置一個具有以下列名和限制的 4 列表:
“name”列受 VARCHAR 命令限制,必須少於 20 個字符。
“food”列指示每個人將攜帶的食物。VARCHAR 將此文本限制為 30 個字符以下。
“confirmed”列記錄此人是否接受了聚餐邀請。可接受的值為“Y”和“N”。
“date”列將在他們報名參加該活動時顯示。Postgres 要求日期格式為 yyyy-mm-dd。
查看創建的表
\dt
插入一行數據
INSERT INTO potluck (name, food, confirmed, signup_date) VALUES(‘John‘, ‘Noodle‘, ‘Y‘, ‘2017-09-21‘);
多添加幾個
INSERT INTO potluck (name, food, confirmed, signup_date) VALUES(‘Sandy‘, ‘Rice‘, ‘N‘, ‘2017-09-21‘);
INSERT INTO potluck (name, food, confirmed, signup_date) VALUES (‘Tom‘, ‘BBQ‘,‘Y‘, ‘2017-09-20‘);
INSERT INTO potluck (name, food, confirmed, signup_date) VALUES(‘Tina‘, ‘Salad‘, ‘Y‘, ‘2017-09-19‘);
在表中查詢
select * from potluck;
更新數據
UPDATE potluck set confirmed = ‘Y‘ WHERE name = ‘Sandy‘;
UPDATE potluck set food = ‘Rice‘ WHERE name = ‘Sandy‘;
刪除數據
delete from potluck where name = ’John’;
在下一篇,我們來看看怎麽修改PostgreSQL的數據庫參數,優化性能。
PostgreSQL on Azure.cn : 安裝部署