Centos7安裝PostgreSQL12

1.事前準備

友情提示:如果不是特別熟悉,在需要debug的情況下,請不要使用docker來搭建,可能是需要一些特殊的參數,
如果有需求或者有想法的可以自行查閱資料,(好用了的話煩請賜教)
由於國內資料比較少,具體的就不自己研究了,這裏僅爲友情提示,以免大家像我一樣浪費寶貴的時間.

1.1 創建用戶

安裝時PostgreSql會根據安裝時你所使用的用戶名來當做初始數據庫名用戶名,所以這裏一定要建一個postgres用戶.

groupadd postgres
useradd -g postgres postgres
echo "postgress" | passwd --stdin postgres

1.2 安裝包下載&解壓縮

下載地址:可以選擇自己需要的版本.

https://www.postgresql.org/ftp/source/

下載後解壓縮,到自己喜歡的目錄

tar -xzvf postgresql-12.2.tar.gz -C /opt/tools/

將解壓後的目錄owner及group都指定爲postgres用戶

chown -R postgres:postgres /opt/tools/postgresql-12.2

1.3 安裝依賴組件&安裝數據庫服務

yum install -y make gcc-c++ readline-devel zlib-devel

2. 開始安裝

從現在開始請使用postgres用戶進行操作

su - postgres

2.1 configure

首先切入安裝包目錄

cd /opt/tools/postgresql-12.2/

開始進行配置,這裏的選項是爲了讓PostgreSql支持debug.(雖然跟oracle比起來很難用....)

# --prefix 後面接數據庫的安裝位置.
./configure --enable-debug --enable-cassert --disable-thread-safety CFLAGS='-O0 -g' \
--prefix=/home/postgres/pghome

2.2 安裝

建議make和make instal分開執行,有時候配置錯誤會可以少做些無用功

make
make install

2.3 環境變量配置

vi ~/.bashrc

在~/.bashrc中添加如下內容:

export LD_LIBRARY_PATH=$HOME/pghome/lib:$LD_LIBRARY_PATH
export PATH=$HOME/pghome/bin:$PATH

記得重讀配置文件

. ~/.bashrc
or
source ~/.bashrc

2.4 初始化數據庫

首先創建一個目錄,用來存放數據.

mkdir ~/pgdata

也可以選擇性的創建一個日誌文件用來存放日誌

mkdir ~/logs/pglog

ok,初始化數據庫

initdb -d --locale=C -E UTF8 -D ~/pgdata/

2.5 配置文件

  1. ~/pgdata/pg_hba.conf
    在這裏插入圖片描述
    將IPv4的相關ADDRESS開放.
  2. ~/pgdata/postgresql.conf
    在這裏插入圖片描述
    listen_addreesses = 'localhost'這一行的註釋打開,並且如果想要讓其他主機訪問時可以換成*表示任意主機.
    接下來就是下面的port = 5432這個端口信息的註釋也解開.

2.6 啓動,關閉,重啓

  1. 啓動
pg_ctl -D ~/pgdata -l ~/logs/pglog start
  1. 關閉
pg_ctl -D ~/pgdata stop
  1. 重啓
pg_ctl -D ~/pgdata restart
  1. 其他
pg_ctl --help

登錄的話使用

# -U 用戶名,默認會安裝postgres名的庫和用戶
psql -U postgres

在這裏插入圖片描述

3. 安裝debug插件(可選,根據個人需求)

3.1 下載:

下載地址:

https://git.postgresql.org/gitweb/?p=pldebugger.git

在這裏插入圖片描述
這裏我用的是git方式下載,所以切換到root用戶,或者安裝sudo後,給postgres用戶sudo權限.

這裏需要說明一下,我是直接在/opt/tools/postgresql-12.2/contrib/目錄中下載的,這是由於該插件編譯時,需要PostgreSql安裝包內文件的依賴,這點在pldebugger的README.pldebugger文件中也寫的很清楚.

git clone git://git.postgresql.org/git/pldebugger.git

下載之後,將文件夾及其文件的owner和group改爲postgres

sudo chown -R postgres:postgres /opt/tools/postgresql-12.2/contrib/pldebugger

3.2 安裝:

PostgreSQL pl/pgsql Debugger API
================================

This module is a set of shared libraries which implement an API for debugging
pl/pgsql functions on PostgreSQL 8.4 and above. The pgAdmin project
(http://www.pgadmin.org/) provides a client user interface as part of pgAdmin
III v1.10.0 and above, and pgAdmin 4.

If you wish to debug functions on PostgreSQL 8.4, 9.0 or 9.1, please checkout
the PRE-9_2 branch from GIT.

If you wish to debug functions on PostgreSQL 8.2 or 8.3, please checkout the
PRE_8_4_SERVER branch from CVS.


Installation
------------

- Copy this directory to contrib/ in your PostgreSQL source tree.

- Run 'make; make install'

- Edit your postgresql.conf file, and modify the shared_preload_libraries config
  option to look like:

  shared_preload_libraries = '$libdir/plugin_debugger'

- Restart PostgreSQL for the new setting to take effect.

- Run the following command in the database or databases that you wish to
  debug functions in:

  CREATE EXTENSION pldbgapi;

  (on server versions older than 9.1, you must instead run the pldbgapi--1.1.sql
  script directly using psql).

接下來要做的事情很簡單:

make
make install

完成後在~/pghome/lib/目錄中會生成一個plugin_debugger.so的文件.
在這裏插入圖片描述

3.3 添加配置

在~/pgdata/postgresql.conf文件中,添加響應的引用.
在這裏插入圖片描述
將此行註釋打開,並將後面內容添加到等號右面.
此處的$libdirpostgres的一個變量,指的就是~/pghome/lib目錄

shared_preload_libraries = '$libdir/plugin_debugger'

ok,修改完配置信息後記得重啓服務才能生效

pg_ctl -D ~/pgdata restart

如果配置文件有錯,或者指定的這個文件找不到,那麼會直接報錯,無法啓動.

啓動後進入postgres,可以查詢到剛纔的配置:

show shared_preload_libraries;

在這裏插入圖片描述
注意,到此爲止只是server支持了debug,但是如果想要使用debug時,還需要在相應的數據庫中添加相應的擴展:

CREATE EXTENSION pldbgapi;

在這裏插入圖片描述
順便安利大家一款數據庫軟件,DBeaver,開源的,也很強大,而且同時支持多種數據庫:
在這裏插入圖片描述
如果想要使用DBeaver中的debug功能,還需要安裝一個插件:
在這裏插入圖片描述
在這裏插入圖片描述

這裏也需要注意,要記得這個插件一定要放到publicschema中,我個人而言,放到別的shcema中測報錯:PostgreSQL debug plugin is not installed on the server.

  1. 其他schema中:
    在這裏插入圖片描述
    在這裏插入圖片描述
  2. public schema 中:
    在這裏插入圖片描述
    在這裏插入圖片描述
    ok,這樣就可以痛苦的debug一些函數,或者從其他數據庫移植過來的存儲過程了(雖然pg沒有存儲過程的概念).

不過,很嚴重的一個問題就是,斷點時走的行數,內容跟你肉眼看到的source完全不同,你根本弄不清走到哪裏,調用了哪個函數,所以你只能藉助debug時候,右上角有個Variable面板,根據特殊的變量值來猜測到哪裏了.不知道是不是我安裝時編譯源碼的參數有問題,有老司機請賜教.

4. real類型帶來的問題

首先不得不吐槽一下,目前真的覺得PostgreSql的調試功能真的比Oracle要弱…剛接觸不就,純屬個人感官,不喜勿噴.

不過這次還是幫了我的大忙了,再怎麼說也比肉眼看成千上萬行的函數來的好一點…

我們的項目中關於貸款相關的業務中,一個金額的計算比之前多了1!!!通過調查,最後我將原因鎖定在了postgreSql端的某些functions…
由於我們的項目剛剛嘗試從Oracle數據庫換到了PostgreSql,移植之後,由於P家沒有存儲過程的概念,所以之前的存儲過程被切分成了N個函數,一頓調查,最後發現,原來是real類型的原因!

在這裏插入圖片描述
如圖中所示,如果利率被指定爲real類型,那麼進行乘法(除法)運算後,小數點之後會有N多位小數,由於金額的計算經常有小數,所以之前都是讓乘積 + 0.9999之類的,讓小數部分也計算進位,之後再TRUNC掉小數部分.
但是,本案就因爲這樣,以前計算結果明明是整數的金額,被多加上了1.

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章